[STATEMENT]
theorem compT_wt_instrs:
  "\<lbrakk> P,E \<turnstile>1 e :: T; \<D> e A; \ e (size E); size ST + max_stack e \<le> mxs; size E + max_vars e \<le> mxl; set E \<subseteq> types P \<rbrakk>
  \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (size ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]"
  (is "PROP ?P e E T A ST")

  and compTs_wt_instrs:
  "\<lbrakk> P,E \<turnstile>1 es[::]Ts;  \<D>s es A; \s es (size E); size ST + max_stacks es \<le> mxs; size E + max_varss es \<le> mxl; set E \<subseteq> types P \<rbrakk>
  \<Longrightarrow> let \<tau>s = ty\<^sub>i' ST E A # compTs E A ST es
      in \<turnstile> compEs2 es,compxEs2 es 0 (size ST) [::] \<tau>s \<and> last \<tau>s = ty\<^sub>i' (rev Ts @ ST) E (A \<squnion> \s es)"
  (is "PROP ?Ps es E Ts A ST")
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (\<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]) &&& (\<lbrakk>P,E \<turnstile>1 es [::] Ts; \<D>s es A; \s es (length E); length ST + max_stacks es \<le> mxs; length E + max_varss es \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> let \<tau>s = ty\<^sub>i' ST E A # compTs E A ST es in \<turnstile> compEs2 es, compxEs2 es 0 (length ST) [::] \<tau>s \<and> last \<tau>s = ty\<^sub>i' (rev Ts @ ST) E (A \<squnion> \s es))
[PROOF STEP]
proof(induct E A ST e and E A ST es arbitrary: T and Ts rule: compT_compTs_induct)
[PROOF STATE]
proof (state)
goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
case (TryCatch E A ST e\<^sub>1 C i e\<^sub>2)
[PROOF STATE]
proof (state)
this:
\<lbrakk>P,E \<turnstile>1 e\<^sub>1 :: ?T1; \<D> e\<^sub>1 A; \ e\<^sub>1 (length E); length ST + max_stack e\<^sub>1 \<le> mxs; length E + max_vars e\<^sub>1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e\<^sub>1, compxE2 e\<^sub>1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e\<^sub>1 @ [after E A ST e\<^sub>1]
\<lbrakk>P,E @ [Class C] \<turnstile>1 e\<^sub>2 :: ?T1; \<D> e\<^sub>2 (A \<squnion> \<lfloor>{i}\<rfloor>); \ e\<^sub>2 (length (E @ [Class C])); length ST + max_stack e\<^sub>2 \<le> mxs; length (E @ [Class C]) + max_vars e\<^sub>2 \<le> mxl; set (E @ [Class C]) \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e\<^sub>2, compxE2 e\<^sub>2 0 (length ST) [::] ty\<^sub>i' ST (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e\<^sub>2 @ [after (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e\<^sub>2]
P,E \<turnstile>1 try e\<^sub>1 catch(C i) e\<^sub>2 :: T
\<D> (try e\<^sub>1 catch(C i) e\<^sub>2) A
\ (try e\<^sub>1 catch(C i) e\<^sub>2) (length E)
length ST + max_stack (try e\<^sub>1 catch(C i) e\<^sub>2) \<le> mxs
length E + max_vars (try e\<^sub>1 catch(C i) e\<^sub>2) \<le> mxl
set E \<subseteq> types P

goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
hence [simp]: "i = size E"
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>P,E \<turnstile>1 e\<^sub>1 :: ?T1; \<D> e\<^sub>1 A; \ e\<^sub>1 (length E); length ST + max_stack e\<^sub>1 \<le> mxs; length E + max_vars e\<^sub>1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e\<^sub>1, compxE2 e\<^sub>1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e\<^sub>1 @ [after E A ST e\<^sub>1]
\<lbrakk>P,E @ [Class C] \<turnstile>1 e\<^sub>2 :: ?T1; \<D> e\<^sub>2 (A \<squnion> \<lfloor>{i}\<rfloor>); \ e\<^sub>2 (length (E @ [Class C])); length ST + max_stack e\<^sub>2 \<le> mxs; length (E @ [Class C]) + max_vars e\<^sub>2 \<le> mxl; set (E @ [Class C]) \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e\<^sub>2, compxE2 e\<^sub>2 0 (length ST) [::] ty\<^sub>i' ST (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e\<^sub>2 @ [after (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e\<^sub>2]
P,E \<turnstile>1 try e\<^sub>1 catch(C i) e\<^sub>2 :: T
\<D> (try e\<^sub>1 catch(C i) e\<^sub>2) A
\ (try e\<^sub>1 catch(C i) e\<^sub>2) (length E)
length ST + max_stack (try e\<^sub>1 catch(C i) e\<^sub>2) \<le> mxs
length E + max_vars (try e\<^sub>1 catch(C i) e\<^sub>2) \<le> mxl
set E \<subseteq> types P

goal (1 subgoal):
 1. i = length E
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
i = length E

goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
have wt\<^sub>1: "P,E \<turnstile>1 e\<^sub>1 :: T" and wt\<^sub>2: "P,E@[Class C] \<turnstile>1 e\<^sub>2 :: T"
    and "class": "is_class P C"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. P,E \<turnstile>1 e\<^sub>1 :: T &&& P,E @ [Class C] \<turnstile>1 e\<^sub>2 :: T &&& is_class P C
[PROOF STEP]
using TryCatch
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>P,E \<turnstile>1 e\<^sub>1 :: ?T1; \<D> e\<^sub>1 A; \ e\<^sub>1 (length E); length ST + max_stack e\<^sub>1 \<le> mxs; length E + max_vars e\<^sub>1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e\<^sub>1, compxE2 e\<^sub>1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e\<^sub>1 @ [after E A ST e\<^sub>1]
\<lbrakk>P,E @ [Class C] \<turnstile>1 e\<^sub>2 :: ?T1; \<D> e\<^sub>2 (A \<squnion> \<lfloor>{i}\<rfloor>); \ e\<^sub>2 (length (E @ [Class C])); length ST + max_stack e\<^sub>2 \<le> mxs; length (E @ [Class C]) + max_vars e\<^sub>2 \<le> mxl; set (E @ [Class C]) \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e\<^sub>2, compxE2 e\<^sub>2 0 (length ST) [::] ty\<^sub>i' ST (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e\<^sub>2 @ [after (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e\<^sub>2]
P,E \<turnstile>1 try e\<^sub>1 catch(C i) e\<^sub>2 :: T
\<D> (try e\<^sub>1 catch(C i) e\<^sub>2) A
\ (try e\<^sub>1 catch(C i) e\<^sub>2) (length E)
length ST + max_stack (try e\<^sub>1 catch(C i) e\<^sub>2) \<le> mxs
length E + max_vars (try e\<^sub>1 catch(C i) e\<^sub>2) \<le> mxl
set E \<subseteq> types P

goal (1 subgoal):
 1. P,E \<turnstile>1 e\<^sub>1 :: T &&& P,E @ [Class C] \<turnstile>1 e\<^sub>2 :: T &&& is_class P C
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
P,E \<turnstile>1 e\<^sub>1 :: T
P,E @ [Class C] \<turnstile>1 e\<^sub>2 :: T
is_class P C

goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
let ?A\<^sub>1 = "A \<squnion> \ e\<^sub>1"
[PROOF STATE]
proof (state)
goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
let ?A\<^sub>i = "A \<squnion> \<lfloor>{i}\<rfloor>"
[PROOF STATE]
proof (state)
goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
let ?E\<^sub>i = "E @ [Class C]"
[PROOF STATE]
proof (state)
goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
let ?\<tau> = "ty\<^sub>i' ST E A"
[PROOF STATE]
proof (state)
goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
let ?\<tau>s\<^sub>1 = "compT E A ST e\<^sub>1"
[PROOF STATE]
proof (state)
goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
let ?\<tau>\<^sub>1 = "ty\<^sub>i' (T#ST) E ?A\<^sub>1"
[PROOF STATE]
proof (state)
goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
let ?\<tau>\<^sub>2 = "ty\<^sub>i' (Class C#ST) E A"
[PROOF STATE]
proof (state)
goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
let ?\<tau>\<^sub>3 = "ty\<^sub>i' ST ?E\<^sub>i ?A\<^sub>i"
[PROOF STATE]
proof (state)
goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
let ?\<tau>s\<^sub>2 = "compT ?E\<^sub>i ?A\<^sub>i ST e\<^sub>2"
[PROOF STATE]
proof (state)
goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
let ?\<tau>\<^sub>2' = "ty\<^sub>i' (T#ST) ?E\<^sub>i (?A\<^sub>i \<squnion> \ e\<^sub>2)"
[PROOF STATE]
proof (state)
goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
let ?\<tau>' = "ty\<^sub>i' (T#ST) E (A \<squnion> \ e\<^sub>1 \<sqinter> (\ e\<^sub>2 \<ominus> i))"
[PROOF STATE]
proof (state)
goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
let ?go = "Goto (int(size(compE2 e\<^sub>2)) + 2)"
[PROOF STATE]
proof (state)
goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
have "PROP ?P e\<^sub>2 ?E\<^sub>i T ?A\<^sub>i ST"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<lbrakk>P,E @ [Class C] \<turnstile>1 e\<^sub>2 :: T; \<D> e\<^sub>2 (A \<squnion> \<lfloor>{i}\<rfloor>); \ e\<^sub>2 (length (E @ [Class C])); length ST + max_stack e\<^sub>2 \<le> mxs; length (E @ [Class C]) + max_vars e\<^sub>2 \<le> mxl; set (E @ [Class C]) \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e\<^sub>2, compxE2 e\<^sub>2 0 (length ST) [::] ty\<^sub>i' ST (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e\<^sub>2 @ [after (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e\<^sub>2]
[PROOF STEP]
by fact
[PROOF STATE]
proof (state)
this:
\<lbrakk>P,E @ [Class C] \<turnstile>1 e\<^sub>2 :: T; \<D> e\<^sub>2 (A \<squnion> \<lfloor>{i}\<rfloor>); \ e\<^sub>2 (length (E @ [Class C])); length ST + max_stack e\<^sub>2 \<le> mxs; length (E @ [Class C]) + max_vars e\<^sub>2 \<le> mxl; set (E @ [Class C]) \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e\<^sub>2, compxE2 e\<^sub>2 0 (length ST) [::] ty\<^sub>i' ST (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e\<^sub>2 @ [after (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e\<^sub>2]

goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
hence "\<turnstile> compE2 e\<^sub>2,compxE2 e\<^sub>2 0 (size ST) [::] (?\<tau>\<^sub>3 # ?\<tau>s\<^sub>2) @ [?\<tau>\<^sub>2']"
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>P,E @ [Class C] \<turnstile>1 e\<^sub>2 :: T; \<D> e\<^sub>2 (A \<squnion> \<lfloor>{i}\<rfloor>); \ e\<^sub>2 (length (E @ [Class C])); length ST + max_stack e\<^sub>2 \<le> mxs; length (E @ [Class C]) + max_vars e\<^sub>2 \<le> mxl; set (E @ [Class C]) \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e\<^sub>2, compxE2 e\<^sub>2 0 (length ST) [::] ty\<^sub>i' ST (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e\<^sub>2 @ [after (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e\<^sub>2]

goal (1 subgoal):
 1. \<turnstile> compE2 e\<^sub>2, compxE2 e\<^sub>2 0 (length ST) [::] (ty\<^sub>i' ST (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e\<^sub>2) @ [ty\<^sub>i' (T # ST) (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e\<^sub>2)]
[PROOF STEP]
using TryCatch.prems "class"
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>P,E @ [Class C] \<turnstile>1 e\<^sub>2 :: T; \<D> e\<^sub>2 (A \<squnion> \<lfloor>{i}\<rfloor>); \ e\<^sub>2 (length (E @ [Class C])); length ST + max_stack e\<^sub>2 \<le> mxs; length (E @ [Class C]) + max_vars e\<^sub>2 \<le> mxl; set (E @ [Class C]) \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e\<^sub>2, compxE2 e\<^sub>2 0 (length ST) [::] ty\<^sub>i' ST (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e\<^sub>2 @ [after (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e\<^sub>2]
P,E \<turnstile>1 try e\<^sub>1 catch(C i) e\<^sub>2 :: T
\<D> (try e\<^sub>1 catch(C i) e\<^sub>2) A
\ (try e\<^sub>1 catch(C i) e\<^sub>2) (length E)
length ST + max_stack (try e\<^sub>1 catch(C i) e\<^sub>2) \<le> mxs
length E + max_vars (try e\<^sub>1 catch(C i) e\<^sub>2) \<le> mxl
set E \<subseteq> types P
is_class P C

goal (1 subgoal):
 1. \<turnstile> compE2 e\<^sub>2, compxE2 e\<^sub>2 0 (length ST) [::] (ty\<^sub>i' ST (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e\<^sub>2) @ [ty\<^sub>i' (T # ST) (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e\<^sub>2)]
[PROOF STEP]
by(auto simp:after_def)
[PROOF STATE]
proof (state)
this:
\<turnstile> compE2 e\<^sub>2, compxE2 e\<^sub>2 0 (length ST) [::] (ty\<^sub>i' ST (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e\<^sub>2) @ [ty\<^sub>i' (T # ST) (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e\<^sub>2)]

goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
\<turnstile> compE2 e\<^sub>2, compxE2 e\<^sub>2 0 (length ST) [::] (ty\<^sub>i' ST (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e\<^sub>2) @ [ty\<^sub>i' (T # ST) (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e\<^sub>2)]

goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
have "?A\<^sub>i \<squnion> \ e\<^sub>2 = (A \<squnion> \ e\<^sub>2) \<squnion> \<lfloor>{size E}\<rfloor>"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. A \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e\<^sub>2 = A \<squnion> \ e\<^sub>2 \<squnion> \<lfloor>{length E}\<rfloor>
[PROOF STEP]
by(fastforce simp:hyperset_defs)
[PROOF STATE]
proof (state)
this:
A \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e\<^sub>2 = A \<squnion> \ e\<^sub>2 \<squnion> \<lfloor>{length E}\<rfloor>

goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
A \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e\<^sub>2 = A \<squnion> \ e\<^sub>2 \<squnion> \<lfloor>{length E}\<rfloor>

goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
have "P \<turnstile> ty\<^sub>i' (T#ST) ?E\<^sub>i \<dots> \<le>' ty\<^sub>i' (T#ST) E (A \<squnion> \ e\<^sub>2)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. P \<turnstile> ty\<^sub>i' (T # ST) (E @ [Class C]) (A \<squnion> \ e\<^sub>2 \<squnion> \<lfloor>{length E}\<rfloor>) \<le>' ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>2)
[PROOF STEP]
by(simp add:hyperset_defs ty\<^sub>l_incr ty\<^sub>i'_def)
[PROOF STATE]
proof (state)
this:
P \<turnstile> ty\<^sub>i' (T # ST) (E @ [Class C]) (A \<squnion> \ e\<^sub>2 \<squnion> \<lfloor>{length E}\<rfloor>) \<le>' ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>2)

goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
P \<turnstile> ty\<^sub>i' (T # ST) (E @ [Class C]) (A \<squnion> \ e\<^sub>2 \<squnion> \<lfloor>{length E}\<rfloor>) \<le>' ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>2)

goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
have "P \<turnstile> \<dots> \<le>' ty\<^sub>i' (T#ST) E (A \<squnion> \ e\<^sub>1 \<sqinter> (\ e\<^sub>2 \<ominus> i))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. P \<turnstile> ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>2) \<le>' ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1 \<sqinter> (\ e\<^sub>2 \<ominus> i))
[PROOF STEP]
by(auto intro!: ty\<^sub>l_antimono simp:hyperset_defs ty\<^sub>i'_def)
[PROOF STATE]
proof (state)
this:
P \<turnstile> ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>2) \<le>' ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1 \<sqinter> (\ e\<^sub>2 \<ominus> i))

goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
P \<turnstile> ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>2) \<le>' ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1 \<sqinter> (\ e\<^sub>2 \<ominus> i))

goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
have "(?\<tau>\<^sub>3 # ?\<tau>s\<^sub>2) @ [?\<tau>'] = ?\<tau>\<^sub>3 # ?\<tau>s\<^sub>2 @ [?\<tau>']"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. (ty\<^sub>i' ST (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e\<^sub>2) @ [ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1 \<sqinter> (\ e\<^sub>2 \<ominus> i))] = ty\<^sub>i' ST (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e\<^sub>2 @ [ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1 \<sqinter> (\ e\<^sub>2 \<ominus> i))]
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
(ty\<^sub>i' ST (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e\<^sub>2) @ [ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1 \<sqinter> (\ e\<^sub>2 \<ominus> i))] = ty\<^sub>i' ST (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e\<^sub>2 @ [ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1 \<sqinter> (\ e\<^sub>2 \<ominus> i))]

goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
(ty\<^sub>i' ST (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e\<^sub>2) @ [ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1 \<sqinter> (\ e\<^sub>2 \<ominus> i))] = ty\<^sub>i' ST (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e\<^sub>2 @ [ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1 \<sqinter> (\ e\<^sub>2 \<ominus> i))]

goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
have "\<turnstile> [Store i],[] [::] ?\<tau>\<^sub>2 # [] @ [?\<tau>\<^sub>3]"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<turnstile> [Store i], [] [::] ty\<^sub>i' (Class C # ST) E A # [] @ [ty\<^sub>i' ST (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>)]
[PROOF STEP]
using TryCatch.prems
[PROOF STATE]
proof (prove)
using this:
P,E \<turnstile>1 try e\<^sub>1 catch(C i) e\<^sub>2 :: T
\<D> (try e\<^sub>1 catch(C i) e\<^sub>2) A
\ (try e\<^sub>1 catch(C i) e\<^sub>2) (length E)
length ST + max_stack (try e\<^sub>1 catch(C i) e\<^sub>2) \<le> mxs
length E + max_vars (try e\<^sub>1 catch(C i) e\<^sub>2) \<le> mxl
set E \<subseteq> types P

goal (1 subgoal):
 1. \<turnstile> [Store i], [] [::] ty\<^sub>i' (Class C # ST) E A # [] @ [ty\<^sub>i' ST (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>)]
[PROOF STEP]
by(auto simp:nth_list_update wt_defs ty\<^sub>i'_def ty\<^sub>l_def
      list_all2_conv_all_nth hyperset_defs)
[PROOF STATE]
proof (state)
this:
\<turnstile> [Store i], [] [::] ty\<^sub>i' (Class C # ST) E A # [] @ [ty\<^sub>i' ST (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>)]

goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
\<turnstile> [Store i], [] [::] ty\<^sub>i' (Class C # ST) E A # [] @ [ty\<^sub>i' ST (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>)]

goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
have "[] @ (?\<tau>\<^sub>3 # ?\<tau>s\<^sub>2 @ [?\<tau>']) = (?\<tau>\<^sub>3 # ?\<tau>s\<^sub>2 @ [?\<tau>'])"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. [] @ ty\<^sub>i' ST (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e\<^sub>2 @ [ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1 \<sqinter> (\ e\<^sub>2 \<ominus> i))] = ty\<^sub>i' ST (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e\<^sub>2 @ [ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1 \<sqinter> (\ e\<^sub>2 \<ominus> i))]
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
[] @ ty\<^sub>i' ST (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e\<^sub>2 @ [ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1 \<sqinter> (\ e\<^sub>2 \<ominus> i))] = ty\<^sub>i' ST (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e\<^sub>2 @ [ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1 \<sqinter> (\ e\<^sub>2 \<ominus> i))]

goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
[] @ ty\<^sub>i' ST (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e\<^sub>2 @ [ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1 \<sqinter> (\ e\<^sub>2 \<ominus> i))] = ty\<^sub>i' ST (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e\<^sub>2 @ [ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1 \<sqinter> (\ e\<^sub>2 \<ominus> i))]

goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
have "P,T\<^sub>r,mxs,size(compE2 e\<^sub>2)+3,[] \<turnstile> ?go,0 :: ?\<tau>\<^sub>1#?\<tau>\<^sub>2#?\<tau>\<^sub>3#?\<tau>s\<^sub>2 @ [?\<tau>']"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. P,T\<^sub>r,mxs,length (compE2 e\<^sub>2) + 3,[] \<turnstile> Goto (int (length (compE2 e\<^sub>2)) + 2),0 :: ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1) # ty\<^sub>i' (Class C # ST) E A # ty\<^sub>i' ST (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e\<^sub>2 @ [ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1 \<sqinter> (\ e\<^sub>2 \<ominus> i))]
[PROOF STEP]
by(auto simp: hyperset_defs ty\<^sub>i'_def wt_defs nth_Cons nat_add_distrib
      fun_of_def intro: ty\<^sub>l_antimono list_all2_refl split:nat.split)
[PROOF STATE]
proof (state)
this:
P,T\<^sub>r,mxs,length (compE2 e\<^sub>2) + 3,[] \<turnstile> Goto (int (length (compE2 e\<^sub>2)) + 2),0 :: ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1) # ty\<^sub>i' (Class C # ST) E A # ty\<^sub>i' ST (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e\<^sub>2 @ [ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1 \<sqinter> (\ e\<^sub>2 \<ominus> i))]

goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
P,T\<^sub>r,mxs,length (compE2 e\<^sub>2) + 3,[] \<turnstile> Goto (int (length (compE2 e\<^sub>2)) + 2),0 :: ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1) # ty\<^sub>i' (Class C # ST) E A # ty\<^sub>i' ST (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e\<^sub>2 @ [ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1 \<sqinter> (\ e\<^sub>2 \<ominus> i))]

goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
have "\<turnstile> compE2 e\<^sub>1,compxE2 e\<^sub>1 0 (size ST) [::] ?\<tau> # ?\<tau>s\<^sub>1 @ [?\<tau>\<^sub>1]"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<turnstile> compE2 e\<^sub>1, compxE2 e\<^sub>1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e\<^sub>1 @ [ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1)]
[PROOF STEP]
using TryCatch
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>P,E \<turnstile>1 e\<^sub>1 :: ?T1; \<D> e\<^sub>1 A; \ e\<^sub>1 (length E); length ST + max_stack e\<^sub>1 \<le> mxs; length E + max_vars e\<^sub>1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e\<^sub>1, compxE2 e\<^sub>1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e\<^sub>1 @ [after E A ST e\<^sub>1]
\<lbrakk>P,E @ [Class C] \<turnstile>1 e\<^sub>2 :: ?T1; \<D> e\<^sub>2 (A \<squnion> \<lfloor>{i}\<rfloor>); \ e\<^sub>2 (length (E @ [Class C])); length ST + max_stack e\<^sub>2 \<le> mxs; length (E @ [Class C]) + max_vars e\<^sub>2 \<le> mxl; set (E @ [Class C]) \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e\<^sub>2, compxE2 e\<^sub>2 0 (length ST) [::] ty\<^sub>i' ST (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e\<^sub>2 @ [after (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e\<^sub>2]
P,E \<turnstile>1 try e\<^sub>1 catch(C i) e\<^sub>2 :: T
\<D> (try e\<^sub>1 catch(C i) e\<^sub>2) A
\ (try e\<^sub>1 catch(C i) e\<^sub>2) (length E)
length ST + max_stack (try e\<^sub>1 catch(C i) e\<^sub>2) \<le> mxs
length E + max_vars (try e\<^sub>1 catch(C i) e\<^sub>2) \<le> mxl
set E \<subseteq> types P

goal (1 subgoal):
 1. \<turnstile> compE2 e\<^sub>1, compxE2 e\<^sub>1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e\<^sub>1 @ [ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1)]
[PROOF STEP]
by(auto simp:after_def)
[PROOF STATE]
proof (state)
this:
\<turnstile> compE2 e\<^sub>1, compxE2 e\<^sub>1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e\<^sub>1 @ [ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1)]

goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
\<turnstile> compE2 e\<^sub>1, compxE2 e\<^sub>1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e\<^sub>1 @ [ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1)]

goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
have "?\<tau> # ?\<tau>s\<^sub>1 @ ?\<tau>\<^sub>1 # ?\<tau>\<^sub>2 # ?\<tau>\<^sub>3 # ?\<tau>s\<^sub>2 @ [?\<tau>'] =
             (?\<tau> # ?\<tau>s\<^sub>1 @ [?\<tau>\<^sub>1]) @ ?\<tau>\<^sub>2 # ?\<tau>\<^sub>3 # ?\<tau>s\<^sub>2 @ [?\<tau>']"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. ty\<^sub>i' ST E A # compT E A ST e\<^sub>1 @ ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1) # ty\<^sub>i' (Class C # ST) E A # ty\<^sub>i' ST (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e\<^sub>2 @ [ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1 \<sqinter> (\ e\<^sub>2 \<ominus> i))] = (ty\<^sub>i' ST E A # compT E A ST e\<^sub>1 @ [ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1)]) @ ty\<^sub>i' (Class C # ST) E A # ty\<^sub>i' ST (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e\<^sub>2 @ [ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1 \<sqinter> (\ e\<^sub>2 \<ominus> i))]
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
ty\<^sub>i' ST E A # compT E A ST e\<^sub>1 @ ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1) # ty\<^sub>i' (Class C # ST) E A # ty\<^sub>i' ST (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e\<^sub>2 @ [ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1 \<sqinter> (\ e\<^sub>2 \<ominus> i))] = (ty\<^sub>i' ST E A # compT E A ST e\<^sub>1 @ [ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1)]) @ ty\<^sub>i' (Class C # ST) E A # ty\<^sub>i' ST (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e\<^sub>2 @ [ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1 \<sqinter> (\ e\<^sub>2 \<ominus> i))]

goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
ty\<^sub>i' ST E A # compT E A ST e\<^sub>1 @ ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1) # ty\<^sub>i' (Class C # ST) E A # ty\<^sub>i' ST (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e\<^sub>2 @ [ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1 \<sqinter> (\ e\<^sub>2 \<ominus> i))] = (ty\<^sub>i' ST E A # compT E A ST e\<^sub>1 @ [ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1)]) @ ty\<^sub>i' (Class C # ST) E A # ty\<^sub>i' ST (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e\<^sub>2 @ [ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1 \<sqinter> (\ e\<^sub>2 \<ominus> i))]

goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
have "compE2 e\<^sub>1 @ ?go  # [Store i] @ compE2 e\<^sub>2 =
             (compE2 e\<^sub>1 @ [?go]) @ (Store i # compE2 e\<^sub>2)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. compE2 e\<^sub>1 @ Goto (int (length (compE2 e\<^sub>2)) + 2) # [Store i] @ compE2 e\<^sub>2 = (compE2 e\<^sub>1 @ [Goto (int (length (compE2 e\<^sub>2)) + 2)]) @ Store i # compE2 e\<^sub>2
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
compE2 e\<^sub>1 @ Goto (int (length (compE2 e\<^sub>2)) + 2) # [Store i] @ compE2 e\<^sub>2 = (compE2 e\<^sub>1 @ [Goto (int (length (compE2 e\<^sub>2)) + 2)]) @ Store i # compE2 e\<^sub>2

goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
compE2 e\<^sub>1 @ Goto (int (length (compE2 e\<^sub>2)) + 2) # [Store i] @ compE2 e\<^sub>2 = (compE2 e\<^sub>1 @ [Goto (int (length (compE2 e\<^sub>2)) + 2)]) @ Store i # compE2 e\<^sub>2

goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
let "?Q \<tau>" = "\<forall>ST' LT'. \<tau> = \<lfloor>(ST', LT')\<rfloor> \<longrightarrow>
    size ST \<le> size ST' \<and> P \<turnstile> Some (drop (size ST' - size ST) ST',LT') \<le>' ty\<^sub>i' ST E A"
[PROOF STATE]
proof (state)
goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
{
[PROOF STATE]
proof (state)
goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
have "?Q (ty\<^sub>i' ST E A)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<forall>ST' LT'. ty\<^sub>i' ST E A = \<lfloor>(ST', LT')\<rfloor> \<longrightarrow> length ST \<le> length ST' \<and> P \<turnstile> \<lfloor>(drop (length ST' - length ST) ST', LT')\<rfloor> \<le>' ty\<^sub>i' ST E A
[PROOF STEP]
by(clarsimp simp add: ty\<^sub>i'_def)
[PROOF STATE]
proof (state)
this:
\<forall>ST' LT'. ty\<^sub>i' ST E A = \<lfloor>(ST', LT')\<rfloor> \<longrightarrow> length ST \<le> length ST' \<and> P \<turnstile> \<lfloor>(drop (length ST' - length ST) ST', LT')\<rfloor> \<le>' ty\<^sub>i' ST E A

goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
\<forall>ST' LT'. ty\<^sub>i' ST E A = \<lfloor>(ST', LT')\<rfloor> \<longrightarrow> length ST \<le> length ST' \<and> P \<turnstile> \<lfloor>(drop (length ST' - length ST) ST', LT')\<rfloor> \<le>' ty\<^sub>i' ST E A

goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
have "?Q (ty\<^sub>i' (T # ST) E ?A\<^sub>1)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<forall>ST' LT'. ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1) = \<lfloor>(ST', LT')\<rfloor> \<longrightarrow> length ST \<le> length ST' \<and> P \<turnstile> \<lfloor>(drop (length ST' - length ST) ST', LT')\<rfloor> \<le>' ty\<^sub>i' ST E A
[PROOF STEP]
by (fastforce simp add: ty\<^sub>i'_def hyperset_defs intro!: ty\<^sub>l_antimono)
[PROOF STATE]
proof (state)
this:
\<forall>ST' LT'. ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1) = \<lfloor>(ST', LT')\<rfloor> \<longrightarrow> length ST \<le> length ST' \<and> P \<turnstile> \<lfloor>(drop (length ST' - length ST) ST', LT')\<rfloor> \<le>' ty\<^sub>i' ST E A

goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
\<forall>ST' LT'. ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1) = \<lfloor>(ST', LT')\<rfloor> \<longrightarrow> length ST \<le> length ST' \<and> P \<turnstile> \<lfloor>(drop (length ST' - length ST) ST', LT')\<rfloor> \<le>' ty\<^sub>i' ST E A

goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
{
[PROOF STATE]
proof (state)
this:
\<forall>ST' LT'. ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1) = \<lfloor>(ST', LT')\<rfloor> \<longrightarrow> length ST \<le> length ST' \<and> P \<turnstile> \<lfloor>(drop (length ST' - length ST) ST', LT')\<rfloor> \<le>' ty\<^sub>i' ST E A

goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
fix \<tau>
[PROOF STATE]
proof (state)
goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
assume \<tau>: "\<tau> \<in> set (compT E A ST e\<^sub>1)"
[PROOF STATE]
proof (state)
this:
\<tau> \<in> set (compT E A ST e\<^sub>1)

goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
hence "\<forall>ST' LT'. \<tau> = \<lfloor>(ST', LT')\<rfloor> \<longrightarrow> ST' \<bind> ST"
[PROOF STATE]
proof (prove)
using this:
\<tau> \<in> set (compT E A ST e\<^sub>1)

goal (1 subgoal):
 1. \<forall>ST' LT'. \<tau> = \<lfloor>(ST', LT')\<rfloor> \<longrightarrow> ST' \<bind> ST
[PROOF STEP]
by(auto intro: compT_ST_prefix[OF suffix_order.order_refl])
[PROOF STATE]
proof (state)
this:
\<forall>ST' LT'. \<tau> = \<lfloor>(ST', LT')\<rfloor> \<longrightarrow> ST' \<bind> ST

goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
with \<tau>
[PROOF STATE]
proof (chain)
picking this:
\<tau> \<in> set (compT E A ST e\<^sub>1)
\<forall>ST' LT'. \<tau> = \<lfloor>(ST', LT')\<rfloor> \<longrightarrow> ST' \<bind> ST
[PROOF STEP]
have "?Q \<tau>"
[PROOF STATE]
proof (prove)
using this:
\<tau> \<in> set (compT E A ST e\<^sub>1)
\<forall>ST' LT'. \<tau> = \<lfloor>(ST', LT')\<rfloor> \<longrightarrow> ST' \<bind> ST

goal (1 subgoal):
 1. \<forall>ST' LT'. \<tau> = \<lfloor>(ST', LT')\<rfloor> \<longrightarrow> length ST \<le> length ST' \<and> P \<turnstile> \<lfloor>(drop (length ST' - length ST) ST', LT')\<rfloor> \<le>' ty\<^sub>i' ST E A
[PROOF STEP]
unfolding postfix_conv_eq_length_drop
[PROOF STATE]
proof (prove)
using this:
\<tau> \<in> set (compT E A ST e\<^sub>1)
\<forall>ST' LT'. \<tau> = \<lfloor>(ST', LT')\<rfloor> \<longrightarrow> length ST \<le> length ST' \<and> drop (length ST' - length ST) ST' = ST

goal (1 subgoal):
 1. \<forall>ST' LT'. \<tau> = \<lfloor>(ST', LT')\<rfloor> \<longrightarrow> length ST \<le> length ST' \<and> P \<turnstile> \<lfloor>(drop (length ST' - length ST) ST', LT')\<rfloor> \<le>' ty\<^sub>i' ST E A
[PROOF STEP]
using \<open>\ (try e\<^sub>1 catch(C i) e\<^sub>2) (length E)\<close>
[PROOF STATE]
proof (prove)
using this:
\<tau> \<in> set (compT E A ST e\<^sub>1)
\<forall>ST' LT'. \<tau> = \<lfloor>(ST', LT')\<rfloor> \<longrightarrow> length ST \<le> length ST' \<and> drop (length ST' - length ST) ST' = ST
\ (try e\<^sub>1 catch(C i) e\<^sub>2) (length E)

goal (1 subgoal):
 1. \<forall>ST' LT'. \<tau> = \<lfloor>(ST', LT')\<rfloor> \<longrightarrow> length ST \<le> length ST' \<and> P \<turnstile> \<lfloor>(drop (length ST' - length ST) ST', LT')\<rfloor> \<le>' ty\<^sub>i' ST E A
[PROOF STEP]
by(fastforce dest!: compT_LT_prefix simp add: ty\<^sub>i'_def)
[PROOF STATE]
proof (state)
this:
\<forall>ST' LT'. \<tau> = \<lfloor>(ST', LT')\<rfloor> \<longrightarrow> length ST \<le> length ST' \<and> P \<turnstile> \<lfloor>(drop (length ST' - length ST) ST', LT')\<rfloor> \<le>' ty\<^sub>i' ST E A

goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
}
[PROOF STATE]
proof (state)
this:
?\<tau>6 \<in> set (compT E A ST e\<^sub>1) \<Longrightarrow> \<forall>ST' LT'. ?\<tau>6 = \<lfloor>(ST', LT')\<rfloor> \<longrightarrow> length ST \<le> length ST' \<and> P \<turnstile> \<lfloor>(drop (length ST' - length ST) ST', LT')\<rfloor> \<le>' ty\<^sub>i' ST E A

goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
\<forall>ST' LT'. ty\<^sub>i' ST E A = \<lfloor>(ST', LT')\<rfloor> \<longrightarrow> length ST \<le> length ST' \<and> P \<turnstile> \<lfloor>(drop (length ST' - length ST) ST', LT')\<rfloor> \<le>' ty\<^sub>i' ST E A
\<forall>ST' LT'. ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1) = \<lfloor>(ST', LT')\<rfloor> \<longrightarrow> length ST \<le> length ST' \<and> P \<turnstile> \<lfloor>(drop (length ST' - length ST) ST', LT')\<rfloor> \<le>' ty\<^sub>i' ST E A
?\<tau>6 \<in> set (compT E A ST e\<^sub>1) \<Longrightarrow> \<forall>ST' LT'. ?\<tau>6 = \<lfloor>(ST', LT')\<rfloor> \<longrightarrow> length ST \<le> length ST' \<and> P \<turnstile> \<lfloor>(drop (length ST' - length ST) ST', LT')\<rfloor> \<le>' ty\<^sub>i' ST E A
[PROOF STEP]
have "\<forall>\<tau>\<in>set (ty\<^sub>i' ST E A # compT E A ST e\<^sub>1 @ [ty\<^sub>i' (T # ST) E ?A\<^sub>1]). ?Q \<tau>"
[PROOF STATE]
proof (prove)
using this:
\<forall>ST' LT'. ty\<^sub>i' ST E A = \<lfloor>(ST', LT')\<rfloor> \<longrightarrow> length ST \<le> length ST' \<and> P \<turnstile> \<lfloor>(drop (length ST' - length ST) ST', LT')\<rfloor> \<le>' ty\<^sub>i' ST E A
\<forall>ST' LT'. ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1) = \<lfloor>(ST', LT')\<rfloor> \<longrightarrow> length ST \<le> length ST' \<and> P \<turnstile> \<lfloor>(drop (length ST' - length ST) ST', LT')\<rfloor> \<le>' ty\<^sub>i' ST E A
?\<tau>6 \<in> set (compT E A ST e\<^sub>1) \<Longrightarrow> \<forall>ST' LT'. ?\<tau>6 = \<lfloor>(ST', LT')\<rfloor> \<longrightarrow> length ST \<le> length ST' \<and> P \<turnstile> \<lfloor>(drop (length ST' - length ST) ST', LT')\<rfloor> \<le>' ty\<^sub>i' ST E A

goal (1 subgoal):
 1. \<forall>\<tau>\<in>set (ty\<^sub>i' ST E A # compT E A ST e\<^sub>1 @ [ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1)]). \<forall>ST' LT'. \<tau> = \<lfloor>(ST', LT')\<rfloor> \<longrightarrow> length ST \<le> length ST' \<and> P \<turnstile> \<lfloor>(drop (length ST' - length ST) ST', LT')\<rfloor> \<le>' ty\<^sub>i' ST E A
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
\<forall>\<tau>\<in>set (ty\<^sub>i' ST E A # compT E A ST e\<^sub>1 @ [ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1)]). \<forall>ST' LT'. \<tau> = \<lfloor>(ST', LT')\<rfloor> \<longrightarrow> length ST \<le> length ST' \<and> P \<turnstile> \<lfloor>(drop (length ST' - length ST) ST', LT')\<rfloor> \<le>' ty\<^sub>i' ST E A

goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
}
[PROOF STATE]
proof (state)
this:
\<forall>\<tau>\<in>set (ty\<^sub>i' ST E A # compT E A ST e\<^sub>1 @ [ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1)]). \<forall>ST' LT'. \<tau> = \<lfloor>(ST', LT')\<rfloor> \<longrightarrow> length ST \<le> length ST' \<and> P \<turnstile> \<lfloor>(drop (length ST' - length ST) ST', LT')\<rfloor> \<le>' ty\<^sub>i' ST E A

goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
\<forall>\<tau>\<in>set (ty\<^sub>i' ST E A # compT E A ST e\<^sub>1 @ [ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1)]). \<forall>ST' LT'. \<tau> = \<lfloor>(ST', LT')\<rfloor> \<longrightarrow> length ST \<le> length ST' \<and> P \<turnstile> \<lfloor>(drop (length ST' - length ST) ST', LT')\<rfloor> \<le>' ty\<^sub>i' ST E A

goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
from TryCatch.prems max_stack1[of e\<^sub>1]
[PROOF STATE]
proof (chain)
picking this:
P,E \<turnstile>1 try e\<^sub>1 catch(C i) e\<^sub>2 :: T
\<D> (try e\<^sub>1 catch(C i) e\<^sub>2) A
\ (try e\<^sub>1 catch(C i) e\<^sub>2) (length E)
length ST + max_stack (try e\<^sub>1 catch(C i) e\<^sub>2) \<le> mxs
length E + max_vars (try e\<^sub>1 catch(C i) e\<^sub>2) \<le> mxl
set E \<subseteq> types P
1 \<le> max_stack e\<^sub>1
[PROOF STEP]
have "size ST + 1 \<le> mxs"
[PROOF STATE]
proof (prove)
using this:
P,E \<turnstile>1 try e\<^sub>1 catch(C i) e\<^sub>2 :: T
\<D> (try e\<^sub>1 catch(C i) e\<^sub>2) A
\ (try e\<^sub>1 catch(C i) e\<^sub>2) (length E)
length ST + max_stack (try e\<^sub>1 catch(C i) e\<^sub>2) \<le> mxs
length E + max_vars (try e\<^sub>1 catch(C i) e\<^sub>2) \<le> mxl
set E \<subseteq> types P
1 \<le> max_stack e\<^sub>1

goal (1 subgoal):
 1. length ST + 1 \<le> mxs
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
length ST + 1 \<le> mxs

goal (26 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 26 subgoals...
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
\<lbrakk>length [] + 1 = length [Store i]; length (compE2 e\<^sub>2) + 3 = length (ty\<^sub>i' (Class C # ST) E A # ty\<^sub>i' ST (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e\<^sub>2 @ [ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1 \<sqinter> (\ e\<^sub>2 \<ominus> i))]) + 1; length (compT E A ST e\<^sub>1) + 1 = length (compE2 e\<^sub>1); length (compE2 e\<^sub>1 @ [Goto (int (length (compE2 e\<^sub>2)) + 2)]) = length (ty\<^sub>i' ST E A # compT E A ST e\<^sub>1 @ [ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1)]); is_class P C; length ST < mxs\<rbrakk> \<Longrightarrow> \<turnstile> (compE2 e\<^sub>1 @ [Goto (int (length (compE2 e\<^sub>2)) + 2)]) @ Store i # compE2 e\<^sub>2, (compxE2 e\<^sub>1 0 (length ST) @ shift (length (compE2 e\<^sub>1)) (shift 1 ([] @ shift (length [Store i]) (compxE2 e\<^sub>2 0 (length ST))))) @ [(0, length (compE2 e\<^sub>1 @ [Goto (int (length (compE2 e\<^sub>2)) + 2)]) - Suc ?n, \<lfloor>C\<rfloor>, length (compE2 e\<^sub>1 @ [Goto (int (length (compE2 e\<^sub>2)) + 2)]), length ST)] [::] (ty\<^sub>i' ST E A # compT E A ST e\<^sub>1 @ [ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1)]) @ ty\<^sub>i' (Class C # ST) E A # ty\<^sub>i' ST (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e\<^sub>2 @ [ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1 \<sqinter> (\ e\<^sub>2 \<ominus> i))]
length ST + 1 \<le> mxs
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>length [] + 1 = length [Store i]; length (compE2 e\<^sub>2) + 3 = length (ty\<^sub>i' (Class C # ST) E A # ty\<^sub>i' ST (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e\<^sub>2 @ [ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1 \<sqinter> (\ e\<^sub>2 \<ominus> i))]) + 1; length (compT E A ST e\<^sub>1) + 1 = length (compE2 e\<^sub>1); length (compE2 e\<^sub>1 @ [Goto (int (length (compE2 e\<^sub>2)) + 2)]) = length (ty\<^sub>i' ST E A # compT E A ST e\<^sub>1 @ [ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1)]); is_class P C; length ST < mxs\<rbrakk> \<Longrightarrow> \<turnstile> (compE2 e\<^sub>1 @ [Goto (int (length (compE2 e\<^sub>2)) + 2)]) @ Store i # compE2 e\<^sub>2, (compxE2 e\<^sub>1 0 (length ST) @ shift (length (compE2 e\<^sub>1)) (shift 1 ([] @ shift (length [Store i]) (compxE2 e\<^sub>2 0 (length ST))))) @ [(0, length (compE2 e\<^sub>1 @ [Goto (int (length (compE2 e\<^sub>2)) + 2)]) - Suc ?n, \<lfloor>C\<rfloor>, length (compE2 e\<^sub>1 @ [Goto (int (length (compE2 e\<^sub>2)) + 2)]), length ST)] [::] (ty\<^sub>i' ST E A # compT E A ST e\<^sub>1 @ [ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1)]) @ ty\<^sub>i' (Class C # ST) E A # ty\<^sub>i' ST (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e\<^sub>2 @ [ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1 \<sqinter> (\ e\<^sub>2 \<ominus> i))]
length ST + 1 \<le> mxs

goal (1 subgoal):
 1. \<turnstile> compE2 (try e\<^sub>1 catch(C i) e\<^sub>2), compxE2 (try e\<^sub>1 catch(C i) e\<^sub>2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (try e\<^sub>1 catch(C i) e\<^sub>2) @ [after E A ST (try e\<^sub>1 catch(C i) e\<^sub>2)]
[PROOF STEP]
using wt\<^sub>1 wt\<^sub>2 TryCatch.prems "class"
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>length [] + 1 = length [Store i]; length (compE2 e\<^sub>2) + 3 = length (ty\<^sub>i' (Class C # ST) E A # ty\<^sub>i' ST (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e\<^sub>2 @ [ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1 \<sqinter> (\ e\<^sub>2 \<ominus> i))]) + 1; length (compT E A ST e\<^sub>1) + 1 = length (compE2 e\<^sub>1); length (compE2 e\<^sub>1 @ [Goto (int (length (compE2 e\<^sub>2)) + 2)]) = length (ty\<^sub>i' ST E A # compT E A ST e\<^sub>1 @ [ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1)]); is_class P C; length ST < mxs\<rbrakk> \<Longrightarrow> \<turnstile> (compE2 e\<^sub>1 @ [Goto (int (length (compE2 e\<^sub>2)) + 2)]) @ Store i # compE2 e\<^sub>2, (compxE2 e\<^sub>1 0 (length ST) @ shift (length (compE2 e\<^sub>1)) (shift 1 ([] @ shift (length [Store i]) (compxE2 e\<^sub>2 0 (length ST))))) @ [(0, length (compE2 e\<^sub>1 @ [Goto (int (length (compE2 e\<^sub>2)) + 2)]) - Suc ?n, \<lfloor>C\<rfloor>, length (compE2 e\<^sub>1 @ [Goto (int (length (compE2 e\<^sub>2)) + 2)]), length ST)] [::] (ty\<^sub>i' ST E A # compT E A ST e\<^sub>1 @ [ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1)]) @ ty\<^sub>i' (Class C # ST) E A # ty\<^sub>i' ST (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class C]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e\<^sub>2 @ [ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1 \<sqinter> (\ e\<^sub>2 \<ominus> i))]
length ST + 1 \<le> mxs
P,E \<turnstile>1 e\<^sub>1 :: T
P,E @ [Class C] \<turnstile>1 e\<^sub>2 :: T
P,E \<turnstile>1 try e\<^sub>1 catch(C i) e\<^sub>2 :: T
\<D> (try e\<^sub>1 catch(C i) e\<^sub>2) A
\ (try e\<^sub>1 catch(C i) e\<^sub>2) (length E)
length ST + max_stack (try e\<^sub>1 catch(C i) e\<^sub>2) \<le> mxs
length E + max_vars (try e\<^sub>1 catch(C i) e\<^sub>2) \<le> mxl
set E \<subseteq> types P
is_class P C

goal (1 subgoal):
 1. \<turnstile> compE2 (try e\<^sub>1 catch(C i) e\<^sub>2), compxE2 (try e\<^sub>1 catch(C i) e\<^sub>2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (try e\<^sub>1 catch(C i) e\<^sub>2) @ [after E A ST (try e\<^sub>1 catch(C i) e\<^sub>2)]
[PROOF STEP]
by (simp add:after_def)(erule_tac x=0 in meta_allE, simp)
[PROOF STATE]
proof (state)
this:
\<turnstile> compE2 (try e\<^sub>1 catch(C i) e\<^sub>2), compxE2 (try e\<^sub>1 catch(C i) e\<^sub>2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (try e\<^sub>1 catch(C i) e\<^sub>2) @ [after E A ST (try e\<^sub>1 catch(C i) e\<^sub>2)]

goal (25 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 25 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (25 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 25 subgoals...
[PROOF STEP]
case (Synchronized E A ST i e1 e2)
[PROOF STATE]
proof (state)
this:
\<lbrakk>P,E \<turnstile>1 e1 :: ?T1; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]
\<lbrakk>P,E @ [Class Object] \<turnstile>1 e2 :: ?T1; \<D> e2 (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>); \ e2 (length (E @ [Class Object])); length ST + max_stack e2 \<le> mxs; length (E @ [Class Object]) + max_vars e2 \<le> mxl; set (E @ [Class Object]) \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length ST) [::] ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2 @ [after (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2]
P,E \<turnstile>1 sync\<^bsub>i\<^esub> (e1) e2 :: T
\<D> (sync\<^bsub>i\<^esub> (e1) e2) A
\ (sync\<^bsub>i\<^esub> (e1) e2) (length E)
length ST + max_stack (sync\<^bsub>i\<^esub> (e1) e2) \<le> mxs
length E + max_vars (sync\<^bsub>i\<^esub> (e1) e2) \<le> mxl
set E \<subseteq> types P

goal (25 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 25 subgoals...
[PROOF STEP]
note wt = \<open>P,E \<turnstile>1 sync\<^bsub>i\<^esub> (e1) e2 :: T\<close>
[PROOF STATE]
proof (state)
this:
P,E \<turnstile>1 sync\<^bsub>i\<^esub> (e1) e2 :: T

goal (25 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 25 subgoals...
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
P,E \<turnstile>1 sync\<^bsub>i\<^esub> (e1) e2 :: T
[PROOF STEP]
obtain U where wt1: "P,E \<turnstile>1 e1 :: U"
    and U: "is_refT U" "U \<noteq> NT"
    and wt2: "P,E@[Class Object] \<turnstile>1 e2 :: T"
[PROOF STATE]
proof (prove)
using this:
P,E \<turnstile>1 sync\<^bsub>i\<^esub> (e1) e2 :: T

goal (1 subgoal):
 1. (\<And>U. \<lbrakk>P,E \<turnstile>1 e1 :: U; is_refT U; U \<noteq> NT; P,E @ [Class Object] \<turnstile>1 e2 :: T\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
P,E \<turnstile>1 e1 :: U
is_refT U
U \<noteq> NT
P,E @ [Class Object] \<turnstile>1 e2 :: T

goal (25 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 25 subgoals...
[PROOF STEP]
from \<open>\ (sync\<^bsub>i\<^esub> (e1) e2) (length E)\<close>
[PROOF STATE]
proof (chain)
picking this:
\ (sync\<^bsub>i\<^esub> (e1) e2) (length E)
[PROOF STEP]
have [simp]: "i = length E"
    and B1: "\ e1 (length E)" and B2: "\ e2 (length (E@[Class Object]))"
[PROOF STATE]
proof (prove)
using this:
\ (sync\<^bsub>i\<^esub> (e1) e2) (length E)

goal (1 subgoal):
 1. i = length E &&& \ e1 (length E) &&& \ e2 (length (E @ [Class Object]))
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
i = length E
\ e1 (length E)
\ e2 (length (E @ [Class Object]))

goal (25 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 25 subgoals...
[PROOF STEP]
note lenST = \<open>length ST + max_stack (sync\<^bsub>i\<^esub> (e1) e2) \<le> mxs\<close>
[PROOF STATE]
proof (state)
this:
length ST + max_stack (sync\<^bsub>i\<^esub> (e1) e2) \<le> mxs

goal (25 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 25 subgoals...
[PROOF STEP]
note lenE = \<open>length E + max_vars (sync\<^bsub>i\<^esub> (e1) e2) \<le> mxl\<close>
[PROOF STATE]
proof (state)
this:
length E + max_vars (sync\<^bsub>i\<^esub> (e1) e2) \<le> mxl

goal (25 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 25 subgoals...
[PROOF STEP]
let ?A1 = "A \<squnion> \ e1"
[PROOF STATE]
proof (state)
goal (25 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 25 subgoals...
[PROOF STEP]
let ?A2 = "?A1 \<squnion> \<lfloor>{i}\<rfloor>"
[PROOF STATE]
proof (state)
goal (25 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 25 subgoals...
[PROOF STEP]
let ?A3 = "?A2 \<squnion> \ e2"
[PROOF STATE]
proof (state)
goal (25 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 25 subgoals...
[PROOF STEP]
let ?A4 = "?A1 \<squnion> \ e2"
[PROOF STATE]
proof (state)
goal (25 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 25 subgoals...
[PROOF STEP]
let ?E1 = "E @ [Class Object]"
[PROOF STATE]
proof (state)
goal (25 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 25 subgoals...
[PROOF STEP]
let ?\<tau> = "ty\<^sub>i' ST E A"
[PROOF STATE]
proof (state)
goal (25 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 25 subgoals...
[PROOF STEP]
let ?\<tau>s1 = "compT E A ST e1"
[PROOF STATE]
proof (state)
goal (25 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 25 subgoals...
[PROOF STEP]
let ?\<tau>1 = "ty\<^sub>i' (U#ST) E ?A1"
[PROOF STATE]
proof (state)
goal (25 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 25 subgoals...
[PROOF STEP]
let ?\<tau>1' = "ty\<^sub>i' (Class Object # Class Object # ST) E ?A1"
[PROOF STATE]
proof (state)
goal (25 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 25 subgoals...
[PROOF STEP]
let ?\<tau>1'' = "ty\<^sub>i' (Class Object#ST) ?E1 ?A2"
[PROOF STATE]
proof (state)
goal (25 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 25 subgoals...
[PROOF STEP]
let ?\<tau>1''' = "ty\<^sub>i' ST ?E1 ?A2"
[PROOF STATE]
proof (state)
goal (25 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 25 subgoals...
[PROOF STEP]
let ?\<tau>s2 = "compT ?E1 ?A2 ST e2"
[PROOF STATE]
proof (state)
goal (25 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 25 subgoals...
[PROOF STEP]
let ?\<tau>2 = "ty\<^sub>i' (T#ST) ?E1 ?A3"
[PROOF STATE]
proof (state)
goal (25 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 25 subgoals...
[PROOF STEP]
let ?\<tau>2' = "ty\<^sub>i' (Class Object#T#ST) ?E1 ?A3"
[PROOF STATE]
proof (state)
goal (25 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 25 subgoals...
[PROOF STEP]
let ?\<tau>2'' = ?\<tau>2
[PROOF STATE]
proof (state)
goal (25 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 25 subgoals...
[PROOF STEP]
let ?\<tau>3 = "ty\<^sub>i' (Class Throwable#ST) ?E1 ?A2"
[PROOF STATE]
proof (state)
goal (25 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 25 subgoals...
[PROOF STEP]
let ?\<tau>3' = "ty\<^sub>i' (Class Object#Class Throwable#ST) ?E1 ?A2"
[PROOF STATE]
proof (state)
goal (25 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 25 subgoals...
[PROOF STEP]
let ?\<tau>3'' = ?\<tau>3
[PROOF STATE]
proof (state)
goal (25 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 25 subgoals...
[PROOF STEP]
let ?\<tau>' = "ty\<^sub>i' (T#ST) E ?A4"
[PROOF STATE]
proof (state)
goal (25 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 25 subgoals...
[PROOF STEP]
from lenE lenST max_stack1[of e2] U
[PROOF STATE]
proof (chain)
picking this:
length E + max_vars (sync\<^bsub>i\<^esub> (e1) e2) \<le> mxl
length ST + max_stack (sync\<^bsub>i\<^esub> (e1) e2) \<le> mxs
1 \<le> max_stack e2
is_refT U
U \<noteq> NT
[PROOF STEP]
have "\<turnstile> [Load i, MExit, ThrowExc], [] [::] [?\<tau>3, ?\<tau>3', ?\<tau>3'', ?\<tau>']"
[PROOF STATE]
proof (prove)
using this:
length E + max_vars (sync\<^bsub>i\<^esub> (e1) e2) \<le> mxl
length ST + max_stack (sync\<^bsub>i\<^esub> (e1) e2) \<le> mxs
1 \<le> max_stack e2
is_refT U
U \<noteq> NT

goal (1 subgoal):
 1. \<turnstile> [Load i, MExit, ThrowExc], [] [::] [ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Object # Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (T # ST) E (A \<squnion> \ e1 \<squnion> \ e2)]
[PROOF STEP]
by(auto simp add: ty\<^sub>i'_def ty\<^sub>l_def wt_defs hyperset_defs nth_Cons split: nat.split)
[PROOF STATE]
proof (state)
this:
\<turnstile> [Load i, MExit, ThrowExc], [] [::] [ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Object # Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (T # ST) E (A \<squnion> \ e1 \<squnion> \ e2)]

goal (25 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 25 subgoals...
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
\<turnstile> [Load i, MExit, ThrowExc], [] [::] [ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Object # Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (T # ST) E (A \<squnion> \ e1 \<squnion> \ e2)]

goal (25 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 25 subgoals...
[PROOF STEP]
have "P,T\<^sub>r,mxs,5,[] \<turnstile> Goto 4,0 :: [?\<tau>2'', ?\<tau>3, ?\<tau>3', ?\<tau>3'', ?\<tau>']"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. P,T\<^sub>r,mxs,5,[] \<turnstile> Goto 4,0 :: [ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Object # Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (T # ST) E (A \<squnion> \ e1 \<squnion> \ e2)]
[PROOF STEP]
by(auto simp: hyperset_defs ty\<^sub>i'_def wt_defs intro: ty\<^sub>l_antimono ty\<^sub>l_incr)
[PROOF STATE]
proof (state)
this:
P,T\<^sub>r,mxs,5,[] \<turnstile> Goto 4,0 :: [ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Object # Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (T # ST) E (A \<squnion> \ e1 \<squnion> \ e2)]

goal (25 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 25 subgoals...
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
P,T\<^sub>r,mxs,5,[] \<turnstile> Goto 4,0 :: [ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Object # Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (T # ST) E (A \<squnion> \ e1 \<squnion> \ e2)]

goal (25 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 25 subgoals...
[PROOF STEP]
have "P,T\<^sub>r,mxs,6,[] \<turnstile> MExit,0 :: [?\<tau>2', ?\<tau>2'', ?\<tau>3, ?\<tau>3', ?\<tau>3'', ?\<tau>']"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. P,T\<^sub>r,mxs,6,[] \<turnstile> MExit,0 :: [ty\<^sub>i' (Class Object # T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Object # Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (T # ST) E (A \<squnion> \ e1 \<squnion> \ e2)]
[PROOF STEP]
by(auto simp: hyperset_defs ty\<^sub>i'_def wt_defs intro: ty\<^sub>l_antimono ty\<^sub>l_incr)
[PROOF STATE]
proof (state)
this:
P,T\<^sub>r,mxs,6,[] \<turnstile> MExit,0 :: [ty\<^sub>i' (Class Object # T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Object # Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (T # ST) E (A \<squnion> \ e1 \<squnion> \ e2)]

goal (25 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 25 subgoals...
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
P,T\<^sub>r,mxs,6,[] \<turnstile> MExit,0 :: [ty\<^sub>i' (Class Object # T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Object # Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (T # ST) E (A \<squnion> \ e1 \<squnion> \ e2)]

goal (25 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 25 subgoals...
[PROOF STEP]
from lenE lenST max_stack1[of e2]
[PROOF STATE]
proof (chain)
picking this:
length E + max_vars (sync\<^bsub>i\<^esub> (e1) e2) \<le> mxl
length ST + max_stack (sync\<^bsub>i\<^esub> (e1) e2) \<le> mxs
1 \<le> max_stack e2
[PROOF STEP]
have "P,T\<^sub>r,mxs,7,[] \<turnstile> Load i,0 :: [?\<tau>2, ?\<tau>2', ?\<tau>2'', ?\<tau>3, ?\<tau>3', ?\<tau>3'', ?\<tau>']"
[PROOF STATE]
proof (prove)
using this:
length E + max_vars (sync\<^bsub>i\<^esub> (e1) e2) \<le> mxl
length ST + max_stack (sync\<^bsub>i\<^esub> (e1) e2) \<le> mxs
1 \<le> max_stack e2

goal (1 subgoal):
 1. P,T\<^sub>r,mxs,7,[] \<turnstile> Load i,0 :: [ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Object # T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Object # Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (T # ST) E (A \<squnion> \ e1 \<squnion> \ e2)]
[PROOF STEP]
by(auto simp: hyperset_defs ty\<^sub>i'_def wt_defs ty\<^sub>l_def intro: ty\<^sub>l_antimono)
[PROOF STATE]
proof (state)
this:
P,T\<^sub>r,mxs,7,[] \<turnstile> Load i,0 :: [ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Object # T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Object # Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (T # ST) E (A \<squnion> \ e1 \<squnion> \ e2)]

goal (25 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 25 subgoals...
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
P,T\<^sub>r,mxs,7,[] \<turnstile> Load i,0 :: [ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Object # T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Object # Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (T # ST) E (A \<squnion> \ e1 \<squnion> \ e2)]

goal (25 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 25 subgoals...
[PROOF STEP]
from \<open>\<D> (sync\<^bsub>i\<^esub> (e1) e2) A\<close>
[PROOF STATE]
proof (chain)
picking this:
\<D> (sync\<^bsub>i\<^esub> (e1) e2) A
[PROOF STEP]
have "\<D> e2 (A \<squnion> \ e1 \<squnion> \<lfloor>{length E}\<rfloor>)"
[PROOF STATE]
proof (prove)
using this:
\<D> (sync\<^bsub>i\<^esub> (e1) e2) A

goal (1 subgoal):
 1. \<D> e2 (A \<squnion> \ e1 \<squnion> \<lfloor>{length E}\<rfloor>)
[PROOF STEP]
by(auto elim!: D_mono' simp add: hyperset_defs)
[PROOF STATE]
proof (state)
this:
\<D> e2 (A \<squnion> \ e1 \<squnion> \<lfloor>{length E}\<rfloor>)

goal (25 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 25 subgoals...
[PROOF STEP]
with \<open>PROP ?P e2 ?E1 T ?A2 ST\<close> Synchronized wt2 is_class_Object[OF wf_prog]
[PROOF STATE]
proof (chain)
picking this:
\<lbrakk>P,E @ [Class Object] \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>); \ e2 (length (E @ [Class Object])); length ST + max_stack e2 \<le> mxs; length (E @ [Class Object]) + max_vars e2 \<le> mxl; set (E @ [Class Object]) \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length ST) [::] ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2 @ [after (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2]
\<lbrakk>P,E \<turnstile>1 e1 :: ?T1; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]
\<lbrakk>P,E @ [Class Object] \<turnstile>1 e2 :: ?T1; \<D> e2 (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>); \ e2 (length (E @ [Class Object])); length ST + max_stack e2 \<le> mxs; length (E @ [Class Object]) + max_vars e2 \<le> mxl; set (E @ [Class Object]) \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length ST) [::] ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2 @ [after (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2]
P,E \<turnstile>1 sync\<^bsub>i\<^esub> (e1) e2 :: T
\<D> (sync\<^bsub>i\<^esub> (e1) e2) A
\ (sync\<^bsub>i\<^esub> (e1) e2) (length E)
length ST + max_stack (sync\<^bsub>i\<^esub> (e1) e2) \<le> mxs
length E + max_vars (sync\<^bsub>i\<^esub> (e1) e2) \<le> mxl
set E \<subseteq> types P
P,E @ [Class Object] \<turnstile>1 e2 :: T
is_class P Object
\<D> e2 (A \<squnion> \ e1 \<squnion> \<lfloor>{length E}\<rfloor>)
[PROOF STEP]
have "\<turnstile> compE2 e2, compxE2 e2 0 (size ST) [::] ?\<tau>1'''#?\<tau>s2@[?\<tau>2]"
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>P,E @ [Class Object] \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>); \ e2 (length (E @ [Class Object])); length ST + max_stack e2 \<le> mxs; length (E @ [Class Object]) + max_vars e2 \<le> mxl; set (E @ [Class Object]) \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length ST) [::] ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2 @ [after (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2]
\<lbrakk>P,E \<turnstile>1 e1 :: ?T1; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]
\<lbrakk>P,E @ [Class Object] \<turnstile>1 e2 :: ?T1; \<D> e2 (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>); \ e2 (length (E @ [Class Object])); length ST + max_stack e2 \<le> mxs; length (E @ [Class Object]) + max_vars e2 \<le> mxl; set (E @ [Class Object]) \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length ST) [::] ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2 @ [after (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2]
P,E \<turnstile>1 sync\<^bsub>i\<^esub> (e1) e2 :: T
\<D> (sync\<^bsub>i\<^esub> (e1) e2) A
\ (sync\<^bsub>i\<^esub> (e1) e2) (length E)
length ST + max_stack (sync\<^bsub>i\<^esub> (e1) e2) \<le> mxs
length E + max_vars (sync\<^bsub>i\<^esub> (e1) e2) \<le> mxl
set E \<subseteq> types P
P,E @ [Class Object] \<turnstile>1 e2 :: T
is_class P Object
\<D> e2 (A \<squnion> \ e1 \<squnion> \<lfloor>{length E}\<rfloor>)

goal (1 subgoal):
 1. \<turnstile> compE2 e2, compxE2 e2 0 (length ST) [::] ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2 @ [ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2)]
[PROOF STEP]
by(auto simp add: after_def)
[PROOF STATE]
proof (state)
this:
\<turnstile> compE2 e2, compxE2 e2 0 (length ST) [::] ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2 @ [ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2)]

goal (25 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 25 subgoals...
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
\<lbrakk>5 = length [ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Object # Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (T # ST) E (A \<squnion> \ e1 \<squnion> \ e2)] + 1; 6 = length [ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Object # Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (T # ST) E (A \<squnion> \ e1 \<squnion> \ e2)] + 1; 7 = length [ty\<^sub>i' (Class Object # T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Object # Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (T # ST) E (A \<squnion> \ e1 \<squnion> \ e2)] + 1; length (compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2) + 1 = length (compE2 e2)\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2 @ [Load i, MExit, Goto 4, Load i, MExit, ThrowExc], compxE2 e2 0 (length ST) @ shift (length (compE2 e2)) (shift 1 (shift 1 (shift 1 []))) [::] ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2 @ [ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Object # T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Object # Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (T # ST) E (A \<squnion> \ e1 \<squnion> \ e2)]
[PROOF STEP]
have "\<turnstile> (compE2 e2 @ [Load i, MExit, Goto 4]) @ [Load i, MExit, ThrowExc], compxE2 e2 0 (size ST) [::]
             (?\<tau>1''' # ?\<tau>s2 @ [?\<tau>2, ?\<tau>2', ?\<tau>2'']) @ [?\<tau>3, ?\<tau>3', ?\<tau>3'', ?\<tau>']"
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>5 = length [ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Object # Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (T # ST) E (A \<squnion> \ e1 \<squnion> \ e2)] + 1; 6 = length [ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Object # Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (T # ST) E (A \<squnion> \ e1 \<squnion> \ e2)] + 1; 7 = length [ty\<^sub>i' (Class Object # T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Object # Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (T # ST) E (A \<squnion> \ e1 \<squnion> \ e2)] + 1; length (compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2) + 1 = length (compE2 e2)\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2 @ [Load i, MExit, Goto 4, Load i, MExit, ThrowExc], compxE2 e2 0 (length ST) @ shift (length (compE2 e2)) (shift 1 (shift 1 (shift 1 []))) [::] ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2 @ [ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Object # T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Object # Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (T # ST) E (A \<squnion> \ e1 \<squnion> \ e2)]

goal (1 subgoal):
 1. \<turnstile> (compE2 e2 @ [Load i, MExit, Goto 4]) @ [Load i, MExit, ThrowExc], compxE2 e2 0 (length ST) [::] (ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2 @ [ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Object # T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2)]) @ [ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Object # Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (T # ST) E (A \<squnion> \ e1 \<squnion> \ e2)]
[PROOF STEP]
by(simp)
[PROOF STATE]
proof (state)
this:
\<turnstile> (compE2 e2 @ [Load i, MExit, Goto 4]) @ [Load i, MExit, ThrowExc], compxE2 e2 0 (length ST) [::] (ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2 @ [ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Object # T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2)]) @ [ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Object # Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (T # ST) E (A \<squnion> \ e1 \<squnion> \ e2)]

goal (25 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 25 subgoals...
[PROOF STEP]
hence "\<turnstile> (compE2 e2 @ [Load i, MExit, Goto 4]) @ [Load i, MExit, ThrowExc],
           compxE2 e2 0 (size ST) @ [(0, size (compE2 e2 @ [Load i, MExit, Goto 4]) - Suc 2, None, size (compE2 e2 @ [Load i, MExit, Goto 4]), size ST)] [::]
           (?\<tau>1''' # ?\<tau>s2 @ [?\<tau>2, ?\<tau>2', ?\<tau>2'']) @ [?\<tau>3, ?\<tau>3', ?\<tau>3'', ?\<tau>']"
[PROOF STATE]
proof (prove)
using this:
\<turnstile> (compE2 e2 @ [Load i, MExit, Goto 4]) @ [Load i, MExit, ThrowExc], compxE2 e2 0 (length ST) [::] (ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2 @ [ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Object # T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2)]) @ [ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Object # Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (T # ST) E (A \<squnion> \ e1 \<squnion> \ e2)]

goal (1 subgoal):
 1. \<turnstile> (compE2 e2 @ [Load i, MExit, Goto 4]) @ [Load i, MExit, ThrowExc], compxE2 e2 0 (length ST) @ [(0, length (compE2 e2 @ [Load i, MExit, Goto 4]) - Suc 2, Any, length (compE2 e2 @ [Load i, MExit, Goto 4]), length ST)] [::] (ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2 @ [ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Object # T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2)]) @ [ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Object # Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (T # ST) E (A \<squnion> \ e1 \<squnion> \ e2)]
[PROOF STEP]
proof(rule wt_instrs_xapp_Any)
[PROOF STATE]
proof (state)
goal (3 subgoals):
 1. \<forall>\<tau>\<in>set (ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2 @ [ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Object # T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2)]). \<forall>ST' LT'. \<tau> = \<lfloor>(ST', LT')\<rfloor> \<longrightarrow> length ST \<le> length ST' \<and> P \<turnstile> \<lfloor>(drop (length ST' - length ST) ST', LT')\<rfloor> \<le>' ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>)
 2. length (compE2 e2 @ [Load i, MExit, Goto 4]) = length (ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2 @ [ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Object # T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2)])
 3. length ST < mxs
[PROOF STEP]
from lenST
[PROOF STATE]
proof (chain)
picking this:
length ST + max_stack (sync\<^bsub>i\<^esub> (e1) e2) \<le> mxs
[PROOF STEP]
show "length ST < mxs"
[PROOF STATE]
proof (prove)
using this:
length ST + max_stack (sync\<^bsub>i\<^esub> (e1) e2) \<le> mxs

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

goal (2 subgoals):
 1. \<forall>\<tau>\<in>set (ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2 @ [ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Object # T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2)]). \<forall>ST' LT'. \<tau> = \<lfloor>(ST', LT')\<rfloor> \<longrightarrow> length ST \<le> length ST' \<and> P \<turnstile> \<lfloor>(drop (length ST' - length ST) ST', LT')\<rfloor> \<le>' ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>)
 2. length (compE2 e2 @ [Load i, MExit, Goto 4]) = length (ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2 @ [ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Object # T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2)])
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<forall>\<tau>\<in>set (ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2 @ [ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Object # T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2)]). \<forall>ST' LT'. \<tau> = \<lfloor>(ST', LT')\<rfloor> \<longrightarrow> length ST \<le> length ST' \<and> P \<turnstile> \<lfloor>(drop (length ST' - length ST) ST', LT')\<rfloor> \<le>' ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>)
 2. length (compE2 e2 @ [Load i, MExit, Goto 4]) = length (ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2 @ [ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Object # T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2)])
[PROOF STEP]
show "\<forall>\<tau>\<in>set (?\<tau>1''' # ?\<tau>s2 @ [?\<tau>2, ?\<tau>2', ?\<tau>2'']). \<forall>ST' LT'.
          \<tau> = \<lfloor>(ST', LT')\<rfloor> \<longrightarrow> length ST \<le> length ST' \<and>
          P \<turnstile> \<lfloor>(drop (length ST' - length ST) ST',  LT')\<rfloor> \<le>' ty\<^sub>i' ST (E @ [Class Object]) ?A2"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. \<forall>\<tau>\<in>set (ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2 @ [ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Object # T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2)]). \<forall>ST' LT'. \<tau> = \<lfloor>(ST', LT')\<rfloor> \<longrightarrow> length ST \<le> length ST' \<and> P \<turnstile> \<lfloor>(drop (length ST' - length ST) ST', LT')\<rfloor> \<le>' ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>)
[PROOF STEP]
proof(intro strip)
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>\<tau> ST' LT'. \<lbrakk>\<tau> \<in> set (ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2 @ [ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Object # T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2)]); \<tau> = \<lfloor>(ST', LT')\<rfloor>\<rbrakk> \<Longrightarrow> length ST \<le> length ST' \<and> P \<turnstile> \<lfloor>(drop (length ST' - length ST) ST', LT')\<rfloor> \<le>' ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>)
[PROOF STEP]
fix \<tau> ST' LT'
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<And>\<tau> ST' LT'. \<lbrakk>\<tau> \<in> set (ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2 @ [ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Object # T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2)]); \<tau> = \<lfloor>(ST', LT')\<rfloor>\<rbrakk> \<Longrightarrow> length ST \<le> length ST' \<and> P \<turnstile> \<lfloor>(drop (length ST' - length ST) ST', LT')\<rfloor> \<le>' ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>)
[PROOF STEP]
assume "\<tau>\<in>set (?\<tau>1''' # ?\<tau>s2 @ [?\<tau>2, ?\<tau>2', ?\<tau>2''])" "\<tau> = \<lfloor>(ST', LT')\<rfloor>"
[PROOF STATE]
proof (state)
this:
\<tau> \<in> set (ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2 @ [ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Object # T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2)])
\<tau> = \<lfloor>(ST', LT')\<rfloor>

goal (1 subgoal):
 1. \<And>\<tau> ST' LT'. \<lbrakk>\<tau> \<in> set (ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2 @ [ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Object # T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2)]); \<tau> = \<lfloor>(ST', LT')\<rfloor>\<rbrakk> \<Longrightarrow> length ST \<le> length ST' \<and> P \<turnstile> \<lfloor>(drop (length ST' - length ST) ST', LT')\<rfloor> \<le>' ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>)
[PROOF STEP]
hence \<tau>: "\<lfloor>(ST', LT')\<rfloor> \<in> set (?\<tau>1''' # ?\<tau>s2 @ [?\<tau>2, ?\<tau>2', ?\<tau>2''])"
[PROOF STATE]
proof (prove)
using this:
\<tau> \<in> set (ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2 @ [ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Object # T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2)])
\<tau> = \<lfloor>(ST', LT')\<rfloor>

goal (1 subgoal):
 1. \<lfloor>(ST', LT')\<rfloor> \<in> set (ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2 @ [ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Object # T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2)])
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
\<lfloor>(ST', LT')\<rfloor> \<in> set (ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2 @ [ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Object # T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2)])

goal (1 subgoal):
 1. \<And>\<tau> ST' LT'. \<lbrakk>\<tau> \<in> set (ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2 @ [ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Object # T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2)]); \<tau> = \<lfloor>(ST', LT')\<rfloor>\<rbrakk> \<Longrightarrow> length ST \<le> length ST' \<and> P \<turnstile> \<lfloor>(drop (length ST' - length ST) ST', LT')\<rfloor> \<le>' ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>)
[PROOF STEP]
show "length ST \<le> length ST' \<and> P \<turnstile> \<lfloor>(drop (length ST' - length ST) ST',  LT')\<rfloor> \<le>' ty\<^sub>i' ST (E @ [Class Object]) ?A2"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. length ST \<le> length ST' \<and> P \<turnstile> \<lfloor>(drop (length ST' - length ST) ST', LT')\<rfloor> \<le>' ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>)
[PROOF STEP]
proof(cases "\<lfloor>(ST', LT')\<rfloor> \<in> set ?\<tau>s2")
[PROOF STATE]
proof (state)
goal (2 subgoals):
 1. \<lfloor>(ST', LT')\<rfloor> \<in> set (compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2) \<Longrightarrow> length ST \<le> length ST' \<and> P \<turnstile> \<lfloor>(drop (length ST' - length ST) ST', LT')\<rfloor> \<le>' ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>)
 2. \<lfloor>(ST', LT')\<rfloor> \<notin> set (compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2) \<Longrightarrow> length ST \<le> length ST' \<and> P \<turnstile> \<lfloor>(drop (length ST' - length ST) ST', LT')\<rfloor> \<le>' ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>)
[PROOF STEP]
case True
[PROOF STATE]
proof (state)
this:
\<lfloor>(ST', LT')\<rfloor> \<in> set (compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2)

goal (2 subgoals):
 1. \<lfloor>(ST', LT')\<rfloor> \<in> set (compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2) \<Longrightarrow> length ST \<le> length ST' \<and> P \<turnstile> \<lfloor>(drop (length ST' - length ST) ST', LT')\<rfloor> \<le>' ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>)
 2. \<lfloor>(ST', LT')\<rfloor> \<notin> set (compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2) \<Longrightarrow> length ST \<le> length ST' \<and> P \<turnstile> \<lfloor>(drop (length ST' - length ST) ST', LT')\<rfloor> \<le>' ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>)
[PROOF STEP]
from compT_ST_prefix[OF suffix_order.order_refl this] compT_LT_prefix[OF this B2]
[PROOF STATE]
proof (chain)
picking this:
ST' \<bind> ST
P \<turnstile> \<lfloor>(ST', LT')\<rfloor> \<le>' ty\<^sub>i' ST' (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>)
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
ST' \<bind> ST
P \<turnstile> \<lfloor>(ST', LT')\<rfloor> \<le>' ty\<^sub>i' ST' (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>)

goal (1 subgoal):
 1. length ST \<le> length ST' \<and> P \<turnstile> \<lfloor>(drop (length ST' - length ST) ST', LT')\<rfloor> \<le>' ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>)
[PROOF STEP]
unfolding postfix_conv_eq_length_drop
[PROOF STATE]
proof (prove)
using this:
length ST \<le> length ST' \<and> drop (length ST' - length ST) ST' = ST
P \<turnstile> \<lfloor>(ST', LT')\<rfloor> \<le>' ty\<^sub>i' ST' (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>)

goal (1 subgoal):
 1. length ST \<le> length ST' \<and> P \<turnstile> \<lfloor>(drop (length ST' - length ST) ST', LT')\<rfloor> \<le>' ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>)
[PROOF STEP]
by(simp add: ty\<^sub>i'_def)
[PROOF STATE]
proof (state)
this:
length ST \<le> length ST' \<and> P \<turnstile> \<lfloor>(drop (length ST' - length ST) ST', LT')\<rfloor> \<le>' ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>)

goal (1 subgoal):
 1. \<lfloor>(ST', LT')\<rfloor> \<notin> set (compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2) \<Longrightarrow> length ST \<le> length ST' \<and> P \<turnstile> \<lfloor>(drop (length ST' - length ST) ST', LT')\<rfloor> \<le>' ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>)
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (1 subgoal):
 1. \<lfloor>(ST', LT')\<rfloor> \<notin> set (compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2) \<Longrightarrow> length ST \<le> length ST' \<and> P \<turnstile> \<lfloor>(drop (length ST' - length ST) ST', LT')\<rfloor> \<le>' ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>)
[PROOF STEP]
case False
[PROOF STATE]
proof (state)
this:
\<lfloor>(ST', LT')\<rfloor> \<notin> set (compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2)

goal (1 subgoal):
 1. \<lfloor>(ST', LT')\<rfloor> \<notin> set (compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2) \<Longrightarrow> length ST \<le> length ST' \<and> P \<turnstile> \<lfloor>(drop (length ST' - length ST) ST', LT')\<rfloor> \<le>' ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>)
[PROOF STEP]
with \<tau>
[PROOF STATE]
proof (chain)
picking this:
\<lfloor>(ST', LT')\<rfloor> \<in> set (ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2 @ [ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Object # T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2)])
\<lfloor>(ST', LT')\<rfloor> \<notin> set (compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2)
[PROOF STEP]
show ?thesis
[PROOF STATE]
proof (prove)
using this:
\<lfloor>(ST', LT')\<rfloor> \<in> set (ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2 @ [ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Object # T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2)])
\<lfloor>(ST', LT')\<rfloor> \<notin> set (compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2)

goal (1 subgoal):
 1. length ST \<le> length ST' \<and> P \<turnstile> \<lfloor>(drop (length ST' - length ST) ST', LT')\<rfloor> \<le>' ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>)
[PROOF STEP]
by(auto simp add: ty\<^sub>i'_def hyperset_defs intro: ty\<^sub>l_antimono)
[PROOF STATE]
proof (state)
this:
length ST \<le> length ST' \<and> P \<turnstile> \<lfloor>(drop (length ST' - length ST) ST', LT')\<rfloor> \<le>' ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
length ST \<le> length ST' \<and> P \<turnstile> \<lfloor>(drop (length ST' - length ST) ST', LT')\<rfloor> \<le>' ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>)

goal:
No subgoals!
[PROOF STEP]
qed
[PROOF STATE]
proof (state)
this:
\<forall>\<tau>\<in>set (ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2 @ [ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Object # T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2)]). \<forall>ST' LT'. \<tau> = \<lfloor>(ST', LT')\<rfloor> \<longrightarrow> length ST \<le> length ST' \<and> P \<turnstile> \<lfloor>(drop (length ST' - length ST) ST', LT')\<rfloor> \<le>' ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>)

goal (1 subgoal):
 1. length (compE2 e2 @ [Load i, MExit, Goto 4]) = length (ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2 @ [ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Object # T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2)])
[PROOF STEP]
qed simp
[PROOF STATE]
proof (state)
this:
\<turnstile> (compE2 e2 @ [Load i, MExit, Goto 4]) @ [Load i, MExit, ThrowExc], compxE2 e2 0 (length ST) @ [(0, length (compE2 e2 @ [Load i, MExit, Goto 4]) - Suc 2, Any, length (compE2 e2 @ [Load i, MExit, Goto 4]), length ST)] [::] (ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2 @ [ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Object # T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2)]) @ [ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Object # Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (T # ST) E (A \<squnion> \ e1 \<squnion> \ e2)]

goal (25 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 25 subgoals...
[PROOF STEP]
hence "\<turnstile> compE2 e2 @ [Load i, MExit, Goto 4, Load i, MExit, ThrowExc],
           compxE2 e2 0 (size ST) @ [(0, size (compE2 e2), None, Suc (Suc (Suc (size (compE2 e2)))), size ST)] [::]
           ?\<tau>1''' # ?\<tau>s2 @ [?\<tau>2, ?\<tau>2', ?\<tau>2'', ?\<tau>3, ?\<tau>3', ?\<tau>3'', ?\<tau>']"
[PROOF STATE]
proof (prove)
using this:
\<turnstile> (compE2 e2 @ [Load i, MExit, Goto 4]) @ [Load i, MExit, ThrowExc], compxE2 e2 0 (length ST) @ [(0, length (compE2 e2 @ [Load i, MExit, Goto 4]) - Suc 2, Any, length (compE2 e2 @ [Load i, MExit, Goto 4]), length ST)] [::] (ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2 @ [ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Object # T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2)]) @ [ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Object # Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (T # ST) E (A \<squnion> \ e1 \<squnion> \ e2)]

goal (1 subgoal):
 1. \<turnstile> compE2 e2 @ [Load i, MExit, Goto 4, Load i, MExit, ThrowExc], compxE2 e2 0 (length ST) @ [(0, length (compE2 e2), Any, Suc (Suc (Suc (length (compE2 e2)))), length ST)] [::] ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2 @ [ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Object # T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Object # Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (T # ST) E (A \<squnion> \ e1 \<squnion> \ e2)]
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
\<turnstile> compE2 e2 @ [Load i, MExit, Goto 4, Load i, MExit, ThrowExc], compxE2 e2 0 (length ST) @ [(0, length (compE2 e2), Any, Suc (Suc (Suc (length (compE2 e2)))), length ST)] [::] ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2 @ [ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Object # T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Object # Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (T # ST) E (A \<squnion> \ e1 \<squnion> \ e2)]

goal (25 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 25 subgoals...
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
\<turnstile> compE2 e2 @ [Load i, MExit, Goto 4, Load i, MExit, ThrowExc], compxE2 e2 0 (length ST) @ [(0, length (compE2 e2), Any, Suc (Suc (Suc (length (compE2 e2)))), length ST)] [::] ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2 @ [ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Object # T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Object # Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (T # ST) E (A \<squnion> \ e1 \<squnion> \ e2)]

goal (25 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 25 subgoals...
[PROOF STEP]
from wt1 \<open>set E \<subseteq> types P\<close>
[PROOF STATE]
proof (chain)
picking this:
P,E \<turnstile>1 e1 :: U
set E \<subseteq> types P
[PROOF STEP]
have "is_type P U"
[PROOF STATE]
proof (prove)
using this:
P,E \<turnstile>1 e1 :: U
set E \<subseteq> types P

goal (1 subgoal):
 1. is_type P U
[PROOF STEP]
by(rule WT1_is_type[OF wf_prog])
[PROOF STATE]
proof (state)
this:
is_type P U

goal (25 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 25 subgoals...
[PROOF STEP]
with U
[PROOF STATE]
proof (chain)
picking this:
is_refT U
U \<noteq> NT
is_type P U
[PROOF STEP]
have "P \<turnstile> U \<le> Class Object"
[PROOF STATE]
proof (prove)
using this:
is_refT U
U \<noteq> NT
is_type P U

goal (1 subgoal):
 1. P \<turnstile> U \<le> Class Object
[PROOF STEP]
by(auto elim!: is_refT.cases intro: subcls_C_Object[OF _ wf_prog] widen_array_object)
[PROOF STATE]
proof (state)
this:
P \<turnstile> U \<le> Class Object

goal (25 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 25 subgoals...
[PROOF STEP]
with lenE lenST max_stack1[of e2]
[PROOF STATE]
proof (chain)
picking this:
length E + max_vars (sync\<^bsub>i\<^esub> (e1) e2) \<le> mxl
length ST + max_stack (sync\<^bsub>i\<^esub> (e1) e2) \<le> mxs
1 \<le> max_stack e2
P \<turnstile> U \<le> Class Object
[PROOF STEP]
have "\<turnstile> [Dup, Store i, MEnter], [] [::] [?\<tau>1, ?\<tau>1', ?\<tau>1''] @ [?\<tau>1''']"
[PROOF STATE]
proof (prove)
using this:
length E + max_vars (sync\<^bsub>i\<^esub> (e1) e2) \<le> mxl
length ST + max_stack (sync\<^bsub>i\<^esub> (e1) e2) \<le> mxs
1 \<le> max_stack e2
P \<turnstile> U \<le> Class Object

goal (1 subgoal):
 1. \<turnstile> [Dup, Store i, MEnter], [] [::] [ty\<^sub>i' (U # ST) E (A \<squnion> \ e1), ty\<^sub>i' (Class Object # Class Object # ST) E (A \<squnion> \ e1), ty\<^sub>i' (Class Object # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>)] @ [ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>)]
[PROOF STEP]
by(auto simp add: ty\<^sub>i'_def ty\<^sub>l_def wt_defs hyperset_defs nth_Cons nth_list_update list_all2_conv_all_nth split: nat.split)
[PROOF STATE]
proof (state)
this:
\<turnstile> [Dup, Store i, MEnter], [] [::] [ty\<^sub>i' (U # ST) E (A \<squnion> \ e1), ty\<^sub>i' (Class Object # Class Object # ST) E (A \<squnion> \ e1), ty\<^sub>i' (Class Object # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>)] @ [ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>)]

goal (25 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 25 subgoals...
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
\<lbrakk>last ([ty\<^sub>i' (U # ST) E (A \<squnion> \ e1), ty\<^sub>i' (Class Object # Class Object # ST) E (A \<squnion> \ e1), ty\<^sub>i' (Class Object # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>)] @ [ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>)]) = ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>); length ([ty\<^sub>i' (U # ST) E (A \<squnion> \ e1), ty\<^sub>i' (Class Object # Class Object # ST) E (A \<squnion> \ e1), ty\<^sub>i' (Class Object # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>)] @ [ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>)]) = length [Dup, Store i, MEnter] + 1\<rbrakk> \<Longrightarrow> \<turnstile> [Dup, Store i, MEnter] @ compE2 e2 @ [Load i, MExit, Goto 4, Load i, MExit, ThrowExc], [] @ shift (length [Dup, Store i, MEnter]) (compxE2 e2 0 (length ST) @ [(0, length (compE2 e2), Any, Suc (Suc (Suc (length (compE2 e2)))), length ST)]) [::] ([ty\<^sub>i' (U # ST) E (A \<squnion> \ e1), ty\<^sub>i' (Class Object # Class Object # ST) E (A \<squnion> \ e1), ty\<^sub>i' (Class Object # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>)] @ [ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>)]) @ compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2 @ [ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Object # T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Object # Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (T # ST) E (A \<squnion> \ e1 \<squnion> \ e2)]
[PROOF STEP]
have "\<turnstile> Dup # Store i # MEnter # compE2 e2 @ [Load i, MExit, Goto 4, Load i, MExit, ThrowExc],
               compxE2 e2 3 (size ST) @ [(3, 3 + size (compE2 e2), None, 6 + size (compE2 e2), size ST)]
            [::] ?\<tau>1 # ?\<tau>1' # ?\<tau>1'' # ?\<tau>1''' # ?\<tau>s2 @ [?\<tau>2, ?\<tau>2', ?\<tau>2'', ?\<tau>3, ?\<tau>3', ?\<tau>3'', ?\<tau>']"
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>last ([ty\<^sub>i' (U # ST) E (A \<squnion> \ e1), ty\<^sub>i' (Class Object # Class Object # ST) E (A \<squnion> \ e1), ty\<^sub>i' (Class Object # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>)] @ [ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>)]) = ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>); length ([ty\<^sub>i' (U # ST) E (A \<squnion> \ e1), ty\<^sub>i' (Class Object # Class Object # ST) E (A \<squnion> \ e1), ty\<^sub>i' (Class Object # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>)] @ [ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>)]) = length [Dup, Store i, MEnter] + 1\<rbrakk> \<Longrightarrow> \<turnstile> [Dup, Store i, MEnter] @ compE2 e2 @ [Load i, MExit, Goto 4, Load i, MExit, ThrowExc], [] @ shift (length [Dup, Store i, MEnter]) (compxE2 e2 0 (length ST) @ [(0, length (compE2 e2), Any, Suc (Suc (Suc (length (compE2 e2)))), length ST)]) [::] ([ty\<^sub>i' (U # ST) E (A \<squnion> \ e1), ty\<^sub>i' (Class Object # Class Object # ST) E (A \<squnion> \ e1), ty\<^sub>i' (Class Object # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>)] @ [ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>)]) @ compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2 @ [ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Object # T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Object # Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (T # ST) E (A \<squnion> \ e1 \<squnion> \ e2)]

goal (1 subgoal):
 1. \<turnstile> Dup # Store i # MEnter # compE2 e2 @ [Load i, MExit, Goto 4, Load i, MExit, ThrowExc], compxE2 e2 3 (length ST) @ [(3, 3 + length (compE2 e2), Any, 6 + length (compE2 e2), length ST)] [::] ty\<^sub>i' (U # ST) E (A \<squnion> \ e1) # ty\<^sub>i' (Class Object # Class Object # ST) E (A \<squnion> \ e1) # ty\<^sub>i' (Class Object # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) # ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2 @ [ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Object # T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Object # Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (T # ST) E (A \<squnion> \ e1 \<squnion> \ e2)]
[PROOF STEP]
by(simp add: eval_nat_numeral shift_def)
[PROOF STATE]
proof (state)
this:
\<turnstile> Dup # Store i # MEnter # compE2 e2 @ [Load i, MExit, Goto 4, Load i, MExit, ThrowExc], compxE2 e2 3 (length ST) @ [(3, 3 + length (compE2 e2), Any, 6 + length (compE2 e2), length ST)] [::] ty\<^sub>i' (U # ST) E (A \<squnion> \ e1) # ty\<^sub>i' (Class Object # Class Object # ST) E (A \<squnion> \ e1) # ty\<^sub>i' (Class Object # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) # ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2 @ [ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Object # T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Object # Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (T # ST) E (A \<squnion> \ e1 \<squnion> \ e2)]

goal (25 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 25 subgoals...
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
\<turnstile> Dup # Store i # MEnter # compE2 e2 @ [Load i, MExit, Goto 4, Load i, MExit, ThrowExc], compxE2 e2 3 (length ST) @ [(3, 3 + length (compE2 e2), Any, 6 + length (compE2 e2), length ST)] [::] ty\<^sub>i' (U # ST) E (A \<squnion> \ e1) # ty\<^sub>i' (Class Object # Class Object # ST) E (A \<squnion> \ e1) # ty\<^sub>i' (Class Object # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) # ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2 @ [ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Object # T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Object # Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (T # ST) E (A \<squnion> \ e1 \<squnion> \ e2)]

goal (25 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 25 subgoals...
[PROOF STEP]
from \<open>PROP ?P e1 E U A ST\<close> wt1 B1 \<open>\<D> (sync\<^bsub>i\<^esub> (e1) e2) A\<close> lenE lenST \<open>set E \<subseteq> types P\<close>
[PROOF STATE]
proof (chain)
picking this:
\<lbrakk>P,E \<turnstile>1 e1 :: U; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]
P,E \<turnstile>1 e1 :: U
\ e1 (length E)
\<D> (sync\<^bsub>i\<^esub> (e1) e2) A
length E + max_vars (sync\<^bsub>i\<^esub> (e1) e2) \<le> mxl
length ST + max_stack (sync\<^bsub>i\<^esub> (e1) e2) \<le> mxs
set E \<subseteq> types P
[PROOF STEP]
have "\<turnstile> compE2 e1, compxE2 e1 0 (size ST) [::] ?\<tau>#?\<tau>s1@[?\<tau>1]"
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>P,E \<turnstile>1 e1 :: U; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]
P,E \<turnstile>1 e1 :: U
\ e1 (length E)
\<D> (sync\<^bsub>i\<^esub> (e1) e2) A
length E + max_vars (sync\<^bsub>i\<^esub> (e1) e2) \<le> mxl
length ST + max_stack (sync\<^bsub>i\<^esub> (e1) e2) \<le> mxs
set E \<subseteq> types P

goal (1 subgoal):
 1. \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [ty\<^sub>i' (U # ST) E (A \<squnion> \ e1)]
[PROOF STEP]
by(auto simp add: after_def)
[PROOF STATE]
proof (state)
this:
\<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [ty\<^sub>i' (U # ST) E (A \<squnion> \ e1)]

goal (25 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 25 subgoals...
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
length (compT E A ST e1) + 1 = length (compE2 e1) \<Longrightarrow> \<turnstile> compE2 e1 @ Dup # Store i # MEnter # compE2 e2 @ [Load i, MExit, Goto 4, Load i, MExit, ThrowExc], compxE2 e1 0 (length ST) @ shift (length (compE2 e1)) (compxE2 e2 3 (length ST) @ [(3, 3 + length (compE2 e2), Any, 6 + length (compE2 e2), length ST)]) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ ty\<^sub>i' (U # ST) E (A \<squnion> \ e1) # ty\<^sub>i' (Class Object # Class Object # ST) E (A \<squnion> \ e1) # ty\<^sub>i' (Class Object # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) # ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2 @ [ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Object # T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Object # Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (T # ST) E (A \<squnion> \ e1 \<squnion> \ e2)]
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
length (compT E A ST e1) + 1 = length (compE2 e1) \<Longrightarrow> \<turnstile> compE2 e1 @ Dup # Store i # MEnter # compE2 e2 @ [Load i, MExit, Goto 4, Load i, MExit, ThrowExc], compxE2 e1 0 (length ST) @ shift (length (compE2 e1)) (compxE2 e2 3 (length ST) @ [(3, 3 + length (compE2 e2), Any, 6 + length (compE2 e2), length ST)]) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ ty\<^sub>i' (U # ST) E (A \<squnion> \ e1) # ty\<^sub>i' (Class Object # Class Object # ST) E (A \<squnion> \ e1) # ty\<^sub>i' (Class Object # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) # ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2 @ [ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Object # T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Object # Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (T # ST) E (A \<squnion> \ e1 \<squnion> \ e2)]

goal (1 subgoal):
 1. \<turnstile> compE2 (sync\<^bsub>i\<^esub> (e1) e2), compxE2 (sync\<^bsub>i\<^esub> (e1) e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (sync\<^bsub>i\<^esub> (e1) e2) @ [after E A ST (sync\<^bsub>i\<^esub> (e1) e2)]
[PROOF STEP]
using wt1 wt2 wt
[PROOF STATE]
proof (prove)
using this:
length (compT E A ST e1) + 1 = length (compE2 e1) \<Longrightarrow> \<turnstile> compE2 e1 @ Dup # Store i # MEnter # compE2 e2 @ [Load i, MExit, Goto 4, Load i, MExit, ThrowExc], compxE2 e1 0 (length ST) @ shift (length (compE2 e1)) (compxE2 e2 3 (length ST) @ [(3, 3 + length (compE2 e2), Any, 6 + length (compE2 e2), length ST)]) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ ty\<^sub>i' (U # ST) E (A \<squnion> \ e1) # ty\<^sub>i' (Class Object # Class Object # ST) E (A \<squnion> \ e1) # ty\<^sub>i' (Class Object # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) # ty\<^sub>i' ST (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>) ST e2 @ [ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Object # T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (T # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor> \<squnion> \ e2), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Object # Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (Class Throwable # ST) (E @ [Class Object]) (A \<squnion> \ e1 \<squnion> \<lfloor>{i}\<rfloor>), ty\<^sub>i' (T # ST) E (A \<squnion> \ e1 \<squnion> \ e2)]
P,E \<turnstile>1 e1 :: U
P,E @ [Class Object] \<turnstile>1 e2 :: T
P,E \<turnstile>1 sync\<^bsub>i\<^esub> (e1) e2 :: T

goal (1 subgoal):
 1. \<turnstile> compE2 (sync\<^bsub>i\<^esub> (e1) e2), compxE2 (sync\<^bsub>i\<^esub> (e1) e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (sync\<^bsub>i\<^esub> (e1) e2) @ [after E A ST (sync\<^bsub>i\<^esub> (e1) e2)]
[PROOF STEP]
by(simp add: after_def ac_simps shift_Cons_tuple hyperUn_assoc)
[PROOF STATE]
proof (state)
this:
\<turnstile> compE2 (sync\<^bsub>i\<^esub> (e1) e2), compxE2 (sync\<^bsub>i\<^esub> (e1) e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (sync\<^bsub>i\<^esub> (e1) e2) @ [after E A ST (sync\<^bsub>i\<^esub> (e1) e2)]

goal (24 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 24 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (24 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 24 subgoals...
[PROOF STEP]
case new
[PROOF STATE]
proof (state)
this:
P,E_ \<turnstile>1 new C_ :: T
\<D> (new C_) A_
\ (new C_) (length E_)
length ST_ + max_stack (new C_) \<le> mxs
length E_ + max_vars (new C_) \<le> mxl
set E_ \<subseteq> types P

goal (24 subgoals):
 1. \<And>E A ST C T. \<lbrakk>P,E \<turnstile>1 new C :: T; \<D> (new C) A; \ (new C) (length E); length ST + max_stack (new C) \<le> mxs; length E + max_vars (new C) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (new C), compxE2 (new C) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (new C) @ [after E A ST (new C)]
 2. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 3. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 4. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 5. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 6. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 7. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 8. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 9. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 10. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
A total of 24 subgoals...
[PROOF STEP]
thus ?case
[PROOF STATE]
proof (prove)
using this:
P,E_ \<turnstile>1 new C_ :: T
\<D> (new C_) A_
\ (new C_) (length E_)
length ST_ + max_stack (new C_) \<le> mxs
length E_ + max_vars (new C_) \<le> mxl
set E_ \<subseteq> types P

goal (1 subgoal):
 1. \<turnstile> compE2 (new C_), compxE2 (new C_) 0 (length ST_) [::] ty\<^sub>i' ST_ E_ A_ # compT E_ A_ ST_ (new C_) @ [after E_ A_ ST_ (new C_)]
[PROOF STEP]
by(auto simp add:after_def wt_New)
[PROOF STATE]
proof (state)
this:
\<turnstile> compE2 (new C_), compxE2 (new C_) 0 (length ST_) [::] ty\<^sub>i' ST_ E_ A_ # compT E_ A_ ST_ (new C_) @ [after E_ A_ ST_ (new C_)]

goal (23 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 6. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 7. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 8. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 9. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 10. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
A total of 23 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (23 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 6. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 7. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 8. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 9. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 10. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
A total of 23 subgoals...
[PROOF STEP]
case (BinOp E A ST e\<^sub>1 bop e\<^sub>2)
[PROOF STATE]
proof (state)
this:
\<lbrakk>P,E \<turnstile>1 e\<^sub>1 :: ?T1; \<D> e\<^sub>1 A; \ e\<^sub>1 (length E); length ST + max_stack e\<^sub>1 \<le> mxs; length E + max_vars e\<^sub>1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e\<^sub>1, compxE2 e\<^sub>1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e\<^sub>1 @ [after E A ST e\<^sub>1]
\<lbrakk>P,E \<turnstile>1 e\<^sub>2 :: ?T1; \<D> e\<^sub>2 (A \<squnion> \ e\<^sub>1); \ e\<^sub>2 (length E); length (ty E e\<^sub>1 # ST) + max_stack e\<^sub>2 \<le> mxs; length E + max_vars e\<^sub>2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e\<^sub>2, compxE2 e\<^sub>2 0 (length (ty E e\<^sub>1 # ST)) [::] ty\<^sub>i' (ty E e\<^sub>1 # ST) E (A \<squnion> \ e\<^sub>1) # compT E (A \<squnion> \ e\<^sub>1) (ty E e\<^sub>1 # ST) e\<^sub>2 @ [after E (A \<squnion> \ e\<^sub>1) (ty E e\<^sub>1 # ST) e\<^sub>2]
P,E \<turnstile>1 e\<^sub>1 \<guillemotleft>bop\<guillemotright> e\<^sub>2 :: T
\<D> (e\<^sub>1 \<guillemotleft>bop\<guillemotright> e\<^sub>2) A
\ (e\<^sub>1 \<guillemotleft>bop\<guillemotright> e\<^sub>2) (length E)
length ST + max_stack (e\<^sub>1 \<guillemotleft>bop\<guillemotright> e\<^sub>2) \<le> mxs
length E + max_vars (e\<^sub>1 \<guillemotleft>bop\<guillemotright> e\<^sub>2) \<le> mxl
set E \<subseteq> types P

goal (23 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 6. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 7. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 8. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 9. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 10. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
A total of 23 subgoals...
[PROOF STEP]
have T: "P,E \<turnstile>1 e\<^sub>1 \<guillemotleft>bop\<guillemotright> e\<^sub>2 :: T"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. P,E \<turnstile>1 e\<^sub>1 \<guillemotleft>bop\<guillemotright> e\<^sub>2 :: T
[PROOF STEP]
by fact
[PROOF STATE]
proof (state)
this:
P,E \<turnstile>1 e\<^sub>1 \<guillemotleft>bop\<guillemotright> e\<^sub>2 :: T

goal (23 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 6. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 7. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 8. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 9. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 10. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
A total of 23 subgoals...
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
P,E \<turnstile>1 e\<^sub>1 \<guillemotleft>bop\<guillemotright> e\<^sub>2 :: T
[PROOF STEP]
obtain T\<^sub>1 T\<^sub>2 where T\<^sub>1: "P,E \<turnstile>1 e\<^sub>1 :: T\<^sub>1" and T\<^sub>2: "P,E \<turnstile>1 e\<^sub>2 :: T\<^sub>2" and
    bopT: "P \<turnstile> T\<^sub>1\<guillemotleft>bop\<guillemotright>T\<^sub>2 :: T"
[PROOF STATE]
proof (prove)
using this:
P,E \<turnstile>1 e\<^sub>1 \<guillemotleft>bop\<guillemotright> e\<^sub>2 :: T

goal (1 subgoal):
 1. (\<And>T\<^sub>1 T\<^sub>2. \<lbrakk>P,E \<turnstile>1 e\<^sub>1 :: T\<^sub>1; P,E \<turnstile>1 e\<^sub>2 :: T\<^sub>2; P \<turnstile> T\<^sub>1\<guillemotleft>bop\<guillemotright>T\<^sub>2 :: T\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
P,E \<turnstile>1 e\<^sub>1 :: T\<^sub>1
P,E \<turnstile>1 e\<^sub>2 :: T\<^sub>2
P \<turnstile> T\<^sub>1\<guillemotleft>bop\<guillemotright>T\<^sub>2 :: T

goal (23 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 6. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 7. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 8. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 9. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 10. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
A total of 23 subgoals...
[PROOF STEP]
let ?A\<^sub>1 = "A \<squnion> \ e\<^sub>1"
[PROOF STATE]
proof (state)
goal (23 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 6. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 7. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 8. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 9. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 10. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
A total of 23 subgoals...
[PROOF STEP]
let ?A\<^sub>2 = "?A\<^sub>1 \<squnion> \ e\<^sub>2"
[PROOF STATE]
proof (state)
goal (23 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 6. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 7. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 8. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 9. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 10. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
A total of 23 subgoals...
[PROOF STEP]
let ?\<tau> = "ty\<^sub>i' ST E A"
[PROOF STATE]
proof (state)
goal (23 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 6. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 7. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 8. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 9. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 10. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
A total of 23 subgoals...
[PROOF STEP]
let ?\<tau>s\<^sub>1 = "compT E A ST e\<^sub>1"
[PROOF STATE]
proof (state)
goal (23 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 6. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 7. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 8. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 9. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 10. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
A total of 23 subgoals...
[PROOF STEP]
let ?\<tau>\<^sub>1 = "ty\<^sub>i' (T\<^sub>1#ST) E ?A\<^sub>1"
[PROOF STATE]
proof (state)
goal (23 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 6. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 7. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 8. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 9. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 10. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
A total of 23 subgoals...
[PROOF STEP]
let ?\<tau>s\<^sub>2 = "compT E ?A\<^sub>1 (T\<^sub>1#ST) e\<^sub>2"
[PROOF STATE]
proof (state)
goal (23 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 6. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 7. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 8. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 9. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 10. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
A total of 23 subgoals...
[PROOF STEP]
let ?\<tau>\<^sub>2 = "ty\<^sub>i' (T\<^sub>2#T\<^sub>1#ST) E ?A\<^sub>2"
[PROOF STATE]
proof (state)
goal (23 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 6. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 7. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 8. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 9. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 10. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
A total of 23 subgoals...
[PROOF STEP]
let ?\<tau>' = "ty\<^sub>i' (T#ST) E ?A\<^sub>2"
[PROOF STATE]
proof (state)
goal (23 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 6. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 7. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 8. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 9. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 10. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
A total of 23 subgoals...
[PROOF STEP]
from bopT
[PROOF STATE]
proof (chain)
picking this:
P \<turnstile> T\<^sub>1\<guillemotleft>bop\<guillemotright>T\<^sub>2 :: T
[PROOF STEP]
have "\<turnstile> [BinOpInstr bop],[] [::] [?\<tau>\<^sub>2,?\<tau>']"
[PROOF STATE]
proof (prove)
using this:
P \<turnstile> T\<^sub>1\<guillemotleft>bop\<guillemotright>T\<^sub>2 :: T

goal (1 subgoal):
 1. \<turnstile> [BinOpInstr bop], [] [::] [ty\<^sub>i' (T\<^sub>2 # T\<^sub>1 # ST) E (A \<squnion> \ e\<^sub>1 \<squnion> \ e\<^sub>2), ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1 \<squnion> \ e\<^sub>2)]
[PROOF STEP]
by(rule wt_BinOpInstr)
[PROOF STATE]
proof (state)
this:
\<turnstile> [BinOpInstr bop], [] [::] [ty\<^sub>i' (T\<^sub>2 # T\<^sub>1 # ST) E (A \<squnion> \ e\<^sub>1 \<squnion> \ e\<^sub>2), ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1 \<squnion> \ e\<^sub>2)]

goal (23 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 6. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 7. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 8. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 9. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 10. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
A total of 23 subgoals...
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
\<turnstile> [BinOpInstr bop], [] [::] [ty\<^sub>i' (T\<^sub>2 # T\<^sub>1 # ST) E (A \<squnion> \ e\<^sub>1 \<squnion> \ e\<^sub>2), ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1 \<squnion> \ e\<^sub>2)]

goal (23 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 6. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 7. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 8. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 9. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 10. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
A total of 23 subgoals...
[PROOF STEP]
from BinOp.hyps(2)[of T\<^sub>2] BinOp.prems T\<^sub>2 T\<^sub>1
[PROOF STATE]
proof (chain)
picking this:
\<lbrakk>P,E \<turnstile>1 e\<^sub>2 :: T\<^sub>2; \<D> e\<^sub>2 (A \<squnion> \ e\<^sub>1); \ e\<^sub>2 (length E); length (ty E e\<^sub>1 # ST) + max_stack e\<^sub>2 \<le> mxs; length E + max_vars e\<^sub>2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e\<^sub>2, compxE2 e\<^sub>2 0 (length (ty E e\<^sub>1 # ST)) [::] ty\<^sub>i' (ty E e\<^sub>1 # ST) E (A \<squnion> \ e\<^sub>1) # compT E (A \<squnion> \ e\<^sub>1) (ty E e\<^sub>1 # ST) e\<^sub>2 @ [after E (A \<squnion> \ e\<^sub>1) (ty E e\<^sub>1 # ST) e\<^sub>2]
P,E \<turnstile>1 e\<^sub>1 \<guillemotleft>bop\<guillemotright> e\<^sub>2 :: T
\<D> (e\<^sub>1 \<guillemotleft>bop\<guillemotright> e\<^sub>2) A
\ (e\<^sub>1 \<guillemotleft>bop\<guillemotright> e\<^sub>2) (length E)
length ST + max_stack (e\<^sub>1 \<guillemotleft>bop\<guillemotright> e\<^sub>2) \<le> mxs
length E + max_vars (e\<^sub>1 \<guillemotleft>bop\<guillemotright> e\<^sub>2) \<le> mxl
set E \<subseteq> types P
P,E \<turnstile>1 e\<^sub>2 :: T\<^sub>2
P,E \<turnstile>1 e\<^sub>1 :: T\<^sub>1
[PROOF STEP]
have "\<turnstile> compE2 e\<^sub>2, compxE2 e\<^sub>2 0 (size (ty E e\<^sub>1#ST)) [::] ?\<tau>\<^sub>1#?\<tau>s\<^sub>2@[?\<tau>\<^sub>2]"
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>P,E \<turnstile>1 e\<^sub>2 :: T\<^sub>2; \<D> e\<^sub>2 (A \<squnion> \ e\<^sub>1); \ e\<^sub>2 (length E); length (ty E e\<^sub>1 # ST) + max_stack e\<^sub>2 \<le> mxs; length E + max_vars e\<^sub>2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e\<^sub>2, compxE2 e\<^sub>2 0 (length (ty E e\<^sub>1 # ST)) [::] ty\<^sub>i' (ty E e\<^sub>1 # ST) E (A \<squnion> \ e\<^sub>1) # compT E (A \<squnion> \ e\<^sub>1) (ty E e\<^sub>1 # ST) e\<^sub>2 @ [after E (A \<squnion> \ e\<^sub>1) (ty E e\<^sub>1 # ST) e\<^sub>2]
P,E \<turnstile>1 e\<^sub>1 \<guillemotleft>bop\<guillemotright> e\<^sub>2 :: T
\<D> (e\<^sub>1 \<guillemotleft>bop\<guillemotright> e\<^sub>2) A
\ (e\<^sub>1 \<guillemotleft>bop\<guillemotright> e\<^sub>2) (length E)
length ST + max_stack (e\<^sub>1 \<guillemotleft>bop\<guillemotright> e\<^sub>2) \<le> mxs
length E + max_vars (e\<^sub>1 \<guillemotleft>bop\<guillemotright> e\<^sub>2) \<le> mxl
set E \<subseteq> types P
P,E \<turnstile>1 e\<^sub>2 :: T\<^sub>2
P,E \<turnstile>1 e\<^sub>1 :: T\<^sub>1

goal (1 subgoal):
 1. \<turnstile> compE2 e\<^sub>2, compxE2 e\<^sub>2 0 (length (ty E e\<^sub>1 # ST)) [::] ty\<^sub>i' (T\<^sub>1 # ST) E (A \<squnion> \ e\<^sub>1) # compT E (A \<squnion> \ e\<^sub>1) (T\<^sub>1 # ST) e\<^sub>2 @ [ty\<^sub>i' (T\<^sub>2 # T\<^sub>1 # ST) E (A \<squnion> \ e\<^sub>1 \<squnion> \ e\<^sub>2)]
[PROOF STEP]
by (auto simp: after_def)
[PROOF STATE]
proof (state)
this:
\<turnstile> compE2 e\<^sub>2, compxE2 e\<^sub>2 0 (length (ty E e\<^sub>1 # ST)) [::] ty\<^sub>i' (T\<^sub>1 # ST) E (A \<squnion> \ e\<^sub>1) # compT E (A \<squnion> \ e\<^sub>1) (T\<^sub>1 # ST) e\<^sub>2 @ [ty\<^sub>i' (T\<^sub>2 # T\<^sub>1 # ST) E (A \<squnion> \ e\<^sub>1 \<squnion> \ e\<^sub>2)]

goal (23 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 6. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 7. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 8. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 9. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 10. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
A total of 23 subgoals...
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
\<turnstile> compE2 e\<^sub>2, compxE2 e\<^sub>2 0 (length (ty E e\<^sub>1 # ST)) [::] ty\<^sub>i' (T\<^sub>1 # ST) E (A \<squnion> \ e\<^sub>1) # compT E (A \<squnion> \ e\<^sub>1) (T\<^sub>1 # ST) e\<^sub>2 @ [ty\<^sub>i' (T\<^sub>2 # T\<^sub>1 # ST) E (A \<squnion> \ e\<^sub>1 \<squnion> \ e\<^sub>2)]

goal (23 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 6. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 7. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 8. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 9. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 10. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
A total of 23 subgoals...
[PROOF STEP]
from BinOp T\<^sub>1
[PROOF STATE]
proof (chain)
picking this:
\<lbrakk>P,E \<turnstile>1 e\<^sub>1 :: ?T1; \<D> e\<^sub>1 A; \ e\<^sub>1 (length E); length ST + max_stack e\<^sub>1 \<le> mxs; length E + max_vars e\<^sub>1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e\<^sub>1, compxE2 e\<^sub>1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e\<^sub>1 @ [after E A ST e\<^sub>1]
\<lbrakk>P,E \<turnstile>1 e\<^sub>2 :: ?T1; \<D> e\<^sub>2 (A \<squnion> \ e\<^sub>1); \ e\<^sub>2 (length E); length (ty E e\<^sub>1 # ST) + max_stack e\<^sub>2 \<le> mxs; length E + max_vars e\<^sub>2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e\<^sub>2, compxE2 e\<^sub>2 0 (length (ty E e\<^sub>1 # ST)) [::] ty\<^sub>i' (ty E e\<^sub>1 # ST) E (A \<squnion> \ e\<^sub>1) # compT E (A \<squnion> \ e\<^sub>1) (ty E e\<^sub>1 # ST) e\<^sub>2 @ [after E (A \<squnion> \ e\<^sub>1) (ty E e\<^sub>1 # ST) e\<^sub>2]
P,E \<turnstile>1 e\<^sub>1 \<guillemotleft>bop\<guillemotright> e\<^sub>2 :: T
\<D> (e\<^sub>1 \<guillemotleft>bop\<guillemotright> e\<^sub>2) A
\ (e\<^sub>1 \<guillemotleft>bop\<guillemotright> e\<^sub>2) (length E)
length ST + max_stack (e\<^sub>1 \<guillemotleft>bop\<guillemotright> e\<^sub>2) \<le> mxs
length E + max_vars (e\<^sub>1 \<guillemotleft>bop\<guillemotright> e\<^sub>2) \<le> mxl
set E \<subseteq> types P
P,E \<turnstile>1 e\<^sub>1 :: T\<^sub>1
[PROOF STEP]
have "\<turnstile> compE2 e\<^sub>1, compxE2 e\<^sub>1 0 (size ST) [::] ?\<tau>#?\<tau>s\<^sub>1@[?\<tau>\<^sub>1]"
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>P,E \<turnstile>1 e\<^sub>1 :: ?T1; \<D> e\<^sub>1 A; \ e\<^sub>1 (length E); length ST + max_stack e\<^sub>1 \<le> mxs; length E + max_vars e\<^sub>1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e\<^sub>1, compxE2 e\<^sub>1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e\<^sub>1 @ [after E A ST e\<^sub>1]
\<lbrakk>P,E \<turnstile>1 e\<^sub>2 :: ?T1; \<D> e\<^sub>2 (A \<squnion> \ e\<^sub>1); \ e\<^sub>2 (length E); length (ty E e\<^sub>1 # ST) + max_stack e\<^sub>2 \<le> mxs; length E + max_vars e\<^sub>2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e\<^sub>2, compxE2 e\<^sub>2 0 (length (ty E e\<^sub>1 # ST)) [::] ty\<^sub>i' (ty E e\<^sub>1 # ST) E (A \<squnion> \ e\<^sub>1) # compT E (A \<squnion> \ e\<^sub>1) (ty E e\<^sub>1 # ST) e\<^sub>2 @ [after E (A \<squnion> \ e\<^sub>1) (ty E e\<^sub>1 # ST) e\<^sub>2]
P,E \<turnstile>1 e\<^sub>1 \<guillemotleft>bop\<guillemotright> e\<^sub>2 :: T
\<D> (e\<^sub>1 \<guillemotleft>bop\<guillemotright> e\<^sub>2) A
\ (e\<^sub>1 \<guillemotleft>bop\<guillemotright> e\<^sub>2) (length E)
length ST + max_stack (e\<^sub>1 \<guillemotleft>bop\<guillemotright> e\<^sub>2) \<le> mxs
length E + max_vars (e\<^sub>1 \<guillemotleft>bop\<guillemotright> e\<^sub>2) \<le> mxl
set E \<subseteq> types P
P,E \<turnstile>1 e\<^sub>1 :: T\<^sub>1

goal (1 subgoal):
 1. \<turnstile> compE2 e\<^sub>1, compxE2 e\<^sub>1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e\<^sub>1 @ [ty\<^sub>i' (T\<^sub>1 # ST) E (A \<squnion> \ e\<^sub>1)]
[PROOF STEP]
by (auto simp: after_def)
[PROOF STATE]
proof (state)
this:
\<turnstile> compE2 e\<^sub>1, compxE2 e\<^sub>1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e\<^sub>1 @ [ty\<^sub>i' (T\<^sub>1 # ST) E (A \<squnion> \ e\<^sub>1)]

goal (23 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST e1 bop e2 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; P,E \<turnstile>1 e1 \<guillemotleft>bop\<guillemotright> e2 :: T; \<D> (e1 \<guillemotleft>bop\<guillemotright> e2) A; \ (e1 \<guillemotleft>bop\<guillemotright> e2) (length E); length ST + max_stack (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxs; length E + max_vars (e1 \<guillemotleft>bop\<guillemotright> e2) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1 \<guillemotleft>bop\<guillemotright> e2), compxE2 (e1 \<guillemotleft>bop\<guillemotright> e2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1 \<guillemotleft>bop\<guillemotright> e2) @ [after E A ST (e1 \<guillemotleft>bop\<guillemotright> e2)]
 6. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 7. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 8. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 9. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 10. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
A total of 23 subgoals...
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
\<lbrakk>length (compT E (A \<squnion> \ e\<^sub>1) (T\<^sub>1 # ST) e\<^sub>2) + 1 = length (compE2 e\<^sub>2); length (compT E A ST e\<^sub>1) + 1 = length (compE2 e\<^sub>1)\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e\<^sub>1 @ compE2 e\<^sub>2 @ [BinOpInstr bop], compxE2 e\<^sub>1 0 (length ST) @ shift (length (compE2 e\<^sub>1)) (compxE2 e\<^sub>2 0 (length (ty E e\<^sub>1 # ST)) @ shift (length (compE2 e\<^sub>2)) []) [::] ty\<^sub>i' ST E A # compT E A ST e\<^sub>1 @ ty\<^sub>i' (T\<^sub>1 # ST) E (A \<squnion> \ e\<^sub>1) # compT E (A \<squnion> \ e\<^sub>1) (T\<^sub>1 # ST) e\<^sub>2 @ [ty\<^sub>i' (T\<^sub>2 # T\<^sub>1 # ST) E (A \<squnion> \ e\<^sub>1 \<squnion> \ e\<^sub>2), ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1 \<squnion> \ e\<^sub>2)]
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>length (compT E (A \<squnion> \ e\<^sub>1) (T\<^sub>1 # ST) e\<^sub>2) + 1 = length (compE2 e\<^sub>2); length (compT E A ST e\<^sub>1) + 1 = length (compE2 e\<^sub>1)\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e\<^sub>1 @ compE2 e\<^sub>2 @ [BinOpInstr bop], compxE2 e\<^sub>1 0 (length ST) @ shift (length (compE2 e\<^sub>1)) (compxE2 e\<^sub>2 0 (length (ty E e\<^sub>1 # ST)) @ shift (length (compE2 e\<^sub>2)) []) [::] ty\<^sub>i' ST E A # compT E A ST e\<^sub>1 @ ty\<^sub>i' (T\<^sub>1 # ST) E (A \<squnion> \ e\<^sub>1) # compT E (A \<squnion> \ e\<^sub>1) (T\<^sub>1 # ST) e\<^sub>2 @ [ty\<^sub>i' (T\<^sub>2 # T\<^sub>1 # ST) E (A \<squnion> \ e\<^sub>1 \<squnion> \ e\<^sub>2), ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1 \<squnion> \ e\<^sub>2)]

goal (1 subgoal):
 1. \<turnstile> compE2 (e\<^sub>1 \<guillemotleft>bop\<guillemotright> e\<^sub>2), compxE2 (e\<^sub>1 \<guillemotleft>bop\<guillemotright> e\<^sub>2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<^sub>1 \<guillemotleft>bop\<guillemotright> e\<^sub>2) @ [after E A ST (e\<^sub>1 \<guillemotleft>bop\<guillemotright> e\<^sub>2)]
[PROOF STEP]
using T T\<^sub>1 T\<^sub>2
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>length (compT E (A \<squnion> \ e\<^sub>1) (T\<^sub>1 # ST) e\<^sub>2) + 1 = length (compE2 e\<^sub>2); length (compT E A ST e\<^sub>1) + 1 = length (compE2 e\<^sub>1)\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e\<^sub>1 @ compE2 e\<^sub>2 @ [BinOpInstr bop], compxE2 e\<^sub>1 0 (length ST) @ shift (length (compE2 e\<^sub>1)) (compxE2 e\<^sub>2 0 (length (ty E e\<^sub>1 # ST)) @ shift (length (compE2 e\<^sub>2)) []) [::] ty\<^sub>i' ST E A # compT E A ST e\<^sub>1 @ ty\<^sub>i' (T\<^sub>1 # ST) E (A \<squnion> \ e\<^sub>1) # compT E (A \<squnion> \ e\<^sub>1) (T\<^sub>1 # ST) e\<^sub>2 @ [ty\<^sub>i' (T\<^sub>2 # T\<^sub>1 # ST) E (A \<squnion> \ e\<^sub>1 \<squnion> \ e\<^sub>2), ty\<^sub>i' (T # ST) E (A \<squnion> \ e\<^sub>1 \<squnion> \ e\<^sub>2)]
P,E \<turnstile>1 e\<^sub>1 \<guillemotleft>bop\<guillemotright> e\<^sub>2 :: T
P,E \<turnstile>1 e\<^sub>1 :: T\<^sub>1
P,E \<turnstile>1 e\<^sub>2 :: T\<^sub>2

goal (1 subgoal):
 1. \<turnstile> compE2 (e\<^sub>1 \<guillemotleft>bop\<guillemotright> e\<^sub>2), compxE2 (e\<^sub>1 \<guillemotleft>bop\<guillemotright> e\<^sub>2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<^sub>1 \<guillemotleft>bop\<guillemotright> e\<^sub>2) @ [after E A ST (e\<^sub>1 \<guillemotleft>bop\<guillemotright> e\<^sub>2)]
[PROOF STEP]
by (simp add: after_def hyperUn_assoc)
[PROOF STATE]
proof (state)
this:
\<turnstile> compE2 (e\<^sub>1 \<guillemotleft>bop\<guillemotright> e\<^sub>2), compxE2 (e\<^sub>1 \<guillemotleft>bop\<guillemotright> e\<^sub>2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<^sub>1 \<guillemotleft>bop\<guillemotright> e\<^sub>2) @ [after E A ST (e\<^sub>1 \<guillemotleft>bop\<guillemotright> e\<^sub>2)]

goal (22 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 6. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 7. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 8. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 9. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 10. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
A total of 22 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (22 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 6. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 7. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 8. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 9. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 10. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
A total of 22 subgoals...
[PROOF STEP]
case (Cons E A ST e es)
[PROOF STATE]
proof (state)
this:
\<lbrakk>P,E \<turnstile>1 e :: ?T1; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]
\<lbrakk>P,E \<turnstile>1 es [::] ?Ts1; \<D>s es (A \<squnion> \ e); \s es (length E); length (ty E e # ST) + max_stacks es \<le> mxs; length E + max_varss es \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> let \<tau>s = ty\<^sub>i' (ty E e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (ty E e # ST) es in \<turnstile> compEs2 es, compxEs2 es 0 (length (ty E e # ST)) [::] \<tau>s \<and> last \<tau>s = ty\<^sub>i' (rev ?Ts1 @ ty E e # ST) E (A \<squnion> \ e \<squnion> \s es)
P,E \<turnstile>1 e # es [::] Ts
\<D>s (e # es) A
\s (e # es) (length E)
length ST + max_stacks (e # es) \<le> mxs
length E + max_varss (e # es) \<le> mxl
set E \<subseteq> types P

goal (22 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 6. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 7. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 8. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 9. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 10. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
A total of 22 subgoals...
[PROOF STEP]
have "P,E \<turnstile>1 e # es [::] Ts"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. P,E \<turnstile>1 e # es [::] Ts
[PROOF STEP]
by fact
[PROOF STATE]
proof (state)
this:
P,E \<turnstile>1 e # es [::] Ts

goal (22 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 6. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 7. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 8. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 9. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 10. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
A total of 22 subgoals...
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
P,E \<turnstile>1 e # es [::] Ts
[PROOF STEP]
obtain T\<^sub>e Ts' where
    T\<^sub>e: "P,E \<turnstile>1 e :: T\<^sub>e" and Ts': "P,E \<turnstile>1 es [::] Ts'" and
    Ts: "Ts = T\<^sub>e#Ts'"
[PROOF STATE]
proof (prove)
using this:
P,E \<turnstile>1 e # es [::] Ts

goal (1 subgoal):
 1. (\<And>T\<^sub>e Ts'. \<lbrakk>P,E \<turnstile>1 e :: T\<^sub>e; P,E \<turnstile>1 es [::] Ts'; Ts = T\<^sub>e # Ts'\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
P,E \<turnstile>1 e :: T\<^sub>e
P,E \<turnstile>1 es [::] Ts'
Ts = T\<^sub>e # Ts'

goal (22 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 6. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 7. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 8. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 9. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 10. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
A total of 22 subgoals...
[PROOF STEP]
let ?A\<^sub>e = "A \<squnion> \ e"
[PROOF STATE]
proof (state)
goal (22 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 6. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 7. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 8. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 9. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 10. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
A total of 22 subgoals...
[PROOF STEP]
let ?\<tau> = "ty\<^sub>i' ST E A"
[PROOF STATE]
proof (state)
goal (22 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 6. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 7. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 8. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 9. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 10. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
A total of 22 subgoals...
[PROOF STEP]
let ?\<tau>s\<^sub>e = "compT E A ST e"
[PROOF STATE]
proof (state)
goal (22 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 6. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 7. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 8. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 9. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 10. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
A total of 22 subgoals...
[PROOF STEP]
let ?\<tau>\<^sub>e = "ty\<^sub>i' (T\<^sub>e#ST) E ?A\<^sub>e"
[PROOF STATE]
proof (state)
goal (22 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 6. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 7. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 8. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 9. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 10. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
A total of 22 subgoals...
[PROOF STEP]
let ?\<tau>s' = "compTs E ?A\<^sub>e (T\<^sub>e#ST) es"
[PROOF STATE]
proof (state)
goal (22 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 6. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 7. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 8. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 9. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 10. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
A total of 22 subgoals...
[PROOF STEP]
let ?\<tau>s = "?\<tau> # ?\<tau>s\<^sub>e @ (?\<tau>\<^sub>e # ?\<tau>s')"
[PROOF STATE]
proof (state)
goal (22 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 6. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 7. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 8. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 9. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 10. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
A total of 22 subgoals...
[PROOF STEP]
from Cons.hyps(2) Cons.prems T\<^sub>e Ts'
[PROOF STATE]
proof (chain)
picking this:
\<lbrakk>P,E \<turnstile>1 es [::] ?Ts1; \<D>s es (A \<squnion> \ e); \s es (length E); length (ty E e # ST) + max_stacks es \<le> mxs; length E + max_varss es \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> let \<tau>s = ty\<^sub>i' (ty E e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (ty E e # ST) es in \<turnstile> compEs2 es, compxEs2 es 0 (length (ty E e # ST)) [::] \<tau>s \<and> last \<tau>s = ty\<^sub>i' (rev ?Ts1 @ ty E e # ST) E (A \<squnion> \ e \<squnion> \s es)
P,E \<turnstile>1 e # es [::] Ts
\<D>s (e # es) A
\s (e # es) (length E)
length ST + max_stacks (e # es) \<le> mxs
length E + max_varss (e # es) \<le> mxl
set E \<subseteq> types P
P,E \<turnstile>1 e :: T\<^sub>e
P,E \<turnstile>1 es [::] Ts'
[PROOF STEP]
have "\<turnstile> compEs2 es, compxEs2 es 0 (size (T\<^sub>e#ST)) [::] ?\<tau>\<^sub>e#?\<tau>s'"
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>P,E \<turnstile>1 es [::] ?Ts1; \<D>s es (A \<squnion> \ e); \s es (length E); length (ty E e # ST) + max_stacks es \<le> mxs; length E + max_varss es \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> let \<tau>s = ty\<^sub>i' (ty E e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (ty E e # ST) es in \<turnstile> compEs2 es, compxEs2 es 0 (length (ty E e # ST)) [::] \<tau>s \<and> last \<tau>s = ty\<^sub>i' (rev ?Ts1 @ ty E e # ST) E (A \<squnion> \ e \<squnion> \s es)
P,E \<turnstile>1 e # es [::] Ts
\<D>s (e # es) A
\s (e # es) (length E)
length ST + max_stacks (e # es) \<le> mxs
length E + max_varss (e # es) \<le> mxl
set E \<subseteq> types P
P,E \<turnstile>1 e :: T\<^sub>e
P,E \<turnstile>1 es [::] Ts'

goal (1 subgoal):
 1. \<turnstile> compEs2 es, compxEs2 es 0 (length (T\<^sub>e # ST)) [::] ty\<^sub>i' (T\<^sub>e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (T\<^sub>e # ST) es
[PROOF STEP]
by (simp add: after_def)
[PROOF STATE]
proof (state)
this:
\<turnstile> compEs2 es, compxEs2 es 0 (length (T\<^sub>e # ST)) [::] ty\<^sub>i' (T\<^sub>e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (T\<^sub>e # ST) es

goal (22 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 6. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 7. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 8. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 9. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 10. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
A total of 22 subgoals...
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
\<turnstile> compEs2 es, compxEs2 es 0 (length (T\<^sub>e # ST)) [::] ty\<^sub>i' (T\<^sub>e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (T\<^sub>e # ST) es

goal (22 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 6. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 7. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 8. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 9. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 10. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
A total of 22 subgoals...
[PROOF STEP]
from Cons T\<^sub>e
[PROOF STATE]
proof (chain)
picking this:
\<lbrakk>P,E \<turnstile>1 e :: ?T1; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]
\<lbrakk>P,E \<turnstile>1 es [::] ?Ts1; \<D>s es (A \<squnion> \ e); \s es (length E); length (ty E e # ST) + max_stacks es \<le> mxs; length E + max_varss es \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> let \<tau>s = ty\<^sub>i' (ty E e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (ty E e # ST) es in \<turnstile> compEs2 es, compxEs2 es 0 (length (ty E e # ST)) [::] \<tau>s \<and> last \<tau>s = ty\<^sub>i' (rev ?Ts1 @ ty E e # ST) E (A \<squnion> \ e \<squnion> \s es)
P,E \<turnstile>1 e # es [::] Ts
\<D>s (e # es) A
\s (e # es) (length E)
length ST + max_stacks (e # es) \<le> mxs
length E + max_varss (e # es) \<le> mxl
set E \<subseteq> types P
P,E \<turnstile>1 e :: T\<^sub>e
[PROOF STEP]
have "\<turnstile> compE2 e, compxE2 e 0 (size ST) [::] ?\<tau>#?\<tau>s\<^sub>e@[?\<tau>\<^sub>e]"
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>P,E \<turnstile>1 e :: ?T1; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]
\<lbrakk>P,E \<turnstile>1 es [::] ?Ts1; \<D>s es (A \<squnion> \ e); \s es (length E); length (ty E e # ST) + max_stacks es \<le> mxs; length E + max_varss es \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> let \<tau>s = ty\<^sub>i' (ty E e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (ty E e # ST) es in \<turnstile> compEs2 es, compxEs2 es 0 (length (ty E e # ST)) [::] \<tau>s \<and> last \<tau>s = ty\<^sub>i' (rev ?Ts1 @ ty E e # ST) E (A \<squnion> \ e \<squnion> \s es)
P,E \<turnstile>1 e # es [::] Ts
\<D>s (e # es) A
\s (e # es) (length E)
length ST + max_stacks (e # es) \<le> mxs
length E + max_varss (e # es) \<le> mxl
set E \<subseteq> types P
P,E \<turnstile>1 e :: T\<^sub>e

goal (1 subgoal):
 1. \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [ty\<^sub>i' (T\<^sub>e # ST) E (A \<squnion> \ e)]
[PROOF STEP]
by (auto simp: after_def)
[PROOF STATE]
proof (state)
this:
\<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [ty\<^sub>i' (T\<^sub>e # ST) E (A \<squnion> \ e)]

goal (22 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 6. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 7. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 8. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 9. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 10. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
A total of 22 subgoals...
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
\<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [ty\<^sub>i' (T\<^sub>e # ST) E (A \<squnion> \ e)]

goal (22 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 6. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 7. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 8. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 9. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 10. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
A total of 22 subgoals...
[PROOF STEP]
from Cons.hyps(2)[OF Ts'] Cons.prems T\<^sub>e Ts' Ts
[PROOF STATE]
proof (chain)
picking this:
\<lbrakk>\<D>s es (A \<squnion> \ e); \s es (length E); length (ty E e # ST) + max_stacks es \<le> mxs; length E + max_varss es \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> let \<tau>s = ty\<^sub>i' (ty E e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (ty E e # ST) es in \<turnstile> compEs2 es, compxEs2 es 0 (length (ty E e # ST)) [::] \<tau>s \<and> last \<tau>s = ty\<^sub>i' (rev Ts' @ ty E e # ST) E (A \<squnion> \ e \<squnion> \s es)
P,E \<turnstile>1 e # es [::] Ts
\<D>s (e # es) A
\s (e # es) (length E)
length ST + max_stacks (e # es) \<le> mxs
length E + max_varss (e # es) \<le> mxl
set E \<subseteq> types P
P,E \<turnstile>1 e :: T\<^sub>e
P,E \<turnstile>1 es [::] Ts'
Ts = T\<^sub>e # Ts'
[PROOF STEP]
have "last ?\<tau>s = ty\<^sub>i' (rev Ts@ST) E (?A\<^sub>e \<squnion> \s es)"
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>\<D>s es (A \<squnion> \ e); \s es (length E); length (ty E e # ST) + max_stacks es \<le> mxs; length E + max_varss es \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> let \<tau>s = ty\<^sub>i' (ty E e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (ty E e # ST) es in \<turnstile> compEs2 es, compxEs2 es 0 (length (ty E e # ST)) [::] \<tau>s \<and> last \<tau>s = ty\<^sub>i' (rev Ts' @ ty E e # ST) E (A \<squnion> \ e \<squnion> \s es)
P,E \<turnstile>1 e # es [::] Ts
\<D>s (e # es) A
\s (e # es) (length E)
length ST + max_stacks (e # es) \<le> mxs
length E + max_varss (e # es) \<le> mxl
set E \<subseteq> types P
P,E \<turnstile>1 e :: T\<^sub>e
P,E \<turnstile>1 es [::] Ts'
Ts = T\<^sub>e # Ts'

goal (1 subgoal):
 1. last (ty\<^sub>i' ST E A # compT E A ST e @ ty\<^sub>i' (T\<^sub>e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (T\<^sub>e # ST) es) = ty\<^sub>i' (rev Ts @ ST) E (A \<squnion> \ e \<squnion> \s es)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
last (ty\<^sub>i' ST E A # compT E A ST e @ ty\<^sub>i' (T\<^sub>e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (T\<^sub>e # ST) es) = ty\<^sub>i' (rev Ts @ ST) E (A \<squnion> \ e \<squnion> \s es)

goal (22 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 6. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 7. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 8. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 9. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 10. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
A total of 22 subgoals...
[PROOF STEP]
ultimately
[PROOF STATE]
proof (chain)
picking this:
\<turnstile> compEs2 es, compxEs2 es 0 (length (T\<^sub>e # ST)) [::] ty\<^sub>i' (T\<^sub>e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (T\<^sub>e # ST) es
\<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [ty\<^sub>i' (T\<^sub>e # ST) E (A \<squnion> \ e)]
last (ty\<^sub>i' ST E A # compT E A ST e @ ty\<^sub>i' (T\<^sub>e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (T\<^sub>e # ST) es) = ty\<^sub>i' (rev Ts @ ST) E (A \<squnion> \ e \<squnion> \s es)
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
\<turnstile> compEs2 es, compxEs2 es 0 (length (T\<^sub>e # ST)) [::] ty\<^sub>i' (T\<^sub>e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (T\<^sub>e # ST) es
\<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [ty\<^sub>i' (T\<^sub>e # ST) E (A \<squnion> \ e)]
last (ty\<^sub>i' ST E A # compT E A ST e @ ty\<^sub>i' (T\<^sub>e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (T\<^sub>e # ST) es) = ty\<^sub>i' (rev Ts @ ST) E (A \<squnion> \ e \<squnion> \s es)

goal (1 subgoal):
 1. let \<tau>s = ty\<^sub>i' ST E A # compTs E A ST (e # es) in \<turnstile> compEs2 (e # es), compxEs2 (e # es) 0 (length ST) [::] \<tau>s \<and> last \<tau>s = ty\<^sub>i' (rev Ts @ ST) E (A \<squnion> \s (e # es))
[PROOF STEP]
using T\<^sub>e
[PROOF STATE]
proof (prove)
using this:
\<turnstile> compEs2 es, compxEs2 es 0 (length (T\<^sub>e # ST)) [::] ty\<^sub>i' (T\<^sub>e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (T\<^sub>e # ST) es
\<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [ty\<^sub>i' (T\<^sub>e # ST) E (A \<squnion> \ e)]
last (ty\<^sub>i' ST E A # compT E A ST e @ ty\<^sub>i' (T\<^sub>e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (T\<^sub>e # ST) es) = ty\<^sub>i' (rev Ts @ ST) E (A \<squnion> \ e \<squnion> \s es)
P,E \<turnstile>1 e :: T\<^sub>e

goal (1 subgoal):
 1. let \<tau>s = ty\<^sub>i' ST E A # compTs E A ST (e # es) in \<turnstile> compEs2 (e # es), compxEs2 (e # es) 0 (length ST) [::] \<tau>s \<and> last \<tau>s = ty\<^sub>i' (rev Ts @ ST) E (A \<squnion> \s (e # es))
[PROOF STEP]
by(auto simp add: after_def hyperUn_assoc shift_compxEs2 stack_xlift_compxEs2 simp del: compxE2_size_convs compxEs2_size_convs compxEs2_stack_xlift_convs compxE2_stack_xlift_convs intro: wt_instrs_app2)
[PROOF STATE]
proof (state)
this:
let \<tau>s = ty\<^sub>i' ST E A # compTs E A ST (e # es) in \<turnstile> compEs2 (e # es), compxEs2 (e # es) 0 (length ST) [::] \<tau>s \<and> last \<tau>s = ty\<^sub>i' (rev Ts @ ST) E (A \<squnion> \s (e # es))

goal (21 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 6. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 7. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 8. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 9. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 10. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
A total of 21 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (21 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 6. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 7. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 8. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 9. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 10. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
A total of 21 subgoals...
[PROOF STEP]
case (FAss E A ST e\<^sub>1 F D e\<^sub>2)
[PROOF STATE]
proof (state)
this:
\<lbrakk>P,E \<turnstile>1 e\<^sub>1 :: ?T1; \<D> e\<^sub>1 A; \ e\<^sub>1 (length E); length ST + max_stack e\<^sub>1 \<le> mxs; length E + max_vars e\<^sub>1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e\<^sub>1, compxE2 e\<^sub>1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e\<^sub>1 @ [after E A ST e\<^sub>1]
\<lbrakk>P,E \<turnstile>1 e\<^sub>2 :: ?T1; \<D> e\<^sub>2 (A \<squnion> \ e\<^sub>1); \ e\<^sub>2 (length E); length (ty E e\<^sub>1 # ST) + max_stack e\<^sub>2 \<le> mxs; length E + max_vars e\<^sub>2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e\<^sub>2, compxE2 e\<^sub>2 0 (length (ty E e\<^sub>1 # ST)) [::] ty\<^sub>i' (ty E e\<^sub>1 # ST) E (A \<squnion> \ e\<^sub>1) # compT E (A \<squnion> \ e\<^sub>1) (ty E e\<^sub>1 # ST) e\<^sub>2 @ [after E (A \<squnion> \ e\<^sub>1) (ty E e\<^sub>1 # ST) e\<^sub>2]
P,E \<turnstile>1 e\<^sub>1\<bullet>F{D} := e\<^sub>2 :: T
\<D> (e\<^sub>1\<bullet>F{D} := e\<^sub>2) A
\ (e\<^sub>1\<bullet>F{D} := e\<^sub>2) (length E)
length ST + max_stack (e\<^sub>1\<bullet>F{D} := e\<^sub>2) \<le> mxs
length E + max_vars (e\<^sub>1\<bullet>F{D} := e\<^sub>2) \<le> mxl
set E \<subseteq> types P

goal (21 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 6. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 7. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 8. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 9. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 10. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
A total of 21 subgoals...
[PROOF STEP]
hence Void: "P,E \<turnstile>1 e\<^sub>1\<bullet>F{D} := e\<^sub>2 :: Void"
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>P,E \<turnstile>1 e\<^sub>1 :: ?T1; \<D> e\<^sub>1 A; \ e\<^sub>1 (length E); length ST + max_stack e\<^sub>1 \<le> mxs; length E + max_vars e\<^sub>1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e\<^sub>1, compxE2 e\<^sub>1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e\<^sub>1 @ [after E A ST e\<^sub>1]
\<lbrakk>P,E \<turnstile>1 e\<^sub>2 :: ?T1; \<D> e\<^sub>2 (A \<squnion> \ e\<^sub>1); \ e\<^sub>2 (length E); length (ty E e\<^sub>1 # ST) + max_stack e\<^sub>2 \<le> mxs; length E + max_vars e\<^sub>2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e\<^sub>2, compxE2 e\<^sub>2 0 (length (ty E e\<^sub>1 # ST)) [::] ty\<^sub>i' (ty E e\<^sub>1 # ST) E (A \<squnion> \ e\<^sub>1) # compT E (A \<squnion> \ e\<^sub>1) (ty E e\<^sub>1 # ST) e\<^sub>2 @ [after E (A \<squnion> \ e\<^sub>1) (ty E e\<^sub>1 # ST) e\<^sub>2]
P,E \<turnstile>1 e\<^sub>1\<bullet>F{D} := e\<^sub>2 :: T
\<D> (e\<^sub>1\<bullet>F{D} := e\<^sub>2) A
\ (e\<^sub>1\<bullet>F{D} := e\<^sub>2) (length E)
length ST + max_stack (e\<^sub>1\<bullet>F{D} := e\<^sub>2) \<le> mxs
length E + max_vars (e\<^sub>1\<bullet>F{D} := e\<^sub>2) \<le> mxl
set E \<subseteq> types P

goal (1 subgoal):
 1. P,E \<turnstile>1 e\<^sub>1\<bullet>F{D} := e\<^sub>2 :: Void
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
P,E \<turnstile>1 e\<^sub>1\<bullet>F{D} := e\<^sub>2 :: Void

goal (21 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 6. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 7. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 8. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 9. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 10. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
A total of 21 subgoals...
[PROOF STEP]
then
[PROOF STATE]
proof (chain)
picking this:
P,E \<turnstile>1 e\<^sub>1\<bullet>F{D} := e\<^sub>2 :: Void
[PROOF STEP]
obtain U C T T' fm where
    C: "P,E \<turnstile>1 e\<^sub>1 :: U" and U: "class_type_of' U = \<lfloor>C\<rfloor>" and sees: "P \<turnstile> C sees F:T (fm) in D" and
    T': "P,E \<turnstile>1 e\<^sub>2 :: T'" and T'_T: "P \<turnstile> T' \<le> T"
[PROOF STATE]
proof (prove)
using this:
P,E \<turnstile>1 e\<^sub>1\<bullet>F{D} := e\<^sub>2 :: Void

goal (1 subgoal):
 1. (\<And>U C T fm T'. \<lbrakk>P,E \<turnstile>1 e\<^sub>1 :: U; class_type_of' U = \<lfloor>C\<rfloor>; P \<turnstile> C sees F:T (fm) in D; P,E \<turnstile>1 e\<^sub>2 :: T'; P \<turnstile> T' \<le> T\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
P,E \<turnstile>1 e\<^sub>1 :: U
class_type_of' U = \<lfloor>C\<rfloor>
P \<turnstile> C sees F:T (fm) in D
P,E \<turnstile>1 e\<^sub>2 :: T'
P \<turnstile> T' \<le> T

goal (21 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 6. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 7. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 8. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 9. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 10. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
A total of 21 subgoals...
[PROOF STEP]
let ?A\<^sub>1 = "A \<squnion> \ e\<^sub>1"
[PROOF STATE]
proof (state)
goal (21 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 6. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 7. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 8. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 9. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 10. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
A total of 21 subgoals...
[PROOF STEP]
let ?A\<^sub>2 = "?A\<^sub>1 \<squnion> \ e\<^sub>2"
[PROOF STATE]
proof (state)
goal (21 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 6. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 7. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 8. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 9. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 10. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
A total of 21 subgoals...
[PROOF STEP]
let ?\<tau> = "ty\<^sub>i' ST E A"
[PROOF STATE]
proof (state)
goal (21 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 6. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 7. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 8. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 9. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 10. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
A total of 21 subgoals...
[PROOF STEP]
let ?\<tau>s\<^sub>1 = "compT E A ST e\<^sub>1"
[PROOF STATE]
proof (state)
goal (21 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 6. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 7. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 8. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 9. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 10. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
A total of 21 subgoals...
[PROOF STEP]
let ?\<tau>\<^sub>1 = "ty\<^sub>i' (U#ST) E ?A\<^sub>1"
[PROOF STATE]
proof (state)
goal (21 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 6. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 7. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 8. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 9. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 10. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
A total of 21 subgoals...
[PROOF STEP]
let ?\<tau>s\<^sub>2 = "compT E ?A\<^sub>1 (U#ST) e\<^sub>2"
[PROOF STATE]
proof (state)
goal (21 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 6. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 7. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 8. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 9. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 10. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
A total of 21 subgoals...
[PROOF STEP]
let ?\<tau>\<^sub>2 = "ty\<^sub>i' (T'#U#ST) E ?A\<^sub>2"
[PROOF STATE]
proof (state)
goal (21 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 6. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 7. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 8. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 9. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 10. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
A total of 21 subgoals...
[PROOF STEP]
let ?\<tau>\<^sub>3 = "ty\<^sub>i' ST E ?A\<^sub>2"
[PROOF STATE]
proof (state)
goal (21 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 6. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 7. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 8. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 9. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 10. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
A total of 21 subgoals...
[PROOF STEP]
let ?\<tau>' = "ty\<^sub>i' (Void#ST) E ?A\<^sub>2"
[PROOF STATE]
proof (state)
goal (21 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 6. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 7. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 8. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 9. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 10. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
A total of 21 subgoals...
[PROOF STEP]
from FAss.prems sees T'_T U
[PROOF STATE]
proof (chain)
picking this:
P,E \<turnstile>1 e\<^sub>1\<bullet>F{D} := e\<^sub>2 :: Ta__
\<D> (e\<^sub>1\<bullet>F{D} := e\<^sub>2) A
\ (e\<^sub>1\<bullet>F{D} := e\<^sub>2) (length E)
length ST + max_stack (e\<^sub>1\<bullet>F{D} := e\<^sub>2) \<le> mxs
length E + max_vars (e\<^sub>1\<bullet>F{D} := e\<^sub>2) \<le> mxl
set E \<subseteq> types P
P \<turnstile> C sees F:T (fm) in D
P \<turnstile> T' \<le> T
class_type_of' U = \<lfloor>C\<rfloor>
[PROOF STEP]
have "\<turnstile> [Putfield F D,Push Unit],[] [::] [?\<tau>\<^sub>2,?\<tau>\<^sub>3,?\<tau>']"
[PROOF STATE]
proof (prove)
using this:
P,E \<turnstile>1 e\<^sub>1\<bullet>F{D} := e\<^sub>2 :: Ta__
\<D> (e\<^sub>1\<bullet>F{D} := e\<^sub>2) A
\ (e\<^sub>1\<bullet>F{D} := e\<^sub>2) (length E)
length ST + max_stack (e\<^sub>1\<bullet>F{D} := e\<^sub>2) \<le> mxs
length E + max_vars (e\<^sub>1\<bullet>F{D} := e\<^sub>2) \<le> mxl
set E \<subseteq> types P
P \<turnstile> C sees F:T (fm) in D
P \<turnstile> T' \<le> T
class_type_of' U = \<lfloor>C\<rfloor>

goal (1 subgoal):
 1. \<turnstile> [Putfield F D, Push Unit], [] [::] [ty\<^sub>i' (T' # U # ST) E (A \<squnion> \ e\<^sub>1 \<squnion> \ e\<^sub>2), ty\<^sub>i' ST E (A \<squnion> \ e\<^sub>1 \<squnion> \ e\<^sub>2), ty\<^sub>i' (Void # ST) E (A \<squnion> \ e\<^sub>1 \<squnion> \ e\<^sub>2)]
[PROOF STEP]
by (fastforce simp add: wt_Push wt_Put)
[PROOF STATE]
proof (state)
this:
\<turnstile> [Putfield F D, Push Unit], [] [::] [ty\<^sub>i' (T' # U # ST) E (A \<squnion> \ e\<^sub>1 \<squnion> \ e\<^sub>2), ty\<^sub>i' ST E (A \<squnion> \ e\<^sub>1 \<squnion> \ e\<^sub>2), ty\<^sub>i' (Void # ST) E (A \<squnion> \ e\<^sub>1 \<squnion> \ e\<^sub>2)]

goal (21 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 6. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 7. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 8. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 9. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 10. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
A total of 21 subgoals...
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
\<turnstile> [Putfield F D, Push Unit], [] [::] [ty\<^sub>i' (T' # U # ST) E (A \<squnion> \ e\<^sub>1 \<squnion> \ e\<^sub>2), ty\<^sub>i' ST E (A \<squnion> \ e\<^sub>1 \<squnion> \ e\<^sub>2), ty\<^sub>i' (Void # ST) E (A \<squnion> \ e\<^sub>1 \<squnion> \ e\<^sub>2)]

goal (21 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 6. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 7. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 8. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 9. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 10. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
A total of 21 subgoals...
[PROOF STEP]
from FAss.hyps(2)[of T'] FAss.prems T' C
[PROOF STATE]
proof (chain)
picking this:
\<lbrakk>P,E \<turnstile>1 e\<^sub>2 :: T'; \<D> e\<^sub>2 (A \<squnion> \ e\<^sub>1); \ e\<^sub>2 (length E); length (ty E e\<^sub>1 # ST) + max_stack e\<^sub>2 \<le> mxs; length E + max_vars e\<^sub>2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e\<^sub>2, compxE2 e\<^sub>2 0 (length (ty E e\<^sub>1 # ST)) [::] ty\<^sub>i' (ty E e\<^sub>1 # ST) E (A \<squnion> \ e\<^sub>1) # compT E (A \<squnion> \ e\<^sub>1) (ty E e\<^sub>1 # ST) e\<^sub>2 @ [after E (A \<squnion> \ e\<^sub>1) (ty E e\<^sub>1 # ST) e\<^sub>2]
P,E \<turnstile>1 e\<^sub>1\<bullet>F{D} := e\<^sub>2 :: Ta__
\<D> (e\<^sub>1\<bullet>F{D} := e\<^sub>2) A
\ (e\<^sub>1\<bullet>F{D} := e\<^sub>2) (length E)
length ST + max_stack (e\<^sub>1\<bullet>F{D} := e\<^sub>2) \<le> mxs
length E + max_vars (e\<^sub>1\<bullet>F{D} := e\<^sub>2) \<le> mxl
set E \<subseteq> types P
P,E \<turnstile>1 e\<^sub>2 :: T'
P,E \<turnstile>1 e\<^sub>1 :: U
[PROOF STEP]
have "\<turnstile> compE2 e\<^sub>2, compxE2 e\<^sub>2 0 (size ST+1) [::] ?\<tau>\<^sub>1#?\<tau>s\<^sub>2@[?\<tau>\<^sub>2]"
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>P,E \<turnstile>1 e\<^sub>2 :: T'; \<D> e\<^sub>2 (A \<squnion> \ e\<^sub>1); \ e\<^sub>2 (length E); length (ty E e\<^sub>1 # ST) + max_stack e\<^sub>2 \<le> mxs; length E + max_vars e\<^sub>2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e\<^sub>2, compxE2 e\<^sub>2 0 (length (ty E e\<^sub>1 # ST)) [::] ty\<^sub>i' (ty E e\<^sub>1 # ST) E (A \<squnion> \ e\<^sub>1) # compT E (A \<squnion> \ e\<^sub>1) (ty E e\<^sub>1 # ST) e\<^sub>2 @ [after E (A \<squnion> \ e\<^sub>1) (ty E e\<^sub>1 # ST) e\<^sub>2]
P,E \<turnstile>1 e\<^sub>1\<bullet>F{D} := e\<^sub>2 :: Ta__
\<D> (e\<^sub>1\<bullet>F{D} := e\<^sub>2) A
\ (e\<^sub>1\<bullet>F{D} := e\<^sub>2) (length E)
length ST + max_stack (e\<^sub>1\<bullet>F{D} := e\<^sub>2) \<le> mxs
length E + max_vars (e\<^sub>1\<bullet>F{D} := e\<^sub>2) \<le> mxl
set E \<subseteq> types P
P,E \<turnstile>1 e\<^sub>2 :: T'
P,E \<turnstile>1 e\<^sub>1 :: U

goal (1 subgoal):
 1. \<turnstile> compE2 e\<^sub>2, compxE2 e\<^sub>2 0 (length ST + 1) [::] ty\<^sub>i' (U # ST) E (A \<squnion> \ e\<^sub>1) # compT E (A \<squnion> \ e\<^sub>1) (U # ST) e\<^sub>2 @ [ty\<^sub>i' (T' # U # ST) E (A \<squnion> \ e\<^sub>1 \<squnion> \ e\<^sub>2)]
[PROOF STEP]
by (auto simp add: after_def hyperUn_assoc)
[PROOF STATE]
proof (state)
this:
\<turnstile> compE2 e\<^sub>2, compxE2 e\<^sub>2 0 (length ST + 1) [::] ty\<^sub>i' (U # ST) E (A \<squnion> \ e\<^sub>1) # compT E (A \<squnion> \ e\<^sub>1) (U # ST) e\<^sub>2 @ [ty\<^sub>i' (T' # U # ST) E (A \<squnion> \ e\<^sub>1 \<squnion> \ e\<^sub>2)]

goal (21 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 6. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 7. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 8. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 9. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 10. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
A total of 21 subgoals...
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
\<turnstile> compE2 e\<^sub>2, compxE2 e\<^sub>2 0 (length ST + 1) [::] ty\<^sub>i' (U # ST) E (A \<squnion> \ e\<^sub>1) # compT E (A \<squnion> \ e\<^sub>1) (U # ST) e\<^sub>2 @ [ty\<^sub>i' (T' # U # ST) E (A \<squnion> \ e\<^sub>1 \<squnion> \ e\<^sub>2)]

goal (21 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 6. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 7. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 8. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 9. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 10. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
A total of 21 subgoals...
[PROOF STEP]
from FAss C
[PROOF STATE]
proof (chain)
picking this:
\<lbrakk>P,E \<turnstile>1 e\<^sub>1 :: ?T1; \<D> e\<^sub>1 A; \ e\<^sub>1 (length E); length ST + max_stack e\<^sub>1 \<le> mxs; length E + max_vars e\<^sub>1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e\<^sub>1, compxE2 e\<^sub>1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e\<^sub>1 @ [after E A ST e\<^sub>1]
\<lbrakk>P,E \<turnstile>1 e\<^sub>2 :: ?T1; \<D> e\<^sub>2 (A \<squnion> \ e\<^sub>1); \ e\<^sub>2 (length E); length (ty E e\<^sub>1 # ST) + max_stack e\<^sub>2 \<le> mxs; length E + max_vars e\<^sub>2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e\<^sub>2, compxE2 e\<^sub>2 0 (length (ty E e\<^sub>1 # ST)) [::] ty\<^sub>i' (ty E e\<^sub>1 # ST) E (A \<squnion> \ e\<^sub>1) # compT E (A \<squnion> \ e\<^sub>1) (ty E e\<^sub>1 # ST) e\<^sub>2 @ [after E (A \<squnion> \ e\<^sub>1) (ty E e\<^sub>1 # ST) e\<^sub>2]
P,E \<turnstile>1 e\<^sub>1\<bullet>F{D} := e\<^sub>2 :: Ta__
\<D> (e\<^sub>1\<bullet>F{D} := e\<^sub>2) A
\ (e\<^sub>1\<bullet>F{D} := e\<^sub>2) (length E)
length ST + max_stack (e\<^sub>1\<bullet>F{D} := e\<^sub>2) \<le> mxs
length E + max_vars (e\<^sub>1\<bullet>F{D} := e\<^sub>2) \<le> mxl
set E \<subseteq> types P
P,E \<turnstile>1 e\<^sub>1 :: U
[PROOF STEP]
have "\<turnstile> compE2 e\<^sub>1, compxE2 e\<^sub>1 0 (size ST) [::] ?\<tau>#?\<tau>s\<^sub>1@[?\<tau>\<^sub>1]"
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>P,E \<turnstile>1 e\<^sub>1 :: ?T1; \<D> e\<^sub>1 A; \ e\<^sub>1 (length E); length ST + max_stack e\<^sub>1 \<le> mxs; length E + max_vars e\<^sub>1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e\<^sub>1, compxE2 e\<^sub>1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e\<^sub>1 @ [after E A ST e\<^sub>1]
\<lbrakk>P,E \<turnstile>1 e\<^sub>2 :: ?T1; \<D> e\<^sub>2 (A \<squnion> \ e\<^sub>1); \ e\<^sub>2 (length E); length (ty E e\<^sub>1 # ST) + max_stack e\<^sub>2 \<le> mxs; length E + max_vars e\<^sub>2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e\<^sub>2, compxE2 e\<^sub>2 0 (length (ty E e\<^sub>1 # ST)) [::] ty\<^sub>i' (ty E e\<^sub>1 # ST) E (A \<squnion> \ e\<^sub>1) # compT E (A \<squnion> \ e\<^sub>1) (ty E e\<^sub>1 # ST) e\<^sub>2 @ [after E (A \<squnion> \ e\<^sub>1) (ty E e\<^sub>1 # ST) e\<^sub>2]
P,E \<turnstile>1 e\<^sub>1\<bullet>F{D} := e\<^sub>2 :: Ta__
\<D> (e\<^sub>1\<bullet>F{D} := e\<^sub>2) A
\ (e\<^sub>1\<bullet>F{D} := e\<^sub>2) (length E)
length ST + max_stack (e\<^sub>1\<bullet>F{D} := e\<^sub>2) \<le> mxs
length E + max_vars (e\<^sub>1\<bullet>F{D} := e\<^sub>2) \<le> mxl
set E \<subseteq> types P
P,E \<turnstile>1 e\<^sub>1 :: U

goal (1 subgoal):
 1. \<turnstile> compE2 e\<^sub>1, compxE2 e\<^sub>1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e\<^sub>1 @ [ty\<^sub>i' (U # ST) E (A \<squnion> \ e\<^sub>1)]
[PROOF STEP]
by (auto simp add: after_def)
[PROOF STATE]
proof (state)
this:
\<turnstile> compE2 e\<^sub>1, compxE2 e\<^sub>1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e\<^sub>1 @ [ty\<^sub>i' (U # ST) E (A \<squnion> \ e\<^sub>1)]

goal (21 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 6. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 7. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 8. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 9. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 10. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
A total of 21 subgoals...
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
\<lbrakk>length (compT E (A \<squnion> \ e\<^sub>1) (U # ST) e\<^sub>2) + 1 = length (compE2 e\<^sub>2); length (compT E A ST e\<^sub>1) + 1 = length (compE2 e\<^sub>1)\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e\<^sub>1 @ compE2 e\<^sub>2 @ [Putfield F D, Push Unit], compxE2 e\<^sub>1 0 (length ST) @ shift (length (compE2 e\<^sub>1)) (compxE2 e\<^sub>2 0 (length ST + 1) @ shift (length (compE2 e\<^sub>2)) []) [::] ty\<^sub>i' ST E A # compT E A ST e\<^sub>1 @ ty\<^sub>i' (U # ST) E (A \<squnion> \ e\<^sub>1) # compT E (A \<squnion> \ e\<^sub>1) (U # ST) e\<^sub>2 @ [ty\<^sub>i' (T' # U # ST) E (A \<squnion> \ e\<^sub>1 \<squnion> \ e\<^sub>2), ty\<^sub>i' ST E (A \<squnion> \ e\<^sub>1 \<squnion> \ e\<^sub>2), ty\<^sub>i' (Void # ST) E (A \<squnion> \ e\<^sub>1 \<squnion> \ e\<^sub>2)]
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>length (compT E (A \<squnion> \ e\<^sub>1) (U # ST) e\<^sub>2) + 1 = length (compE2 e\<^sub>2); length (compT E A ST e\<^sub>1) + 1 = length (compE2 e\<^sub>1)\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e\<^sub>1 @ compE2 e\<^sub>2 @ [Putfield F D, Push Unit], compxE2 e\<^sub>1 0 (length ST) @ shift (length (compE2 e\<^sub>1)) (compxE2 e\<^sub>2 0 (length ST + 1) @ shift (length (compE2 e\<^sub>2)) []) [::] ty\<^sub>i' ST E A # compT E A ST e\<^sub>1 @ ty\<^sub>i' (U # ST) E (A \<squnion> \ e\<^sub>1) # compT E (A \<squnion> \ e\<^sub>1) (U # ST) e\<^sub>2 @ [ty\<^sub>i' (T' # U # ST) E (A \<squnion> \ e\<^sub>1 \<squnion> \ e\<^sub>2), ty\<^sub>i' ST E (A \<squnion> \ e\<^sub>1 \<squnion> \ e\<^sub>2), ty\<^sub>i' (Void # ST) E (A \<squnion> \ e\<^sub>1 \<squnion> \ e\<^sub>2)]

goal (1 subgoal):
 1. \<turnstile> compE2 (e\<^sub>1\<bullet>F{D} := e\<^sub>2), compxE2 (e\<^sub>1\<bullet>F{D} := e\<^sub>2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<^sub>1\<bullet>F{D} := e\<^sub>2) @ [after E A ST (e\<^sub>1\<bullet>F{D} := e\<^sub>2)]
[PROOF STEP]
using Void C T'
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>length (compT E (A \<squnion> \ e\<^sub>1) (U # ST) e\<^sub>2) + 1 = length (compE2 e\<^sub>2); length (compT E A ST e\<^sub>1) + 1 = length (compE2 e\<^sub>1)\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e\<^sub>1 @ compE2 e\<^sub>2 @ [Putfield F D, Push Unit], compxE2 e\<^sub>1 0 (length ST) @ shift (length (compE2 e\<^sub>1)) (compxE2 e\<^sub>2 0 (length ST + 1) @ shift (length (compE2 e\<^sub>2)) []) [::] ty\<^sub>i' ST E A # compT E A ST e\<^sub>1 @ ty\<^sub>i' (U # ST) E (A \<squnion> \ e\<^sub>1) # compT E (A \<squnion> \ e\<^sub>1) (U # ST) e\<^sub>2 @ [ty\<^sub>i' (T' # U # ST) E (A \<squnion> \ e\<^sub>1 \<squnion> \ e\<^sub>2), ty\<^sub>i' ST E (A \<squnion> \ e\<^sub>1 \<squnion> \ e\<^sub>2), ty\<^sub>i' (Void # ST) E (A \<squnion> \ e\<^sub>1 \<squnion> \ e\<^sub>2)]
P,E \<turnstile>1 e\<^sub>1\<bullet>F{D} := e\<^sub>2 :: Void
P,E \<turnstile>1 e\<^sub>1 :: U
P,E \<turnstile>1 e\<^sub>2 :: T'

goal (1 subgoal):
 1. \<turnstile> compE2 (e\<^sub>1\<bullet>F{D} := e\<^sub>2), compxE2 (e\<^sub>1\<bullet>F{D} := e\<^sub>2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<^sub>1\<bullet>F{D} := e\<^sub>2) @ [after E A ST (e\<^sub>1\<bullet>F{D} := e\<^sub>2)]
[PROOF STEP]
by (simp add: after_def hyperUn_assoc)
[PROOF STATE]
proof (state)
this:
\<turnstile> compE2 (e\<^sub>1\<bullet>F{D} := e\<^sub>2), compxE2 (e\<^sub>1\<bullet>F{D} := e\<^sub>2) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<^sub>1\<bullet>F{D} := e\<^sub>2) @ [after E A ST (e\<^sub>1\<bullet>F{D} := e\<^sub>2)]

goal (20 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 6. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 7. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 8. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 9. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 10. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
A total of 20 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (20 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 6. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 7. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 8. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 9. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 10. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
A total of 20 subgoals...
[PROOF STEP]
case Val
[PROOF STATE]
proof (state)
this:
P,E_ \<turnstile>1 Val v_ :: T
\<D> (Val v_) A_
\ (Val v_) (length E_)
length ST_ + max_stack (Val v_) \<le> mxs
length E_ + max_vars (Val v_) \<le> mxl
set E_ \<subseteq> types P

goal (20 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST v T. \<lbrakk>P,E \<turnstile>1 Val v :: T; \<D> (Val v) A; \ (Val v) (length E); length ST + max_stack (Val v) \<le> mxs; length E + max_vars (Val v) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Val v), compxE2 (Val v) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Val v) @ [after E A ST (Val v)]
 5. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 6. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 7. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 8. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 9. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 10. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
A total of 20 subgoals...
[PROOF STEP]
thus ?case
[PROOF STATE]
proof (prove)
using this:
P,E_ \<turnstile>1 Val v_ :: T
\<D> (Val v_) A_
\ (Val v_) (length E_)
length ST_ + max_stack (Val v_) \<le> mxs
length E_ + max_vars (Val v_) \<le> mxl
set E_ \<subseteq> types P

goal (1 subgoal):
 1. \<turnstile> compE2 (Val v_), compxE2 (Val v_) 0 (length ST_) [::] ty\<^sub>i' ST_ E_ A_ # compT E_ A_ ST_ (Val v_) @ [after E_ A_ ST_ (Val v_)]
[PROOF STEP]
by(auto simp:after_def wt_Push)
[PROOF STATE]
proof (state)
this:
\<turnstile> compE2 (Val v_), compxE2 (Val v_) 0 (length ST_) [::] ty\<^sub>i' ST_ E_ A_ # compT E_ A_ ST_ (Val v_) @ [after E_ A_ ST_ (Val v_)]

goal (19 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 5. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 6. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 7. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 8. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 9. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
 10. \<And>E A ST e1 D F e2 e3 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; \<And>T. \<lbrakk>P,E \<turnstile>1 e3 :: T; \<D> e3 (A \<squnion> \ e1 \<squnion> \ e2); \ e3 (length E); length (ty E e2 # ty E e1 # ST) + max_stack e3 \<le> mxs; length E + max_vars e3 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e3, compxE2 e3 0 (length (ty E e2 # ty E e1 # ST)) [::] ty\<^sub>i' (ty E e2 # ty E e1 # ST) E (A \<squnion> \ e1 \<squnion> \ e2) # compT E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3 @ [after E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3]; P,E \<turnstile>1 e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3) :: T; \<D> (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) A; \ (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (length E); length ST + max_stack (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxs; length E + max_vars (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)), compxE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) @ [after E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3))]
A total of 19 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (19 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 5. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 6. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 7. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 8. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 9. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
 10. \<And>E A ST e1 D F e2 e3 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; \<And>T. \<lbrakk>P,E \<turnstile>1 e3 :: T; \<D> e3 (A \<squnion> \ e1 \<squnion> \ e2); \ e3 (length E); length (ty E e2 # ty E e1 # ST) + max_stack e3 \<le> mxs; length E + max_vars e3 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e3, compxE2 e3 0 (length (ty E e2 # ty E e1 # ST)) [::] ty\<^sub>i' (ty E e2 # ty E e1 # ST) E (A \<squnion> \ e1 \<squnion> \ e2) # compT E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3 @ [after E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3]; P,E \<turnstile>1 e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3) :: T; \<D> (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) A; \ (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (length E); length ST + max_stack (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxs; length E + max_vars (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)), compxE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) @ [after E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3))]
A total of 19 subgoals...
[PROOF STEP]
case (Cast T exp)
[PROOF STATE]
proof (state)
this:
\<lbrakk>P,Ta__ \<turnstile>1 e_ :: ?T1; \<D> e_ exp; \ e_ (length Ta__); length ST_ + max_stack e_ \<le> mxs; length Ta__ + max_vars e_ \<le> mxl; set Ta__ \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e_, compxE2 e_ 0 (length ST_) [::] ty\<^sub>i' ST_ Ta__ exp # compT Ta__ exp ST_ e_ @ [after Ta__ exp ST_ e_]
P,Ta__ \<turnstile>1 Cast C_ e_ :: T
\<D> (Cast C_ e_) exp
\ (Cast C_ e_) (length Ta__)
length ST_ + max_stack (Cast C_ e_) \<le> mxs
length Ta__ + max_vars (Cast C_ e_) \<le> mxl
set Ta__ \<subseteq> types P

goal (19 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST C e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 Cast C e :: T; \<D> (Cast C e) A; \ (Cast C e) (length E); length ST + max_stack (Cast C e) \<le> mxs; length E + max_vars (Cast C e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Cast C e), compxE2 (Cast C e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Cast C e) @ [after E A ST (Cast C e)]
 3. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 4. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 5. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 6. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 7. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 8. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 9. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
 10. \<And>E A ST e1 D F e2 e3 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; \<And>T. \<lbrakk>P,E \<turnstile>1 e3 :: T; \<D> e3 (A \<squnion> \ e1 \<squnion> \ e2); \ e3 (length E); length (ty E e2 # ty E e1 # ST) + max_stack e3 \<le> mxs; length E + max_vars e3 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e3, compxE2 e3 0 (length (ty E e2 # ty E e1 # ST)) [::] ty\<^sub>i' (ty E e2 # ty E e1 # ST) E (A \<squnion> \ e1 \<squnion> \ e2) # compT E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3 @ [after E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3]; P,E \<turnstile>1 e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3) :: T; \<D> (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) A; \ (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (length E); length ST + max_stack (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxs; length E + max_vars (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)), compxE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) @ [after E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3))]
A total of 19 subgoals...
[PROOF STEP]
thus ?case
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>P,Ta__ \<turnstile>1 e_ :: ?T1; \<D> e_ exp; \ e_ (length Ta__); length ST_ + max_stack e_ \<le> mxs; length Ta__ + max_vars e_ \<le> mxl; set Ta__ \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e_, compxE2 e_ 0 (length ST_) [::] ty\<^sub>i' ST_ Ta__ exp # compT Ta__ exp ST_ e_ @ [after Ta__ exp ST_ e_]
P,Ta__ \<turnstile>1 Cast C_ e_ :: T
\<D> (Cast C_ e_) exp
\ (Cast C_ e_) (length Ta__)
length ST_ + max_stack (Cast C_ e_) \<le> mxs
length Ta__ + max_vars (Cast C_ e_) \<le> mxl
set Ta__ \<subseteq> types P

goal (1 subgoal):
 1. \<turnstile> compE2 (Cast C_ e_), compxE2 (Cast C_ e_) 0 (length ST_) [::] ty\<^sub>i' ST_ Ta__ exp # compT Ta__ exp ST_ (Cast C_ e_) @ [after Ta__ exp ST_ (Cast C_ e_)]
[PROOF STEP]
by (auto simp:after_def wt_Cast)
[PROOF STATE]
proof (state)
this:
\<turnstile> compE2 (Cast C_ e_), compxE2 (Cast C_ e_) 0 (length ST_) [::] ty\<^sub>i' ST_ Ta__ exp # compT Ta__ exp ST_ (Cast C_ e_) @ [after Ta__ exp ST_ (Cast C_ e_)]

goal (18 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 3. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 4. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 5. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 6. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 7. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 8. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
 9. \<And>E A ST e1 D F e2 e3 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; \<And>T. \<lbrakk>P,E \<turnstile>1 e3 :: T; \<D> e3 (A \<squnion> \ e1 \<squnion> \ e2); \ e3 (length E); length (ty E e2 # ty E e1 # ST) + max_stack e3 \<le> mxs; length E + max_vars e3 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e3, compxE2 e3 0 (length (ty E e2 # ty E e1 # ST)) [::] ty\<^sub>i' (ty E e2 # ty E e1 # ST) E (A \<squnion> \ e1 \<squnion> \ e2) # compT E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3 @ [after E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3]; P,E \<turnstile>1 e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3) :: T; \<D> (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) A; \ (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (length E); length ST + max_stack (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxs; length E + max_vars (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)), compxE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) @ [after E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3))]
 10. \<And>E A ST e M es T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; \<And>Ts. \<lbrakk>P,E \<turnstile>1 es [::] Ts; \<D>s es (A \<squnion> \ e); \s es (length E); length (ty E e # ST) + max_stacks es \<le> mxs; length E + max_varss es \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> let \<tau>s = ty\<^sub>i' (ty E e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (ty E e # ST) es in \<turnstile> compEs2 es, compxEs2 es 0 (length (ty E e # ST)) [::] \<tau>s \<and> last \<tau>s = ty\<^sub>i' (rev Ts @ ty E e # ST) E (A \<squnion> \ e \<squnion> \s es); P,E \<turnstile>1 e\<bullet>M(es) :: T; \<D> (e\<bullet>M(es)) A; \ (e\<bullet>M(es)) (length E); length ST + max_stack (e\<bullet>M(es)) \<le> mxs; length E + max_vars (e\<bullet>M(es)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>M(es)), compxE2 (e\<bullet>M(es)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>M(es)) @ [after E A ST (e\<bullet>M(es))]
A total of 18 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (18 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 3. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 4. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 5. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 6. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 7. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 8. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
 9. \<And>E A ST e1 D F e2 e3 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; \<And>T. \<lbrakk>P,E \<turnstile>1 e3 :: T; \<D> e3 (A \<squnion> \ e1 \<squnion> \ e2); \ e3 (length E); length (ty E e2 # ty E e1 # ST) + max_stack e3 \<le> mxs; length E + max_vars e3 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e3, compxE2 e3 0 (length (ty E e2 # ty E e1 # ST)) [::] ty\<^sub>i' (ty E e2 # ty E e1 # ST) E (A \<squnion> \ e1 \<squnion> \ e2) # compT E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3 @ [after E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3]; P,E \<turnstile>1 e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3) :: T; \<D> (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) A; \ (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (length E); length ST + max_stack (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxs; length E + max_vars (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)), compxE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) @ [after E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3))]
 10. \<And>E A ST e M es T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; \<And>Ts. \<lbrakk>P,E \<turnstile>1 es [::] Ts; \<D>s es (A \<squnion> \ e); \s es (length E); length (ty E e # ST) + max_stacks es \<le> mxs; length E + max_varss es \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> let \<tau>s = ty\<^sub>i' (ty E e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (ty E e # ST) es in \<turnstile> compEs2 es, compxEs2 es 0 (length (ty E e # ST)) [::] \<tau>s \<and> last \<tau>s = ty\<^sub>i' (rev Ts @ ty E e # ST) E (A \<squnion> \ e \<squnion> \s es); P,E \<turnstile>1 e\<bullet>M(es) :: T; \<D> (e\<bullet>M(es)) A; \ (e\<bullet>M(es)) (length E); length ST + max_stack (e\<bullet>M(es)) \<le> mxs; length E + max_vars (e\<bullet>M(es)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>M(es)), compxE2 (e\<bullet>M(es)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>M(es)) @ [after E A ST (e\<bullet>M(es))]
A total of 18 subgoals...
[PROOF STEP]
case (InstanceOf E A ST e)
[PROOF STATE]
proof (state)
this:
\<lbrakk>P,E \<turnstile>1 e :: ?T1; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]
P,E \<turnstile>1 e instanceof T_ :: T
\<D> (e instanceof T_) A
\ (e instanceof T_) (length E)
length ST + max_stack (e instanceof T_) \<le> mxs
length E + max_vars (e instanceof T_) \<le> mxl
set E \<subseteq> types P

goal (18 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST e T Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e instanceof T :: Ta; \<D> (e instanceof T) A; \ (e instanceof T) (length E); length ST + max_stack (e instanceof T) \<le> mxs; length E + max_vars (e instanceof T) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e instanceof T), compxE2 (e instanceof T) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T) @ [after E A ST (e instanceof T)]
 3. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 4. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 5. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 6. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 7. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 8. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
 9. \<And>E A ST e1 D F e2 e3 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; \<And>T. \<lbrakk>P,E \<turnstile>1 e3 :: T; \<D> e3 (A \<squnion> \ e1 \<squnion> \ e2); \ e3 (length E); length (ty E e2 # ty E e1 # ST) + max_stack e3 \<le> mxs; length E + max_vars e3 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e3, compxE2 e3 0 (length (ty E e2 # ty E e1 # ST)) [::] ty\<^sub>i' (ty E e2 # ty E e1 # ST) E (A \<squnion> \ e1 \<squnion> \ e2) # compT E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3 @ [after E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3]; P,E \<turnstile>1 e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3) :: T; \<D> (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) A; \ (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (length E); length ST + max_stack (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxs; length E + max_vars (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)), compxE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) @ [after E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3))]
 10. \<And>E A ST e M es T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; \<And>Ts. \<lbrakk>P,E \<turnstile>1 es [::] Ts; \<D>s es (A \<squnion> \ e); \s es (length E); length (ty E e # ST) + max_stacks es \<le> mxs; length E + max_varss es \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> let \<tau>s = ty\<^sub>i' (ty E e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (ty E e # ST) es in \<turnstile> compEs2 es, compxEs2 es 0 (length (ty E e # ST)) [::] \<tau>s \<and> last \<tau>s = ty\<^sub>i' (rev Ts @ ty E e # ST) E (A \<squnion> \ e \<squnion> \s es); P,E \<turnstile>1 e\<bullet>M(es) :: T; \<D> (e\<bullet>M(es)) A; \ (e\<bullet>M(es)) (length E); length ST + max_stack (e\<bullet>M(es)) \<le> mxs; length E + max_vars (e\<bullet>M(es)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>M(es)), compxE2 (e\<bullet>M(es)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>M(es)) @ [after E A ST (e\<bullet>M(es))]
A total of 18 subgoals...
[PROOF STEP]
thus ?case
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>P,E \<turnstile>1 e :: ?T1; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]
P,E \<turnstile>1 e instanceof T_ :: T
\<D> (e instanceof T_) A
\ (e instanceof T_) (length E)
length ST + max_stack (e instanceof T_) \<le> mxs
length E + max_vars (e instanceof T_) \<le> mxl
set E \<subseteq> types P

goal (1 subgoal):
 1. \<turnstile> compE2 (e instanceof T_), compxE2 (e instanceof T_) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T_) @ [after E A ST (e instanceof T_)]
[PROOF STEP]
by(auto simp:after_def intro!: wt_Instanceof wt_instrs_app3 intro: widen_refT refT_widen)
[PROOF STATE]
proof (state)
this:
\<turnstile> compE2 (e instanceof T_), compxE2 (e instanceof T_) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e instanceof T_) @ [after E A ST (e instanceof T_)]

goal (17 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 3. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 4. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 5. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 6. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 7. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
 8. \<And>E A ST e1 D F e2 e3 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; \<And>T. \<lbrakk>P,E \<turnstile>1 e3 :: T; \<D> e3 (A \<squnion> \ e1 \<squnion> \ e2); \ e3 (length E); length (ty E e2 # ty E e1 # ST) + max_stack e3 \<le> mxs; length E + max_vars e3 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e3, compxE2 e3 0 (length (ty E e2 # ty E e1 # ST)) [::] ty\<^sub>i' (ty E e2 # ty E e1 # ST) E (A \<squnion> \ e1 \<squnion> \ e2) # compT E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3 @ [after E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3]; P,E \<turnstile>1 e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3) :: T; \<D> (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) A; \ (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (length E); length ST + max_stack (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxs; length E + max_vars (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)), compxE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) @ [after E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3))]
 9. \<And>E A ST e M es T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; \<And>Ts. \<lbrakk>P,E \<turnstile>1 es [::] Ts; \<D>s es (A \<squnion> \ e); \s es (length E); length (ty E e # ST) + max_stacks es \<le> mxs; length E + max_varss es \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> let \<tau>s = ty\<^sub>i' (ty E e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (ty E e # ST) es in \<turnstile> compEs2 es, compxEs2 es 0 (length (ty E e # ST)) [::] \<tau>s \<and> last \<tau>s = ty\<^sub>i' (rev Ts @ ty E e # ST) E (A \<squnion> \ e \<squnion> \s es); P,E \<turnstile>1 e\<bullet>M(es) :: T; \<D> (e\<bullet>M(es)) A; \ (e\<bullet>M(es)) (length E); length ST + max_stack (e\<bullet>M(es)) \<le> mxs; length E + max_vars (e\<bullet>M(es)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>M(es)), compxE2 (e\<bullet>M(es)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>M(es)) @ [after E A ST (e\<bullet>M(es))]
 10. \<And>E A ST i T e Ta. \<lbrakk>\<And>Ta. \<lbrakk>P,E @ [T] \<turnstile>1 e :: Ta; \<D> e (A \<ominus> i); \ e (length (E @ [T])); length ST + max_stack e \<le> mxs; length (E @ [T]) + max_vars e \<le> mxl; set (E @ [T]) \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST (E @ [T]) (A \<ominus> i) # compT (E @ [T]) (A \<ominus> i) ST e @ [after (E @ [T]) (A \<ominus> i) ST e]; P,E \<turnstile>1 {i:T=None; e} :: Ta; \<D> {i:T=None; e} A; \ {i:T=None; e} (length E); length ST + max_stack {i:T=None; e} \<le> mxs; length E + max_vars {i:T=None; e} \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 {i:T=None; e}, compxE2 {i:T=None; e} 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST {i:T=None; e} @ [after E A ST {i:T=None; e}]
A total of 17 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (17 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 3. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 4. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 5. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 6. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 7. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
 8. \<And>E A ST e1 D F e2 e3 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; \<And>T. \<lbrakk>P,E \<turnstile>1 e3 :: T; \<D> e3 (A \<squnion> \ e1 \<squnion> \ e2); \ e3 (length E); length (ty E e2 # ty E e1 # ST) + max_stack e3 \<le> mxs; length E + max_vars e3 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e3, compxE2 e3 0 (length (ty E e2 # ty E e1 # ST)) [::] ty\<^sub>i' (ty E e2 # ty E e1 # ST) E (A \<squnion> \ e1 \<squnion> \ e2) # compT E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3 @ [after E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3]; P,E \<turnstile>1 e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3) :: T; \<D> (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) A; \ (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (length E); length ST + max_stack (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxs; length E + max_vars (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)), compxE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) @ [after E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3))]
 9. \<And>E A ST e M es T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; \<And>Ts. \<lbrakk>P,E \<turnstile>1 es [::] Ts; \<D>s es (A \<squnion> \ e); \s es (length E); length (ty E e # ST) + max_stacks es \<le> mxs; length E + max_varss es \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> let \<tau>s = ty\<^sub>i' (ty E e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (ty E e # ST) es in \<turnstile> compEs2 es, compxEs2 es 0 (length (ty E e # ST)) [::] \<tau>s \<and> last \<tau>s = ty\<^sub>i' (rev Ts @ ty E e # ST) E (A \<squnion> \ e \<squnion> \s es); P,E \<turnstile>1 e\<bullet>M(es) :: T; \<D> (e\<bullet>M(es)) A; \ (e\<bullet>M(es)) (length E); length ST + max_stack (e\<bullet>M(es)) \<le> mxs; length E + max_vars (e\<bullet>M(es)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>M(es)), compxE2 (e\<bullet>M(es)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>M(es)) @ [after E A ST (e\<bullet>M(es))]
 10. \<And>E A ST i T e Ta. \<lbrakk>\<And>Ta. \<lbrakk>P,E @ [T] \<turnstile>1 e :: Ta; \<D> e (A \<ominus> i); \ e (length (E @ [T])); length ST + max_stack e \<le> mxs; length (E @ [T]) + max_vars e \<le> mxl; set (E @ [T]) \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST (E @ [T]) (A \<ominus> i) # compT (E @ [T]) (A \<ominus> i) ST e @ [after (E @ [T]) (A \<ominus> i) ST e]; P,E \<turnstile>1 {i:T=None; e} :: Ta; \<D> {i:T=None; e} A; \ {i:T=None; e} (length E); length ST + max_stack {i:T=None; e} \<le> mxs; length E + max_vars {i:T=None; e} \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 {i:T=None; e}, compxE2 {i:T=None; e} 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST {i:T=None; e} @ [after E A ST {i:T=None; e}]
A total of 17 subgoals...
[PROOF STEP]
case (BlockNone E A ST i Ti e)
[PROOF STATE]
proof (state)
this:
\<lbrakk>P,E @ [Ti] \<turnstile>1 e :: ?T1; \<D> e (A \<ominus> i); \ e (length (E @ [Ti])); length ST + max_stack e \<le> mxs; length (E @ [Ti]) + max_vars e \<le> mxl; set (E @ [Ti]) \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST (E @ [Ti]) (A \<ominus> i) # compT (E @ [Ti]) (A \<ominus> i) ST e @ [after (E @ [Ti]) (A \<ominus> i) ST e]
P,E \<turnstile>1 {i:Ti=None; e} :: T
\<D> {i:Ti=None; e} A
\ {i:Ti=None; e} (length E)
length ST + max_stack {i:Ti=None; e} \<le> mxs
length E + max_vars {i:Ti=None; e} \<le> mxl
set E \<subseteq> types P

goal (17 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 3. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 4. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 5. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 6. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 7. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
 8. \<And>E A ST e1 D F e2 e3 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; \<And>T. \<lbrakk>P,E \<turnstile>1 e3 :: T; \<D> e3 (A \<squnion> \ e1 \<squnion> \ e2); \ e3 (length E); length (ty E e2 # ty E e1 # ST) + max_stack e3 \<le> mxs; length E + max_vars e3 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e3, compxE2 e3 0 (length (ty E e2 # ty E e1 # ST)) [::] ty\<^sub>i' (ty E e2 # ty E e1 # ST) E (A \<squnion> \ e1 \<squnion> \ e2) # compT E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3 @ [after E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3]; P,E \<turnstile>1 e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3) :: T; \<D> (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) A; \ (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (length E); length ST + max_stack (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxs; length E + max_vars (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)), compxE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) @ [after E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3))]
 9. \<And>E A ST e M es T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; \<And>Ts. \<lbrakk>P,E \<turnstile>1 es [::] Ts; \<D>s es (A \<squnion> \ e); \s es (length E); length (ty E e # ST) + max_stacks es \<le> mxs; length E + max_varss es \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> let \<tau>s = ty\<^sub>i' (ty E e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (ty E e # ST) es in \<turnstile> compEs2 es, compxEs2 es 0 (length (ty E e # ST)) [::] \<tau>s \<and> last \<tau>s = ty\<^sub>i' (rev Ts @ ty E e # ST) E (A \<squnion> \ e \<squnion> \s es); P,E \<turnstile>1 e\<bullet>M(es) :: T; \<D> (e\<bullet>M(es)) A; \ (e\<bullet>M(es)) (length E); length ST + max_stack (e\<bullet>M(es)) \<le> mxs; length E + max_vars (e\<bullet>M(es)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>M(es)), compxE2 (e\<bullet>M(es)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>M(es)) @ [after E A ST (e\<bullet>M(es))]
 10. \<And>E A ST i T e Ta. \<lbrakk>\<And>Ta. \<lbrakk>P,E @ [T] \<turnstile>1 e :: Ta; \<D> e (A \<ominus> i); \ e (length (E @ [T])); length ST + max_stack e \<le> mxs; length (E @ [T]) + max_vars e \<le> mxl; set (E @ [T]) \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST (E @ [T]) (A \<ominus> i) # compT (E @ [T]) (A \<ominus> i) ST e @ [after (E @ [T]) (A \<ominus> i) ST e]; P,E \<turnstile>1 {i:T=None; e} :: Ta; \<D> {i:T=None; e} A; \ {i:T=None; e} (length E); length ST + max_stack {i:T=None; e} \<le> mxs; length E + max_vars {i:T=None; e} \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 {i:T=None; e}, compxE2 {i:T=None; e} 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST {i:T=None; e} @ [after E A ST {i:T=None; e}]
A total of 17 subgoals...
[PROOF STEP]
from \<open>P,E \<turnstile>1 {i:Ti=None; e} :: T\<close>
[PROOF STATE]
proof (chain)
picking this:
P,E \<turnstile>1 {i:Ti=None; e} :: T
[PROOF STEP]
have wte: "P,E@[Ti] \<turnstile>1 e :: T"
    and Ti: "is_type P Ti"
[PROOF STATE]
proof (prove)
using this:
P,E \<turnstile>1 {i:Ti=None; e} :: T

goal (1 subgoal):
 1. P,E @ [Ti] \<turnstile>1 e :: T &&& is_type P Ti
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
P,E @ [Ti] \<turnstile>1 e :: T
is_type P Ti

goal (17 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 3. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 4. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 5. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 6. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 7. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
 8. \<And>E A ST e1 D F e2 e3 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; \<And>T. \<lbrakk>P,E \<turnstile>1 e3 :: T; \<D> e3 (A \<squnion> \ e1 \<squnion> \ e2); \ e3 (length E); length (ty E e2 # ty E e1 # ST) + max_stack e3 \<le> mxs; length E + max_vars e3 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e3, compxE2 e3 0 (length (ty E e2 # ty E e1 # ST)) [::] ty\<^sub>i' (ty E e2 # ty E e1 # ST) E (A \<squnion> \ e1 \<squnion> \ e2) # compT E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3 @ [after E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3]; P,E \<turnstile>1 e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3) :: T; \<D> (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) A; \ (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (length E); length ST + max_stack (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxs; length E + max_vars (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)), compxE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) @ [after E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3))]
 9. \<And>E A ST e M es T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; \<And>Ts. \<lbrakk>P,E \<turnstile>1 es [::] Ts; \<D>s es (A \<squnion> \ e); \s es (length E); length (ty E e # ST) + max_stacks es \<le> mxs; length E + max_varss es \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> let \<tau>s = ty\<^sub>i' (ty E e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (ty E e # ST) es in \<turnstile> compEs2 es, compxEs2 es 0 (length (ty E e # ST)) [::] \<tau>s \<and> last \<tau>s = ty\<^sub>i' (rev Ts @ ty E e # ST) E (A \<squnion> \ e \<squnion> \s es); P,E \<turnstile>1 e\<bullet>M(es) :: T; \<D> (e\<bullet>M(es)) A; \ (e\<bullet>M(es)) (length E); length ST + max_stack (e\<bullet>M(es)) \<le> mxs; length E + max_vars (e\<bullet>M(es)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>M(es)), compxE2 (e\<bullet>M(es)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>M(es)) @ [after E A ST (e\<bullet>M(es))]
 10. \<And>E A ST i T e Ta. \<lbrakk>\<And>Ta. \<lbrakk>P,E @ [T] \<turnstile>1 e :: Ta; \<D> e (A \<ominus> i); \ e (length (E @ [T])); length ST + max_stack e \<le> mxs; length (E @ [T]) + max_vars e \<le> mxl; set (E @ [T]) \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST (E @ [T]) (A \<ominus> i) # compT (E @ [T]) (A \<ominus> i) ST e @ [after (E @ [T]) (A \<ominus> i) ST e]; P,E \<turnstile>1 {i:T=None; e} :: Ta; \<D> {i:T=None; e} A; \ {i:T=None; e} (length E); length ST + max_stack {i:T=None; e} \<le> mxs; length E + max_vars {i:T=None; e} \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 {i:T=None; e}, compxE2 {i:T=None; e} 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST {i:T=None; e} @ [after E A ST {i:T=None; e}]
A total of 17 subgoals...
[PROOF STEP]
let ?\<tau>s = "ty\<^sub>i' ST E A # compT (E @ [Ti]) (A\<ominus>i) ST e"
[PROOF STATE]
proof (state)
goal (17 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 3. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 4. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 5. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 6. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 7. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
 8. \<And>E A ST e1 D F e2 e3 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; \<And>T. \<lbrakk>P,E \<turnstile>1 e3 :: T; \<D> e3 (A \<squnion> \ e1 \<squnion> \ e2); \ e3 (length E); length (ty E e2 # ty E e1 # ST) + max_stack e3 \<le> mxs; length E + max_vars e3 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e3, compxE2 e3 0 (length (ty E e2 # ty E e1 # ST)) [::] ty\<^sub>i' (ty E e2 # ty E e1 # ST) E (A \<squnion> \ e1 \<squnion> \ e2) # compT E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3 @ [after E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3]; P,E \<turnstile>1 e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3) :: T; \<D> (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) A; \ (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (length E); length ST + max_stack (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxs; length E + max_vars (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)), compxE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) @ [after E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3))]
 9. \<And>E A ST e M es T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; \<And>Ts. \<lbrakk>P,E \<turnstile>1 es [::] Ts; \<D>s es (A \<squnion> \ e); \s es (length E); length (ty E e # ST) + max_stacks es \<le> mxs; length E + max_varss es \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> let \<tau>s = ty\<^sub>i' (ty E e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (ty E e # ST) es in \<turnstile> compEs2 es, compxEs2 es 0 (length (ty E e # ST)) [::] \<tau>s \<and> last \<tau>s = ty\<^sub>i' (rev Ts @ ty E e # ST) E (A \<squnion> \ e \<squnion> \s es); P,E \<turnstile>1 e\<bullet>M(es) :: T; \<D> (e\<bullet>M(es)) A; \ (e\<bullet>M(es)) (length E); length ST + max_stack (e\<bullet>M(es)) \<le> mxs; length E + max_vars (e\<bullet>M(es)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>M(es)), compxE2 (e\<bullet>M(es)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>M(es)) @ [after E A ST (e\<bullet>M(es))]
 10. \<And>E A ST i T e Ta. \<lbrakk>\<And>Ta. \<lbrakk>P,E @ [T] \<turnstile>1 e :: Ta; \<D> e (A \<ominus> i); \ e (length (E @ [T])); length ST + max_stack e \<le> mxs; length (E @ [T]) + max_vars e \<le> mxl; set (E @ [T]) \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST (E @ [T]) (A \<ominus> i) # compT (E @ [T]) (A \<ominus> i) ST e @ [after (E @ [T]) (A \<ominus> i) ST e]; P,E \<turnstile>1 {i:T=None; e} :: Ta; \<D> {i:T=None; e} A; \ {i:T=None; e} (length E); length ST + max_stack {i:T=None; e} \<le> mxs; length E + max_vars {i:T=None; e} \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 {i:T=None; e}, compxE2 {i:T=None; e} 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST {i:T=None; e} @ [after E A ST {i:T=None; e}]
A total of 17 subgoals...
[PROOF STEP]
from BlockNone wte Ti
[PROOF STATE]
proof (chain)
picking this:
\<lbrakk>P,E @ [Ti] \<turnstile>1 e :: ?T1; \<D> e (A \<ominus> i); \ e (length (E @ [Ti])); length ST + max_stack e \<le> mxs; length (E @ [Ti]) + max_vars e \<le> mxl; set (E @ [Ti]) \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST (E @ [Ti]) (A \<ominus> i) # compT (E @ [Ti]) (A \<ominus> i) ST e @ [after (E @ [Ti]) (A \<ominus> i) ST e]
P,E \<turnstile>1 {i:Ti=None; e} :: T
\<D> {i:Ti=None; e} A
\ {i:Ti=None; e} (length E)
length ST + max_stack {i:Ti=None; e} \<le> mxs
length E + max_vars {i:Ti=None; e} \<le> mxl
set E \<subseteq> types P
P,E @ [Ti] \<turnstile>1 e :: T
is_type P Ti
[PROOF STEP]
have "\<turnstile> compE2 e, compxE2 e 0 (size ST) [::] ?\<tau>s @ [ty\<^sub>i' (T#ST) (E@[Ti]) (A\<ominus>(size E) \<squnion> \ e)]"
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>P,E @ [Ti] \<turnstile>1 e :: ?T1; \<D> e (A \<ominus> i); \ e (length (E @ [Ti])); length ST + max_stack e \<le> mxs; length (E @ [Ti]) + max_vars e \<le> mxl; set (E @ [Ti]) \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST (E @ [Ti]) (A \<ominus> i) # compT (E @ [Ti]) (A \<ominus> i) ST e @ [after (E @ [Ti]) (A \<ominus> i) ST e]
P,E \<turnstile>1 {i:Ti=None; e} :: T
\<D> {i:Ti=None; e} A
\ {i:Ti=None; e} (length E)
length ST + max_stack {i:Ti=None; e} \<le> mxs
length E + max_vars {i:Ti=None; e} \<le> mxl
set E \<subseteq> types P
P,E @ [Ti] \<turnstile>1 e :: T
is_type P Ti

goal (1 subgoal):
 1. \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] (ty\<^sub>i' ST E A # compT (E @ [Ti]) (A \<ominus> i) ST e) @ [ty\<^sub>i' (T # ST) (E @ [Ti]) (A \<ominus> length E \<squnion> \ e)]
[PROOF STEP]
by(auto simp add: after_def)
[PROOF STATE]
proof (state)
this:
\<turnstile> compE2 e, compxE2 e 0 (length ST) [::] (ty\<^sub>i' ST E A # compT (E @ [Ti]) (A \<ominus> i) ST e) @ [ty\<^sub>i' (T # ST) (E @ [Ti]) (A \<ominus> length E \<squnion> \ e)]

goal (17 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 3. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 4. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 5. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 6. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 7. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
 8. \<And>E A ST e1 D F e2 e3 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; \<And>T. \<lbrakk>P,E \<turnstile>1 e3 :: T; \<D> e3 (A \<squnion> \ e1 \<squnion> \ e2); \ e3 (length E); length (ty E e2 # ty E e1 # ST) + max_stack e3 \<le> mxs; length E + max_vars e3 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e3, compxE2 e3 0 (length (ty E e2 # ty E e1 # ST)) [::] ty\<^sub>i' (ty E e2 # ty E e1 # ST) E (A \<squnion> \ e1 \<squnion> \ e2) # compT E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3 @ [after E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3]; P,E \<turnstile>1 e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3) :: T; \<D> (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) A; \ (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (length E); length ST + max_stack (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxs; length E + max_vars (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)), compxE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) @ [after E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3))]
 9. \<And>E A ST e M es T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; \<And>Ts. \<lbrakk>P,E \<turnstile>1 es [::] Ts; \<D>s es (A \<squnion> \ e); \s es (length E); length (ty E e # ST) + max_stacks es \<le> mxs; length E + max_varss es \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> let \<tau>s = ty\<^sub>i' (ty E e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (ty E e # ST) es in \<turnstile> compEs2 es, compxEs2 es 0 (length (ty E e # ST)) [::] \<tau>s \<and> last \<tau>s = ty\<^sub>i' (rev Ts @ ty E e # ST) E (A \<squnion> \ e \<squnion> \s es); P,E \<turnstile>1 e\<bullet>M(es) :: T; \<D> (e\<bullet>M(es)) A; \ (e\<bullet>M(es)) (length E); length ST + max_stack (e\<bullet>M(es)) \<le> mxs; length E + max_vars (e\<bullet>M(es)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>M(es)), compxE2 (e\<bullet>M(es)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>M(es)) @ [after E A ST (e\<bullet>M(es))]
 10. \<And>E A ST i T e Ta. \<lbrakk>\<And>Ta. \<lbrakk>P,E @ [T] \<turnstile>1 e :: Ta; \<D> e (A \<ominus> i); \ e (length (E @ [T])); length ST + max_stack e \<le> mxs; length (E @ [T]) + max_vars e \<le> mxl; set (E @ [T]) \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST (E @ [T]) (A \<ominus> i) # compT (E @ [T]) (A \<ominus> i) ST e @ [after (E @ [T]) (A \<ominus> i) ST e]; P,E \<turnstile>1 {i:T=None; e} :: Ta; \<D> {i:T=None; e} A; \ {i:T=None; e} (length E); length ST + max_stack {i:T=None; e} \<le> mxs; length E + max_vars {i:T=None; e} \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 {i:T=None; e}, compxE2 {i:T=None; e} 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST {i:T=None; e} @ [after E A ST {i:T=None; e}]
A total of 17 subgoals...
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
\<turnstile> compE2 e, compxE2 e 0 (length ST) [::] (ty\<^sub>i' ST E A # compT (E @ [Ti]) (A \<ominus> i) ST e) @ [ty\<^sub>i' (T # ST) (E @ [Ti]) (A \<ominus> length E \<squnion> \ e)]

goal (17 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 3. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 4. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 5. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 6. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 7. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
 8. \<And>E A ST e1 D F e2 e3 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; \<And>T. \<lbrakk>P,E \<turnstile>1 e3 :: T; \<D> e3 (A \<squnion> \ e1 \<squnion> \ e2); \ e3 (length E); length (ty E e2 # ty E e1 # ST) + max_stack e3 \<le> mxs; length E + max_vars e3 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e3, compxE2 e3 0 (length (ty E e2 # ty E e1 # ST)) [::] ty\<^sub>i' (ty E e2 # ty E e1 # ST) E (A \<squnion> \ e1 \<squnion> \ e2) # compT E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3 @ [after E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3]; P,E \<turnstile>1 e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3) :: T; \<D> (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) A; \ (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (length E); length ST + max_stack (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxs; length E + max_vars (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)), compxE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) @ [after E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3))]
 9. \<And>E A ST e M es T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; \<And>Ts. \<lbrakk>P,E \<turnstile>1 es [::] Ts; \<D>s es (A \<squnion> \ e); \s es (length E); length (ty E e # ST) + max_stacks es \<le> mxs; length E + max_varss es \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> let \<tau>s = ty\<^sub>i' (ty E e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (ty E e # ST) es in \<turnstile> compEs2 es, compxEs2 es 0 (length (ty E e # ST)) [::] \<tau>s \<and> last \<tau>s = ty\<^sub>i' (rev Ts @ ty E e # ST) E (A \<squnion> \ e \<squnion> \s es); P,E \<turnstile>1 e\<bullet>M(es) :: T; \<D> (e\<bullet>M(es)) A; \ (e\<bullet>M(es)) (length E); length ST + max_stack (e\<bullet>M(es)) \<le> mxs; length E + max_vars (e\<bullet>M(es)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>M(es)), compxE2 (e\<bullet>M(es)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>M(es)) @ [after E A ST (e\<bullet>M(es))]
 10. \<And>E A ST i T e Ta. \<lbrakk>\<And>Ta. \<lbrakk>P,E @ [T] \<turnstile>1 e :: Ta; \<D> e (A \<ominus> i); \ e (length (E @ [T])); length ST + max_stack e \<le> mxs; length (E @ [T]) + max_vars e \<le> mxl; set (E @ [T]) \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST (E @ [T]) (A \<ominus> i) # compT (E @ [T]) (A \<ominus> i) ST e @ [after (E @ [T]) (A \<ominus> i) ST e]; P,E \<turnstile>1 {i:T=None; e} :: Ta; \<D> {i:T=None; e} A; \ {i:T=None; e} (length E); length ST + max_stack {i:T=None; e} \<le> mxs; length E + max_vars {i:T=None; e} \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 {i:T=None; e}, compxE2 {i:T=None; e} 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST {i:T=None; e} @ [after E A ST {i:T=None; e}]
A total of 17 subgoals...
[PROOF STEP]
have "P \<turnstile> ty\<^sub>i' (T # ST) (E@[Ti]) (A \<ominus> size E \<squnion> \ e) \<le>' ty\<^sub>i' (T # ST) (E@[Ti]) ((A \<squnion> \ e) \<ominus> size E)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. P \<turnstile> ty\<^sub>i' (T # ST) (E @ [Ti]) (A \<ominus> length E \<squnion> \ e) \<le>' ty\<^sub>i' (T # ST) (E @ [Ti]) (A \<squnion> \ e \<ominus> length E)
[PROOF STEP]
by(auto simp add:hyperset_defs intro: ty\<^sub>i'_antimono)
[PROOF STATE]
proof (state)
this:
P \<turnstile> ty\<^sub>i' (T # ST) (E @ [Ti]) (A \<ominus> length E \<squnion> \ e) \<le>' ty\<^sub>i' (T # ST) (E @ [Ti]) (A \<squnion> \ e \<ominus> length E)

goal (17 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 3. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 4. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 5. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 6. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 7. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
 8. \<And>E A ST e1 D F e2 e3 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; \<And>T. \<lbrakk>P,E \<turnstile>1 e3 :: T; \<D> e3 (A \<squnion> \ e1 \<squnion> \ e2); \ e3 (length E); length (ty E e2 # ty E e1 # ST) + max_stack e3 \<le> mxs; length E + max_vars e3 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e3, compxE2 e3 0 (length (ty E e2 # ty E e1 # ST)) [::] ty\<^sub>i' (ty E e2 # ty E e1 # ST) E (A \<squnion> \ e1 \<squnion> \ e2) # compT E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3 @ [after E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3]; P,E \<turnstile>1 e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3) :: T; \<D> (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) A; \ (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (length E); length ST + max_stack (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxs; length E + max_vars (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)), compxE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) @ [after E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3))]
 9. \<And>E A ST e M es T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; \<And>Ts. \<lbrakk>P,E \<turnstile>1 es [::] Ts; \<D>s es (A \<squnion> \ e); \s es (length E); length (ty E e # ST) + max_stacks es \<le> mxs; length E + max_varss es \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> let \<tau>s = ty\<^sub>i' (ty E e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (ty E e # ST) es in \<turnstile> compEs2 es, compxEs2 es 0 (length (ty E e # ST)) [::] \<tau>s \<and> last \<tau>s = ty\<^sub>i' (rev Ts @ ty E e # ST) E (A \<squnion> \ e \<squnion> \s es); P,E \<turnstile>1 e\<bullet>M(es) :: T; \<D> (e\<bullet>M(es)) A; \ (e\<bullet>M(es)) (length E); length ST + max_stack (e\<bullet>M(es)) \<le> mxs; length E + max_vars (e\<bullet>M(es)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>M(es)), compxE2 (e\<bullet>M(es)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>M(es)) @ [after E A ST (e\<bullet>M(es))]
 10. \<And>E A ST i T e Ta. \<lbrakk>\<And>Ta. \<lbrakk>P,E @ [T] \<turnstile>1 e :: Ta; \<D> e (A \<ominus> i); \ e (length (E @ [T])); length ST + max_stack e \<le> mxs; length (E @ [T]) + max_vars e \<le> mxl; set (E @ [T]) \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST (E @ [T]) (A \<ominus> i) # compT (E @ [T]) (A \<ominus> i) ST e @ [after (E @ [T]) (A \<ominus> i) ST e]; P,E \<turnstile>1 {i:T=None; e} :: Ta; \<D> {i:T=None; e} A; \ {i:T=None; e} (length E); length ST + max_stack {i:T=None; e} \<le> mxs; length E + max_vars {i:T=None; e} \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 {i:T=None; e}, compxE2 {i:T=None; e} 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST {i:T=None; e} @ [after E A ST {i:T=None; e}]
A total of 17 subgoals...
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
P \<turnstile> ty\<^sub>i' (T # ST) (E @ [Ti]) (A \<ominus> length E \<squnion> \ e) \<le>' ty\<^sub>i' (T # ST) (E @ [Ti]) (A \<squnion> \ e \<ominus> length E)

goal (17 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 3. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 4. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 5. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 6. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 7. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
 8. \<And>E A ST e1 D F e2 e3 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; \<And>T. \<lbrakk>P,E \<turnstile>1 e3 :: T; \<D> e3 (A \<squnion> \ e1 \<squnion> \ e2); \ e3 (length E); length (ty E e2 # ty E e1 # ST) + max_stack e3 \<le> mxs; length E + max_vars e3 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e3, compxE2 e3 0 (length (ty E e2 # ty E e1 # ST)) [::] ty\<^sub>i' (ty E e2 # ty E e1 # ST) E (A \<squnion> \ e1 \<squnion> \ e2) # compT E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3 @ [after E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3]; P,E \<turnstile>1 e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3) :: T; \<D> (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) A; \ (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (length E); length ST + max_stack (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxs; length E + max_vars (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)), compxE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) @ [after E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3))]
 9. \<And>E A ST e M es T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; \<And>Ts. \<lbrakk>P,E \<turnstile>1 es [::] Ts; \<D>s es (A \<squnion> \ e); \s es (length E); length (ty E e # ST) + max_stacks es \<le> mxs; length E + max_varss es \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> let \<tau>s = ty\<^sub>i' (ty E e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (ty E e # ST) es in \<turnstile> compEs2 es, compxEs2 es 0 (length (ty E e # ST)) [::] \<tau>s \<and> last \<tau>s = ty\<^sub>i' (rev Ts @ ty E e # ST) E (A \<squnion> \ e \<squnion> \s es); P,E \<turnstile>1 e\<bullet>M(es) :: T; \<D> (e\<bullet>M(es)) A; \ (e\<bullet>M(es)) (length E); length ST + max_stack (e\<bullet>M(es)) \<le> mxs; length E + max_vars (e\<bullet>M(es)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>M(es)), compxE2 (e\<bullet>M(es)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>M(es)) @ [after E A ST (e\<bullet>M(es))]
 10. \<And>E A ST i T e Ta. \<lbrakk>\<And>Ta. \<lbrakk>P,E @ [T] \<turnstile>1 e :: Ta; \<D> e (A \<ominus> i); \ e (length (E @ [T])); length ST + max_stack e \<le> mxs; length (E @ [T]) + max_vars e \<le> mxl; set (E @ [T]) \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST (E @ [T]) (A \<ominus> i) # compT (E @ [T]) (A \<ominus> i) ST e @ [after (E @ [T]) (A \<ominus> i) ST e]; P,E \<turnstile>1 {i:T=None; e} :: Ta; \<D> {i:T=None; e} A; \ {i:T=None; e} (length E); length ST + max_stack {i:T=None; e} \<le> mxs; length E + max_vars {i:T=None; e} \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 {i:T=None; e}, compxE2 {i:T=None; e} 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST {i:T=None; e} @ [after E A ST {i:T=None; e}]
A total of 17 subgoals...
[PROOF STEP]
have "\<dots> = ty\<^sub>i' (T # ST) E (A \<squnion> \ e)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. ty\<^sub>i' (T # ST) (E @ [Ti]) (A \<squnion> \ e \<ominus> length E) = ty\<^sub>i' (T # ST) E (A \<squnion> \ e)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
ty\<^sub>i' (T # ST) (E @ [Ti]) (A \<squnion> \ e \<ominus> length E) = ty\<^sub>i' (T # ST) E (A \<squnion> \ e)

goal (17 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 3. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 4. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 5. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 6. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 7. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
 8. \<And>E A ST e1 D F e2 e3 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; \<And>T. \<lbrakk>P,E \<turnstile>1 e3 :: T; \<D> e3 (A \<squnion> \ e1 \<squnion> \ e2); \ e3 (length E); length (ty E e2 # ty E e1 # ST) + max_stack e3 \<le> mxs; length E + max_vars e3 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e3, compxE2 e3 0 (length (ty E e2 # ty E e1 # ST)) [::] ty\<^sub>i' (ty E e2 # ty E e1 # ST) E (A \<squnion> \ e1 \<squnion> \ e2) # compT E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3 @ [after E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3]; P,E \<turnstile>1 e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3) :: T; \<D> (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) A; \ (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (length E); length ST + max_stack (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxs; length E + max_vars (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)), compxE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) @ [after E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3))]
 9. \<And>E A ST e M es T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; \<And>Ts. \<lbrakk>P,E \<turnstile>1 es [::] Ts; \<D>s es (A \<squnion> \ e); \s es (length E); length (ty E e # ST) + max_stacks es \<le> mxs; length E + max_varss es \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> let \<tau>s = ty\<^sub>i' (ty E e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (ty E e # ST) es in \<turnstile> compEs2 es, compxEs2 es 0 (length (ty E e # ST)) [::] \<tau>s \<and> last \<tau>s = ty\<^sub>i' (rev Ts @ ty E e # ST) E (A \<squnion> \ e \<squnion> \s es); P,E \<turnstile>1 e\<bullet>M(es) :: T; \<D> (e\<bullet>M(es)) A; \ (e\<bullet>M(es)) (length E); length ST + max_stack (e\<bullet>M(es)) \<le> mxs; length E + max_vars (e\<bullet>M(es)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>M(es)), compxE2 (e\<bullet>M(es)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>M(es)) @ [after E A ST (e\<bullet>M(es))]
 10. \<And>E A ST i T e Ta. \<lbrakk>\<And>Ta. \<lbrakk>P,E @ [T] \<turnstile>1 e :: Ta; \<D> e (A \<ominus> i); \ e (length (E @ [T])); length ST + max_stack e \<le> mxs; length (E @ [T]) + max_vars e \<le> mxl; set (E @ [T]) \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST (E @ [T]) (A \<ominus> i) # compT (E @ [T]) (A \<ominus> i) ST e @ [after (E @ [T]) (A \<ominus> i) ST e]; P,E \<turnstile>1 {i:T=None; e} :: Ta; \<D> {i:T=None; e} A; \ {i:T=None; e} (length E); length ST + max_stack {i:T=None; e} \<le> mxs; length E + max_vars {i:T=None; e} \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 {i:T=None; e}, compxE2 {i:T=None; e} 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST {i:T=None; e} @ [after E A ST {i:T=None; e}]
A total of 17 subgoals...
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
ty\<^sub>i' (T # ST) (E @ [Ti]) (A \<squnion> \ e \<ominus> length E) = ty\<^sub>i' (T # ST) E (A \<squnion> \ e)

goal (17 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 3. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 4. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 5. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 6. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 7. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
 8. \<And>E A ST e1 D F e2 e3 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; \<And>T. \<lbrakk>P,E \<turnstile>1 e3 :: T; \<D> e3 (A \<squnion> \ e1 \<squnion> \ e2); \ e3 (length E); length (ty E e2 # ty E e1 # ST) + max_stack e3 \<le> mxs; length E + max_vars e3 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e3, compxE2 e3 0 (length (ty E e2 # ty E e1 # ST)) [::] ty\<^sub>i' (ty E e2 # ty E e1 # ST) E (A \<squnion> \ e1 \<squnion> \ e2) # compT E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3 @ [after E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3]; P,E \<turnstile>1 e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3) :: T; \<D> (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) A; \ (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (length E); length ST + max_stack (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxs; length E + max_vars (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)), compxE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) @ [after E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3))]
 9. \<And>E A ST e M es T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; \<And>Ts. \<lbrakk>P,E \<turnstile>1 es [::] Ts; \<D>s es (A \<squnion> \ e); \s es (length E); length (ty E e # ST) + max_stacks es \<le> mxs; length E + max_varss es \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> let \<tau>s = ty\<^sub>i' (ty E e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (ty E e # ST) es in \<turnstile> compEs2 es, compxEs2 es 0 (length (ty E e # ST)) [::] \<tau>s \<and> last \<tau>s = ty\<^sub>i' (rev Ts @ ty E e # ST) E (A \<squnion> \ e \<squnion> \s es); P,E \<turnstile>1 e\<bullet>M(es) :: T; \<D> (e\<bullet>M(es)) A; \ (e\<bullet>M(es)) (length E); length ST + max_stack (e\<bullet>M(es)) \<le> mxs; length E + max_vars (e\<bullet>M(es)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>M(es)), compxE2 (e\<bullet>M(es)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>M(es)) @ [after E A ST (e\<bullet>M(es))]
 10. \<And>E A ST i T e Ta. \<lbrakk>\<And>Ta. \<lbrakk>P,E @ [T] \<turnstile>1 e :: Ta; \<D> e (A \<ominus> i); \ e (length (E @ [T])); length ST + max_stack e \<le> mxs; length (E @ [T]) + max_vars e \<le> mxl; set (E @ [T]) \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST (E @ [T]) (A \<ominus> i) # compT (E @ [T]) (A \<ominus> i) ST e @ [after (E @ [T]) (A \<ominus> i) ST e]; P,E \<turnstile>1 {i:T=None; e} :: Ta; \<D> {i:T=None; e} A; \ {i:T=None; e} (length E); length ST + max_stack {i:T=None; e} \<le> mxs; length E + max_vars {i:T=None; e} \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 {i:T=None; e}, compxE2 {i:T=None; e} 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST {i:T=None; e} @ [after E A ST {i:T=None; e}]
A total of 17 subgoals...
[PROOF STEP]
have "P \<turnstile> \<dots> \<le>' ty\<^sub>i' (T # ST) E (A \<squnion> (\ e \<ominus> i))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. P \<turnstile> ty\<^sub>i' (T # ST) E (A \<squnion> \ e) \<le>' ty\<^sub>i' (T # ST) E (A \<squnion> (\ e \<ominus> i))
[PROOF STEP]
by(auto simp add:hyperset_defs intro: ty\<^sub>i'_antimono)
[PROOF STATE]
proof (state)
this:
P \<turnstile> ty\<^sub>i' (T # ST) E (A \<squnion> \ e) \<le>' ty\<^sub>i' (T # ST) E (A \<squnion> (\ e \<ominus> i))

goal (17 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 3. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 4. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 5. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 6. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 7. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
 8. \<And>E A ST e1 D F e2 e3 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; \<And>T. \<lbrakk>P,E \<turnstile>1 e3 :: T; \<D> e3 (A \<squnion> \ e1 \<squnion> \ e2); \ e3 (length E); length (ty E e2 # ty E e1 # ST) + max_stack e3 \<le> mxs; length E + max_vars e3 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e3, compxE2 e3 0 (length (ty E e2 # ty E e1 # ST)) [::] ty\<^sub>i' (ty E e2 # ty E e1 # ST) E (A \<squnion> \ e1 \<squnion> \ e2) # compT E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3 @ [after E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3]; P,E \<turnstile>1 e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3) :: T; \<D> (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) A; \ (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (length E); length ST + max_stack (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxs; length E + max_vars (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)), compxE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) @ [after E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3))]
 9. \<And>E A ST e M es T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; \<And>Ts. \<lbrakk>P,E \<turnstile>1 es [::] Ts; \<D>s es (A \<squnion> \ e); \s es (length E); length (ty E e # ST) + max_stacks es \<le> mxs; length E + max_varss es \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> let \<tau>s = ty\<^sub>i' (ty E e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (ty E e # ST) es in \<turnstile> compEs2 es, compxEs2 es 0 (length (ty E e # ST)) [::] \<tau>s \<and> last \<tau>s = ty\<^sub>i' (rev Ts @ ty E e # ST) E (A \<squnion> \ e \<squnion> \s es); P,E \<turnstile>1 e\<bullet>M(es) :: T; \<D> (e\<bullet>M(es)) A; \ (e\<bullet>M(es)) (length E); length ST + max_stack (e\<bullet>M(es)) \<le> mxs; length E + max_vars (e\<bullet>M(es)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>M(es)), compxE2 (e\<bullet>M(es)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>M(es)) @ [after E A ST (e\<bullet>M(es))]
 10. \<And>E A ST i T e Ta. \<lbrakk>\<And>Ta. \<lbrakk>P,E @ [T] \<turnstile>1 e :: Ta; \<D> e (A \<ominus> i); \ e (length (E @ [T])); length ST + max_stack e \<le> mxs; length (E @ [T]) + max_vars e \<le> mxl; set (E @ [T]) \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST (E @ [T]) (A \<ominus> i) # compT (E @ [T]) (A \<ominus> i) ST e @ [after (E @ [T]) (A \<ominus> i) ST e]; P,E \<turnstile>1 {i:T=None; e} :: Ta; \<D> {i:T=None; e} A; \ {i:T=None; e} (length E); length ST + max_stack {i:T=None; e} \<le> mxs; length E + max_vars {i:T=None; e} \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 {i:T=None; e}, compxE2 {i:T=None; e} 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST {i:T=None; e} @ [after E A ST {i:T=None; e}]
A total of 17 subgoals...
[PROOF STEP]
finally
[PROOF STATE]
proof (chain)
picking this:
\<turnstile> compE2 e, compxE2 e 0 (length ST) [::] (ty\<^sub>i' ST E A # compT (E @ [Ti]) (A \<ominus> i) ST e) @ [ty\<^sub>i' (T # ST) E (A \<squnion> (\ e \<ominus> i))]
[PROOF STEP]
show ?case
[PROOF STATE]
proof (prove)
using this:
\<turnstile> compE2 e, compxE2 e 0 (length ST) [::] (ty\<^sub>i' ST E A # compT (E @ [Ti]) (A \<ominus> i) ST e) @ [ty\<^sub>i' (T # ST) E (A \<squnion> (\ e \<ominus> i))]

goal (1 subgoal):
 1. \<turnstile> compE2 {i:Ti=None; e}, compxE2 {i:Ti=None; e} 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST {i:Ti=None; e} @ [after E A ST {i:Ti=None; e}]
[PROOF STEP]
using BlockNone.prems
[PROOF STATE]
proof (prove)
using this:
\<turnstile> compE2 e, compxE2 e 0 (length ST) [::] (ty\<^sub>i' ST E A # compT (E @ [Ti]) (A \<ominus> i) ST e) @ [ty\<^sub>i' (T # ST) E (A \<squnion> (\ e \<ominus> i))]
P,E \<turnstile>1 {i:Ti=None; e} :: T
\<D> {i:Ti=None; e} A
\ {i:Ti=None; e} (length E)
length ST + max_stack {i:Ti=None; e} \<le> mxs
length E + max_vars {i:Ti=None; e} \<le> mxl
set E \<subseteq> types P

goal (1 subgoal):
 1. \<turnstile> compE2 {i:Ti=None; e}, compxE2 {i:Ti=None; e} 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST {i:Ti=None; e} @ [after E A ST {i:Ti=None; e}]
[PROOF STEP]
by(simp add: after_def)
[PROOF STATE]
proof (state)
this:
\<turnstile> compE2 {i:Ti=None; e}, compxE2 {i:Ti=None; e} 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST {i:Ti=None; e} @ [after E A ST {i:Ti=None; e}]

goal (16 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 3. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 4. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 5. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 6. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 7. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
 8. \<And>E A ST e1 D F e2 e3 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; \<And>T. \<lbrakk>P,E \<turnstile>1 e3 :: T; \<D> e3 (A \<squnion> \ e1 \<squnion> \ e2); \ e3 (length E); length (ty E e2 # ty E e1 # ST) + max_stack e3 \<le> mxs; length E + max_vars e3 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e3, compxE2 e3 0 (length (ty E e2 # ty E e1 # ST)) [::] ty\<^sub>i' (ty E e2 # ty E e1 # ST) E (A \<squnion> \ e1 \<squnion> \ e2) # compT E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3 @ [after E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3]; P,E \<turnstile>1 e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3) :: T; \<D> (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) A; \ (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (length E); length ST + max_stack (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxs; length E + max_vars (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)), compxE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) @ [after E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3))]
 9. \<And>E A ST e M es T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; \<And>Ts. \<lbrakk>P,E \<turnstile>1 es [::] Ts; \<D>s es (A \<squnion> \ e); \s es (length E); length (ty E e # ST) + max_stacks es \<le> mxs; length E + max_varss es \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> let \<tau>s = ty\<^sub>i' (ty E e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (ty E e # ST) es in \<turnstile> compEs2 es, compxEs2 es 0 (length (ty E e # ST)) [::] \<tau>s \<and> last \<tau>s = ty\<^sub>i' (rev Ts @ ty E e # ST) E (A \<squnion> \ e \<squnion> \s es); P,E \<turnstile>1 e\<bullet>M(es) :: T; \<D> (e\<bullet>M(es)) A; \ (e\<bullet>M(es)) (length E); length ST + max_stack (e\<bullet>M(es)) \<le> mxs; length E + max_vars (e\<bullet>M(es)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>M(es)), compxE2 (e\<bullet>M(es)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>M(es)) @ [after E A ST (e\<bullet>M(es))]
 10. \<And>E A ST i T v e Ta. \<lbrakk>\<And>Ta. \<lbrakk>P,E @ [T] \<turnstile>1 e :: Ta; \<D> e (A \<squnion> \<lfloor>{i}\<rfloor>); \ e (length (E @ [T])); length ST + max_stack e \<le> mxs; length (E @ [T]) + max_vars e \<le> mxl; set (E @ [T]) \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e @ [after (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e]; P,E \<turnstile>1 {i:T=\<lfloor>v\<rfloor>; e} :: Ta; \<D> {i:T=\<lfloor>v\<rfloor>; e} A; \ {i:T=\<lfloor>v\<rfloor>; e} (length E); length ST + max_stack {i:T=\<lfloor>v\<rfloor>; e} \<le> mxs; length E + max_vars {i:T=\<lfloor>v\<rfloor>; e} \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 {i:T=\<lfloor>v\<rfloor>; e}, compxE2 {i:T=\<lfloor>v\<rfloor>; e} 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST {i:T=\<lfloor>v\<rfloor>; e} @ [after E A ST {i:T=\<lfloor>v\<rfloor>; e}]
A total of 16 subgoals...
[PROOF STEP]
next
[PROOF STATE]
proof (state)
goal (16 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 3. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 4. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 5. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 6. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 7. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
 8. \<And>E A ST e1 D F e2 e3 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; \<And>T. \<lbrakk>P,E \<turnstile>1 e3 :: T; \<D> e3 (A \<squnion> \ e1 \<squnion> \ e2); \ e3 (length E); length (ty E e2 # ty E e1 # ST) + max_stack e3 \<le> mxs; length E + max_vars e3 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e3, compxE2 e3 0 (length (ty E e2 # ty E e1 # ST)) [::] ty\<^sub>i' (ty E e2 # ty E e1 # ST) E (A \<squnion> \ e1 \<squnion> \ e2) # compT E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3 @ [after E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3]; P,E \<turnstile>1 e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3) :: T; \<D> (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) A; \ (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (length E); length ST + max_stack (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxs; length E + max_vars (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)), compxE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) @ [after E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3))]
 9. \<And>E A ST e M es T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; \<And>Ts. \<lbrakk>P,E \<turnstile>1 es [::] Ts; \<D>s es (A \<squnion> \ e); \s es (length E); length (ty E e # ST) + max_stacks es \<le> mxs; length E + max_varss es \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> let \<tau>s = ty\<^sub>i' (ty E e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (ty E e # ST) es in \<turnstile> compEs2 es, compxEs2 es 0 (length (ty E e # ST)) [::] \<tau>s \<and> last \<tau>s = ty\<^sub>i' (rev Ts @ ty E e # ST) E (A \<squnion> \ e \<squnion> \s es); P,E \<turnstile>1 e\<bullet>M(es) :: T; \<D> (e\<bullet>M(es)) A; \ (e\<bullet>M(es)) (length E); length ST + max_stack (e\<bullet>M(es)) \<le> mxs; length E + max_vars (e\<bullet>M(es)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>M(es)), compxE2 (e\<bullet>M(es)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>M(es)) @ [after E A ST (e\<bullet>M(es))]
 10. \<And>E A ST i T v e Ta. \<lbrakk>\<And>Ta. \<lbrakk>P,E @ [T] \<turnstile>1 e :: Ta; \<D> e (A \<squnion> \<lfloor>{i}\<rfloor>); \ e (length (E @ [T])); length ST + max_stack e \<le> mxs; length (E @ [T]) + max_vars e \<le> mxl; set (E @ [T]) \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e @ [after (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e]; P,E \<turnstile>1 {i:T=\<lfloor>v\<rfloor>; e} :: Ta; \<D> {i:T=\<lfloor>v\<rfloor>; e} A; \ {i:T=\<lfloor>v\<rfloor>; e} (length E); length ST + max_stack {i:T=\<lfloor>v\<rfloor>; e} \<le> mxs; length E + max_vars {i:T=\<lfloor>v\<rfloor>; e} \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 {i:T=\<lfloor>v\<rfloor>; e}, compxE2 {i:T=\<lfloor>v\<rfloor>; e} 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST {i:T=\<lfloor>v\<rfloor>; e} @ [after E A ST {i:T=\<lfloor>v\<rfloor>; e}]
A total of 16 subgoals...
[PROOF STEP]
case (BlockSome E A ST i Ti v e)
[PROOF STATE]
proof (state)
this:
\<lbrakk>P,E @ [Ti] \<turnstile>1 e :: ?T1; \<D> e (A \<squnion> \<lfloor>{i}\<rfloor>); \ e (length (E @ [Ti])); length ST + max_stack e \<le> mxs; length (E @ [Ti]) + max_vars e \<le> mxl; set (E @ [Ti]) \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST (E @ [Ti]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Ti]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e @ [after (E @ [Ti]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e]
P,E \<turnstile>1 {i:Ti=\<lfloor>v\<rfloor>; e} :: T
\<D> {i:Ti=\<lfloor>v\<rfloor>; e} A
\ {i:Ti=\<lfloor>v\<rfloor>; e} (length E)
length ST + max_stack {i:Ti=\<lfloor>v\<rfloor>; e} \<le> mxs
length E + max_vars {i:Ti=\<lfloor>v\<rfloor>; e} \<le> mxl
set E \<subseteq> types P

goal (16 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 3. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 4. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 5. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 6. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 7. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
 8. \<And>E A ST e1 D F e2 e3 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; \<And>T. \<lbrakk>P,E \<turnstile>1 e3 :: T; \<D> e3 (A \<squnion> \ e1 \<squnion> \ e2); \ e3 (length E); length (ty E e2 # ty E e1 # ST) + max_stack e3 \<le> mxs; length E + max_vars e3 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e3, compxE2 e3 0 (length (ty E e2 # ty E e1 # ST)) [::] ty\<^sub>i' (ty E e2 # ty E e1 # ST) E (A \<squnion> \ e1 \<squnion> \ e2) # compT E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3 @ [after E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3]; P,E \<turnstile>1 e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3) :: T; \<D> (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) A; \ (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (length E); length ST + max_stack (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxs; length E + max_vars (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)), compxE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) @ [after E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3))]
 9. \<And>E A ST e M es T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; \<And>Ts. \<lbrakk>P,E \<turnstile>1 es [::] Ts; \<D>s es (A \<squnion> \ e); \s es (length E); length (ty E e # ST) + max_stacks es \<le> mxs; length E + max_varss es \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> let \<tau>s = ty\<^sub>i' (ty E e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (ty E e # ST) es in \<turnstile> compEs2 es, compxEs2 es 0 (length (ty E e # ST)) [::] \<tau>s \<and> last \<tau>s = ty\<^sub>i' (rev Ts @ ty E e # ST) E (A \<squnion> \ e \<squnion> \s es); P,E \<turnstile>1 e\<bullet>M(es) :: T; \<D> (e\<bullet>M(es)) A; \ (e\<bullet>M(es)) (length E); length ST + max_stack (e\<bullet>M(es)) \<le> mxs; length E + max_vars (e\<bullet>M(es)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>M(es)), compxE2 (e\<bullet>M(es)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>M(es)) @ [after E A ST (e\<bullet>M(es))]
 10. \<And>E A ST i T v e Ta. \<lbrakk>\<And>Ta. \<lbrakk>P,E @ [T] \<turnstile>1 e :: Ta; \<D> e (A \<squnion> \<lfloor>{i}\<rfloor>); \ e (length (E @ [T])); length ST + max_stack e \<le> mxs; length (E @ [T]) + max_vars e \<le> mxl; set (E @ [T]) \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e @ [after (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e]; P,E \<turnstile>1 {i:T=\<lfloor>v\<rfloor>; e} :: Ta; \<D> {i:T=\<lfloor>v\<rfloor>; e} A; \ {i:T=\<lfloor>v\<rfloor>; e} (length E); length ST + max_stack {i:T=\<lfloor>v\<rfloor>; e} \<le> mxs; length E + max_vars {i:T=\<lfloor>v\<rfloor>; e} \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 {i:T=\<lfloor>v\<rfloor>; e}, compxE2 {i:T=\<lfloor>v\<rfloor>; e} 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST {i:T=\<lfloor>v\<rfloor>; e} @ [after E A ST {i:T=\<lfloor>v\<rfloor>; e}]
A total of 16 subgoals...
[PROOF STEP]
from \<open>P,E \<turnstile>1 {i:Ti=\<lfloor>v\<rfloor>; e} :: T\<close>
[PROOF STATE]
proof (chain)
picking this:
P,E \<turnstile>1 {i:Ti=\<lfloor>v\<rfloor>; e} :: T
[PROOF STEP]
obtain Tv
    where Tv: "P,E \<turnstile>1 Val v :: Tv" "P \<turnstile> Tv \<le> Ti"
    and wte: "P,E@[Ti] \<turnstile>1 e :: T"
    and Ti: "is_type P Ti"
[PROOF STATE]
proof (prove)
using this:
P,E \<turnstile>1 {i:Ti=\<lfloor>v\<rfloor>; e} :: T

goal (1 subgoal):
 1. (\<And>Tv. \<lbrakk>P,E \<turnstile>1 Val v :: Tv; P \<turnstile> Tv \<le> Ti; P,E @ [Ti] \<turnstile>1 e :: T; is_type P Ti\<rbrakk> \<Longrightarrow> thesis) \<Longrightarrow> thesis
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
P,E \<turnstile>1 Val v :: Tv
P \<turnstile> Tv \<le> Ti
P,E @ [Ti] \<turnstile>1 e :: T
is_type P Ti

goal (16 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 3. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 4. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 5. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 6. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 7. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
 8. \<And>E A ST e1 D F e2 e3 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; \<And>T. \<lbrakk>P,E \<turnstile>1 e3 :: T; \<D> e3 (A \<squnion> \ e1 \<squnion> \ e2); \ e3 (length E); length (ty E e2 # ty E e1 # ST) + max_stack e3 \<le> mxs; length E + max_vars e3 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e3, compxE2 e3 0 (length (ty E e2 # ty E e1 # ST)) [::] ty\<^sub>i' (ty E e2 # ty E e1 # ST) E (A \<squnion> \ e1 \<squnion> \ e2) # compT E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3 @ [after E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3]; P,E \<turnstile>1 e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3) :: T; \<D> (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) A; \ (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (length E); length ST + max_stack (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxs; length E + max_vars (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)), compxE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) @ [after E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3))]
 9. \<And>E A ST e M es T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; \<And>Ts. \<lbrakk>P,E \<turnstile>1 es [::] Ts; \<D>s es (A \<squnion> \ e); \s es (length E); length (ty E e # ST) + max_stacks es \<le> mxs; length E + max_varss es \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> let \<tau>s = ty\<^sub>i' (ty E e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (ty E e # ST) es in \<turnstile> compEs2 es, compxEs2 es 0 (length (ty E e # ST)) [::] \<tau>s \<and> last \<tau>s = ty\<^sub>i' (rev Ts @ ty E e # ST) E (A \<squnion> \ e \<squnion> \s es); P,E \<turnstile>1 e\<bullet>M(es) :: T; \<D> (e\<bullet>M(es)) A; \ (e\<bullet>M(es)) (length E); length ST + max_stack (e\<bullet>M(es)) \<le> mxs; length E + max_vars (e\<bullet>M(es)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>M(es)), compxE2 (e\<bullet>M(es)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>M(es)) @ [after E A ST (e\<bullet>M(es))]
 10. \<And>E A ST i T v e Ta. \<lbrakk>\<And>Ta. \<lbrakk>P,E @ [T] \<turnstile>1 e :: Ta; \<D> e (A \<squnion> \<lfloor>{i}\<rfloor>); \ e (length (E @ [T])); length ST + max_stack e \<le> mxs; length (E @ [T]) + max_vars e \<le> mxl; set (E @ [T]) \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e @ [after (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e]; P,E \<turnstile>1 {i:T=\<lfloor>v\<rfloor>; e} :: Ta; \<D> {i:T=\<lfloor>v\<rfloor>; e} A; \ {i:T=\<lfloor>v\<rfloor>; e} (length E); length ST + max_stack {i:T=\<lfloor>v\<rfloor>; e} \<le> mxs; length E + max_vars {i:T=\<lfloor>v\<rfloor>; e} \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 {i:T=\<lfloor>v\<rfloor>; e}, compxE2 {i:T=\<lfloor>v\<rfloor>; e} 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST {i:T=\<lfloor>v\<rfloor>; e} @ [after E A ST {i:T=\<lfloor>v\<rfloor>; e}]
A total of 16 subgoals...
[PROOF STEP]
from \<open>length ST + max_stack {i:Ti=\<lfloor>v\<rfloor>; e} \<le> mxs\<close>
[PROOF STATE]
proof (chain)
picking this:
length ST + max_stack {i:Ti=\<lfloor>v\<rfloor>; e} \<le> mxs
[PROOF STEP]
have lenST: "length ST + max_stack e \<le> mxs"
[PROOF STATE]
proof (prove)
using this:
length ST + max_stack {i:Ti=\<lfloor>v\<rfloor>; e} \<le> mxs

goal (1 subgoal):
 1. length ST + max_stack e \<le> mxs
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
length ST + max_stack e \<le> mxs

goal (16 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 3. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 4. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 5. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 6. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 7. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
 8. \<And>E A ST e1 D F e2 e3 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; \<And>T. \<lbrakk>P,E \<turnstile>1 e3 :: T; \<D> e3 (A \<squnion> \ e1 \<squnion> \ e2); \ e3 (length E); length (ty E e2 # ty E e1 # ST) + max_stack e3 \<le> mxs; length E + max_vars e3 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e3, compxE2 e3 0 (length (ty E e2 # ty E e1 # ST)) [::] ty\<^sub>i' (ty E e2 # ty E e1 # ST) E (A \<squnion> \ e1 \<squnion> \ e2) # compT E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3 @ [after E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3]; P,E \<turnstile>1 e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3) :: T; \<D> (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) A; \ (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (length E); length ST + max_stack (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxs; length E + max_vars (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)), compxE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) @ [after E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3))]
 9. \<And>E A ST e M es T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; \<And>Ts. \<lbrakk>P,E \<turnstile>1 es [::] Ts; \<D>s es (A \<squnion> \ e); \s es (length E); length (ty E e # ST) + max_stacks es \<le> mxs; length E + max_varss es \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> let \<tau>s = ty\<^sub>i' (ty E e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (ty E e # ST) es in \<turnstile> compEs2 es, compxEs2 es 0 (length (ty E e # ST)) [::] \<tau>s \<and> last \<tau>s = ty\<^sub>i' (rev Ts @ ty E e # ST) E (A \<squnion> \ e \<squnion> \s es); P,E \<turnstile>1 e\<bullet>M(es) :: T; \<D> (e\<bullet>M(es)) A; \ (e\<bullet>M(es)) (length E); length ST + max_stack (e\<bullet>M(es)) \<le> mxs; length E + max_vars (e\<bullet>M(es)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>M(es)), compxE2 (e\<bullet>M(es)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>M(es)) @ [after E A ST (e\<bullet>M(es))]
 10. \<And>E A ST i T v e Ta. \<lbrakk>\<And>Ta. \<lbrakk>P,E @ [T] \<turnstile>1 e :: Ta; \<D> e (A \<squnion> \<lfloor>{i}\<rfloor>); \ e (length (E @ [T])); length ST + max_stack e \<le> mxs; length (E @ [T]) + max_vars e \<le> mxl; set (E @ [T]) \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e @ [after (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e]; P,E \<turnstile>1 {i:T=\<lfloor>v\<rfloor>; e} :: Ta; \<D> {i:T=\<lfloor>v\<rfloor>; e} A; \ {i:T=\<lfloor>v\<rfloor>; e} (length E); length ST + max_stack {i:T=\<lfloor>v\<rfloor>; e} \<le> mxs; length E + max_vars {i:T=\<lfloor>v\<rfloor>; e} \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 {i:T=\<lfloor>v\<rfloor>; e}, compxE2 {i:T=\<lfloor>v\<rfloor>; e} 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST {i:T=\<lfloor>v\<rfloor>; e} @ [after E A ST {i:T=\<lfloor>v\<rfloor>; e}]
A total of 16 subgoals...
[PROOF STEP]
from \<open>length E + max_vars {i:Ti=\<lfloor>v\<rfloor>; e} \<le> mxl\<close>
[PROOF STATE]
proof (chain)
picking this:
length E + max_vars {i:Ti=\<lfloor>v\<rfloor>; e} \<le> mxl
[PROOF STEP]
have lenE: "length (E@[Ti]) + max_vars e \<le> mxl"
[PROOF STATE]
proof (prove)
using this:
length E + max_vars {i:Ti=\<lfloor>v\<rfloor>; e} \<le> mxl

goal (1 subgoal):
 1. length (E @ [Ti]) + max_vars e \<le> mxl
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
length (E @ [Ti]) + max_vars e \<le> mxl

goal (16 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 3. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 4. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 5. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 6. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 7. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
 8. \<And>E A ST e1 D F e2 e3 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; \<And>T. \<lbrakk>P,E \<turnstile>1 e3 :: T; \<D> e3 (A \<squnion> \ e1 \<squnion> \ e2); \ e3 (length E); length (ty E e2 # ty E e1 # ST) + max_stack e3 \<le> mxs; length E + max_vars e3 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e3, compxE2 e3 0 (length (ty E e2 # ty E e1 # ST)) [::] ty\<^sub>i' (ty E e2 # ty E e1 # ST) E (A \<squnion> \ e1 \<squnion> \ e2) # compT E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3 @ [after E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3]; P,E \<turnstile>1 e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3) :: T; \<D> (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) A; \ (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (length E); length ST + max_stack (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxs; length E + max_vars (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)), compxE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) @ [after E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3))]
 9. \<And>E A ST e M es T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; \<And>Ts. \<lbrakk>P,E \<turnstile>1 es [::] Ts; \<D>s es (A \<squnion> \ e); \s es (length E); length (ty E e # ST) + max_stacks es \<le> mxs; length E + max_varss es \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> let \<tau>s = ty\<^sub>i' (ty E e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (ty E e # ST) es in \<turnstile> compEs2 es, compxEs2 es 0 (length (ty E e # ST)) [::] \<tau>s \<and> last \<tau>s = ty\<^sub>i' (rev Ts @ ty E e # ST) E (A \<squnion> \ e \<squnion> \s es); P,E \<turnstile>1 e\<bullet>M(es) :: T; \<D> (e\<bullet>M(es)) A; \ (e\<bullet>M(es)) (length E); length ST + max_stack (e\<bullet>M(es)) \<le> mxs; length E + max_vars (e\<bullet>M(es)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>M(es)), compxE2 (e\<bullet>M(es)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>M(es)) @ [after E A ST (e\<bullet>M(es))]
 10. \<And>E A ST i T v e Ta. \<lbrakk>\<And>Ta. \<lbrakk>P,E @ [T] \<turnstile>1 e :: Ta; \<D> e (A \<squnion> \<lfloor>{i}\<rfloor>); \ e (length (E @ [T])); length ST + max_stack e \<le> mxs; length (E @ [T]) + max_vars e \<le> mxl; set (E @ [T]) \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e @ [after (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e]; P,E \<turnstile>1 {i:T=\<lfloor>v\<rfloor>; e} :: Ta; \<D> {i:T=\<lfloor>v\<rfloor>; e} A; \ {i:T=\<lfloor>v\<rfloor>; e} (length E); length ST + max_stack {i:T=\<lfloor>v\<rfloor>; e} \<le> mxs; length E + max_vars {i:T=\<lfloor>v\<rfloor>; e} \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 {i:T=\<lfloor>v\<rfloor>; e}, compxE2 {i:T=\<lfloor>v\<rfloor>; e} 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST {i:T=\<lfloor>v\<rfloor>; e} @ [after E A ST {i:T=\<lfloor>v\<rfloor>; e}]
A total of 16 subgoals...
[PROOF STEP]
from \<open>\ {i:Ti=\<lfloor>v\<rfloor>; e} (length E)\<close>
[PROOF STATE]
proof (chain)
picking this:
\ {i:Ti=\<lfloor>v\<rfloor>; e} (length E)
[PROOF STEP]
have [simp]: "i = length E"
    and B: "\ e (length (E@[Ti]))"
[PROOF STATE]
proof (prove)
using this:
\ {i:Ti=\<lfloor>v\<rfloor>; e} (length E)

goal (1 subgoal):
 1. i = length E &&& \ e (length (E @ [Ti]))
[PROOF STEP]
by auto
[PROOF STATE]
proof (state)
this:
i = length E
\ e (length (E @ [Ti]))

goal (16 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 3. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 4. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 5. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 6. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 7. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
 8. \<And>E A ST e1 D F e2 e3 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; \<And>T. \<lbrakk>P,E \<turnstile>1 e3 :: T; \<D> e3 (A \<squnion> \ e1 \<squnion> \ e2); \ e3 (length E); length (ty E e2 # ty E e1 # ST) + max_stack e3 \<le> mxs; length E + max_vars e3 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e3, compxE2 e3 0 (length (ty E e2 # ty E e1 # ST)) [::] ty\<^sub>i' (ty E e2 # ty E e1 # ST) E (A \<squnion> \ e1 \<squnion> \ e2) # compT E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3 @ [after E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3]; P,E \<turnstile>1 e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3) :: T; \<D> (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) A; \ (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (length E); length ST + max_stack (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxs; length E + max_vars (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)), compxE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) @ [after E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3))]
 9. \<And>E A ST e M es T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; \<And>Ts. \<lbrakk>P,E \<turnstile>1 es [::] Ts; \<D>s es (A \<squnion> \ e); \s es (length E); length (ty E e # ST) + max_stacks es \<le> mxs; length E + max_varss es \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> let \<tau>s = ty\<^sub>i' (ty E e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (ty E e # ST) es in \<turnstile> compEs2 es, compxEs2 es 0 (length (ty E e # ST)) [::] \<tau>s \<and> last \<tau>s = ty\<^sub>i' (rev Ts @ ty E e # ST) E (A \<squnion> \ e \<squnion> \s es); P,E \<turnstile>1 e\<bullet>M(es) :: T; \<D> (e\<bullet>M(es)) A; \ (e\<bullet>M(es)) (length E); length ST + max_stack (e\<bullet>M(es)) \<le> mxs; length E + max_vars (e\<bullet>M(es)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>M(es)), compxE2 (e\<bullet>M(es)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>M(es)) @ [after E A ST (e\<bullet>M(es))]
 10. \<And>E A ST i T v e Ta. \<lbrakk>\<And>Ta. \<lbrakk>P,E @ [T] \<turnstile>1 e :: Ta; \<D> e (A \<squnion> \<lfloor>{i}\<rfloor>); \ e (length (E @ [T])); length ST + max_stack e \<le> mxs; length (E @ [T]) + max_vars e \<le> mxl; set (E @ [T]) \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e @ [after (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e]; P,E \<turnstile>1 {i:T=\<lfloor>v\<rfloor>; e} :: Ta; \<D> {i:T=\<lfloor>v\<rfloor>; e} A; \ {i:T=\<lfloor>v\<rfloor>; e} (length E); length ST + max_stack {i:T=\<lfloor>v\<rfloor>; e} \<le> mxs; length E + max_vars {i:T=\<lfloor>v\<rfloor>; e} \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 {i:T=\<lfloor>v\<rfloor>; e}, compxE2 {i:T=\<lfloor>v\<rfloor>; e} 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST {i:T=\<lfloor>v\<rfloor>; e} @ [after E A ST {i:T=\<lfloor>v\<rfloor>; e}]
A total of 16 subgoals...
[PROOF STEP]
from BlockSome wte
[PROOF STATE]
proof (chain)
picking this:
\<lbrakk>P,E @ [Ti] \<turnstile>1 e :: ?T1; \<D> e (A \<squnion> \<lfloor>{i}\<rfloor>); \ e (length (E @ [Ti])); length ST + max_stack e \<le> mxs; length (E @ [Ti]) + max_vars e \<le> mxl; set (E @ [Ti]) \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST (E @ [Ti]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Ti]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e @ [after (E @ [Ti]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e]
P,E \<turnstile>1 {i:Ti=\<lfloor>v\<rfloor>; e} :: T
\<D> {i:Ti=\<lfloor>v\<rfloor>; e} A
\ {i:Ti=\<lfloor>v\<rfloor>; e} (length E)
length ST + max_stack {i:Ti=\<lfloor>v\<rfloor>; e} \<le> mxs
length E + max_vars {i:Ti=\<lfloor>v\<rfloor>; e} \<le> mxl
set E \<subseteq> types P
P,E @ [Ti] \<turnstile>1 e :: T
[PROOF STEP]
have "\<turnstile> compE2 e, compxE2 e 0 (size ST) [::] (ty\<^sub>i' ST (E @ [Ti]) (A \<squnion> \<lfloor>{length E}\<rfloor>) # compT (E @ [Ti]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e) @ [ty\<^sub>i' (T#ST) (E@[Ti]) (A \<squnion> \<lfloor>{size E}\<rfloor> \<squnion> \ e)]"
[PROOF STATE]
proof (prove)
using this:
\<lbrakk>P,E @ [Ti] \<turnstile>1 e :: ?T1; \<D> e (A \<squnion> \<lfloor>{i}\<rfloor>); \ e (length (E @ [Ti])); length ST + max_stack e \<le> mxs; length (E @ [Ti]) + max_vars e \<le> mxl; set (E @ [Ti]) \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST (E @ [Ti]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [Ti]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e @ [after (E @ [Ti]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e]
P,E \<turnstile>1 {i:Ti=\<lfloor>v\<rfloor>; e} :: T
\<D> {i:Ti=\<lfloor>v\<rfloor>; e} A
\ {i:Ti=\<lfloor>v\<rfloor>; e} (length E)
length ST + max_stack {i:Ti=\<lfloor>v\<rfloor>; e} \<le> mxs
length E + max_vars {i:Ti=\<lfloor>v\<rfloor>; e} \<le> mxl
set E \<subseteq> types P
P,E @ [Ti] \<turnstile>1 e :: T

goal (1 subgoal):
 1. \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] (ty\<^sub>i' ST (E @ [Ti]) (A \<squnion> \<lfloor>{length E}\<rfloor>) # compT (E @ [Ti]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e) @ [ty\<^sub>i' (T # ST) (E @ [Ti]) (A \<squnion> \<lfloor>{length E}\<rfloor> \<squnion> \ e)]
[PROOF STEP]
by(auto simp add: after_def)
[PROOF STATE]
proof (state)
this:
\<turnstile> compE2 e, compxE2 e 0 (length ST) [::] (ty\<^sub>i' ST (E @ [Ti]) (A \<squnion> \<lfloor>{length E}\<rfloor>) # compT (E @ [Ti]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e) @ [ty\<^sub>i' (T # ST) (E @ [Ti]) (A \<squnion> \<lfloor>{length E}\<rfloor> \<squnion> \ e)]

goal (16 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 3. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 4. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 5. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 6. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 7. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
 8. \<And>E A ST e1 D F e2 e3 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; \<And>T. \<lbrakk>P,E \<turnstile>1 e3 :: T; \<D> e3 (A \<squnion> \ e1 \<squnion> \ e2); \ e3 (length E); length (ty E e2 # ty E e1 # ST) + max_stack e3 \<le> mxs; length E + max_vars e3 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e3, compxE2 e3 0 (length (ty E e2 # ty E e1 # ST)) [::] ty\<^sub>i' (ty E e2 # ty E e1 # ST) E (A \<squnion> \ e1 \<squnion> \ e2) # compT E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3 @ [after E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3]; P,E \<turnstile>1 e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3) :: T; \<D> (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) A; \ (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (length E); length ST + max_stack (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxs; length E + max_vars (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)), compxE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) @ [after E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3))]
 9. \<And>E A ST e M es T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; \<And>Ts. \<lbrakk>P,E \<turnstile>1 es [::] Ts; \<D>s es (A \<squnion> \ e); \s es (length E); length (ty E e # ST) + max_stacks es \<le> mxs; length E + max_varss es \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> let \<tau>s = ty\<^sub>i' (ty E e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (ty E e # ST) es in \<turnstile> compEs2 es, compxEs2 es 0 (length (ty E e # ST)) [::] \<tau>s \<and> last \<tau>s = ty\<^sub>i' (rev Ts @ ty E e # ST) E (A \<squnion> \ e \<squnion> \s es); P,E \<turnstile>1 e\<bullet>M(es) :: T; \<D> (e\<bullet>M(es)) A; \ (e\<bullet>M(es)) (length E); length ST + max_stack (e\<bullet>M(es)) \<le> mxs; length E + max_vars (e\<bullet>M(es)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>M(es)), compxE2 (e\<bullet>M(es)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>M(es)) @ [after E A ST (e\<bullet>M(es))]
 10. \<And>E A ST i T v e Ta. \<lbrakk>\<And>Ta. \<lbrakk>P,E @ [T] \<turnstile>1 e :: Ta; \<D> e (A \<squnion> \<lfloor>{i}\<rfloor>); \ e (length (E @ [T])); length ST + max_stack e \<le> mxs; length (E @ [T]) + max_vars e \<le> mxl; set (E @ [T]) \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e @ [after (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e]; P,E \<turnstile>1 {i:T=\<lfloor>v\<rfloor>; e} :: Ta; \<D> {i:T=\<lfloor>v\<rfloor>; e} A; \ {i:T=\<lfloor>v\<rfloor>; e} (length E); length ST + max_stack {i:T=\<lfloor>v\<rfloor>; e} \<le> mxs; length E + max_vars {i:T=\<lfloor>v\<rfloor>; e} \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 {i:T=\<lfloor>v\<rfloor>; e}, compxE2 {i:T=\<lfloor>v\<rfloor>; e} 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST {i:T=\<lfloor>v\<rfloor>; e} @ [after E A ST {i:T=\<lfloor>v\<rfloor>; e}]
A total of 16 subgoals...
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
\<turnstile> compE2 e, compxE2 e 0 (length ST) [::] (ty\<^sub>i' ST (E @ [Ti]) (A \<squnion> \<lfloor>{length E}\<rfloor>) # compT (E @ [Ti]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e) @ [ty\<^sub>i' (T # ST) (E @ [Ti]) (A \<squnion> \<lfloor>{length E}\<rfloor> \<squnion> \ e)]

goal (16 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 3. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 4. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 5. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 6. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 7. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
 8. \<And>E A ST e1 D F e2 e3 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; \<And>T. \<lbrakk>P,E \<turnstile>1 e3 :: T; \<D> e3 (A \<squnion> \ e1 \<squnion> \ e2); \ e3 (length E); length (ty E e2 # ty E e1 # ST) + max_stack e3 \<le> mxs; length E + max_vars e3 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e3, compxE2 e3 0 (length (ty E e2 # ty E e1 # ST)) [::] ty\<^sub>i' (ty E e2 # ty E e1 # ST) E (A \<squnion> \ e1 \<squnion> \ e2) # compT E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3 @ [after E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3]; P,E \<turnstile>1 e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3) :: T; \<D> (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) A; \ (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (length E); length ST + max_stack (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxs; length E + max_vars (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)), compxE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) @ [after E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3))]
 9. \<And>E A ST e M es T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; \<And>Ts. \<lbrakk>P,E \<turnstile>1 es [::] Ts; \<D>s es (A \<squnion> \ e); \s es (length E); length (ty E e # ST) + max_stacks es \<le> mxs; length E + max_varss es \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> let \<tau>s = ty\<^sub>i' (ty E e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (ty E e # ST) es in \<turnstile> compEs2 es, compxEs2 es 0 (length (ty E e # ST)) [::] \<tau>s \<and> last \<tau>s = ty\<^sub>i' (rev Ts @ ty E e # ST) E (A \<squnion> \ e \<squnion> \s es); P,E \<turnstile>1 e\<bullet>M(es) :: T; \<D> (e\<bullet>M(es)) A; \ (e\<bullet>M(es)) (length E); length ST + max_stack (e\<bullet>M(es)) \<le> mxs; length E + max_vars (e\<bullet>M(es)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>M(es)), compxE2 (e\<bullet>M(es)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>M(es)) @ [after E A ST (e\<bullet>M(es))]
 10. \<And>E A ST i T v e Ta. \<lbrakk>\<And>Ta. \<lbrakk>P,E @ [T] \<turnstile>1 e :: Ta; \<D> e (A \<squnion> \<lfloor>{i}\<rfloor>); \ e (length (E @ [T])); length ST + max_stack e \<le> mxs; length (E @ [T]) + max_vars e \<le> mxl; set (E @ [T]) \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e @ [after (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e]; P,E \<turnstile>1 {i:T=\<lfloor>v\<rfloor>; e} :: Ta; \<D> {i:T=\<lfloor>v\<rfloor>; e} A; \ {i:T=\<lfloor>v\<rfloor>; e} (length E); length ST + max_stack {i:T=\<lfloor>v\<rfloor>; e} \<le> mxs; length E + max_vars {i:T=\<lfloor>v\<rfloor>; e} \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 {i:T=\<lfloor>v\<rfloor>; e}, compxE2 {i:T=\<lfloor>v\<rfloor>; e} 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST {i:T=\<lfloor>v\<rfloor>; e} @ [after E A ST {i:T=\<lfloor>v\<rfloor>; e}]
A total of 16 subgoals...
[PROOF STEP]
have "P \<turnstile> ty\<^sub>i' (T # ST) (E @ [Ti]) (A \<squnion> \<lfloor>{length E}\<rfloor> \<squnion> \ e) \<le>' ty\<^sub>i' (T # ST) (E @ [Ti]) ((A \<squnion> \ e) \<ominus> length E)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. P \<turnstile> ty\<^sub>i' (T # ST) (E @ [Ti]) (A \<squnion> \<lfloor>{length E}\<rfloor> \<squnion> \ e) \<le>' ty\<^sub>i' (T # ST) (E @ [Ti]) (A \<squnion> \ e \<ominus> length E)
[PROOF STEP]
by(auto simp add: hyperset_defs intro: ty\<^sub>i'_antimono)
[PROOF STATE]
proof (state)
this:
P \<turnstile> ty\<^sub>i' (T # ST) (E @ [Ti]) (A \<squnion> \<lfloor>{length E}\<rfloor> \<squnion> \ e) \<le>' ty\<^sub>i' (T # ST) (E @ [Ti]) (A \<squnion> \ e \<ominus> length E)

goal (16 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 3. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 4. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 5. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 6. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 7. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
 8. \<And>E A ST e1 D F e2 e3 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; \<And>T. \<lbrakk>P,E \<turnstile>1 e3 :: T; \<D> e3 (A \<squnion> \ e1 \<squnion> \ e2); \ e3 (length E); length (ty E e2 # ty E e1 # ST) + max_stack e3 \<le> mxs; length E + max_vars e3 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e3, compxE2 e3 0 (length (ty E e2 # ty E e1 # ST)) [::] ty\<^sub>i' (ty E e2 # ty E e1 # ST) E (A \<squnion> \ e1 \<squnion> \ e2) # compT E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3 @ [after E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3]; P,E \<turnstile>1 e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3) :: T; \<D> (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) A; \ (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (length E); length ST + max_stack (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxs; length E + max_vars (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)), compxE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) @ [after E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3))]
 9. \<And>E A ST e M es T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; \<And>Ts. \<lbrakk>P,E \<turnstile>1 es [::] Ts; \<D>s es (A \<squnion> \ e); \s es (length E); length (ty E e # ST) + max_stacks es \<le> mxs; length E + max_varss es \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> let \<tau>s = ty\<^sub>i' (ty E e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (ty E e # ST) es in \<turnstile> compEs2 es, compxEs2 es 0 (length (ty E e # ST)) [::] \<tau>s \<and> last \<tau>s = ty\<^sub>i' (rev Ts @ ty E e # ST) E (A \<squnion> \ e \<squnion> \s es); P,E \<turnstile>1 e\<bullet>M(es) :: T; \<D> (e\<bullet>M(es)) A; \ (e\<bullet>M(es)) (length E); length ST + max_stack (e\<bullet>M(es)) \<le> mxs; length E + max_vars (e\<bullet>M(es)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>M(es)), compxE2 (e\<bullet>M(es)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>M(es)) @ [after E A ST (e\<bullet>M(es))]
 10. \<And>E A ST i T v e Ta. \<lbrakk>\<And>Ta. \<lbrakk>P,E @ [T] \<turnstile>1 e :: Ta; \<D> e (A \<squnion> \<lfloor>{i}\<rfloor>); \ e (length (E @ [T])); length ST + max_stack e \<le> mxs; length (E @ [T]) + max_vars e \<le> mxl; set (E @ [T]) \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e @ [after (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e]; P,E \<turnstile>1 {i:T=\<lfloor>v\<rfloor>; e} :: Ta; \<D> {i:T=\<lfloor>v\<rfloor>; e} A; \ {i:T=\<lfloor>v\<rfloor>; e} (length E); length ST + max_stack {i:T=\<lfloor>v\<rfloor>; e} \<le> mxs; length E + max_vars {i:T=\<lfloor>v\<rfloor>; e} \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 {i:T=\<lfloor>v\<rfloor>; e}, compxE2 {i:T=\<lfloor>v\<rfloor>; e} 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST {i:T=\<lfloor>v\<rfloor>; e} @ [after E A ST {i:T=\<lfloor>v\<rfloor>; e}]
A total of 16 subgoals...
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
P \<turnstile> ty\<^sub>i' (T # ST) (E @ [Ti]) (A \<squnion> \<lfloor>{length E}\<rfloor> \<squnion> \ e) \<le>' ty\<^sub>i' (T # ST) (E @ [Ti]) (A \<squnion> \ e \<ominus> length E)

goal (16 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 3. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 4. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 5. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 6. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 7. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
 8. \<And>E A ST e1 D F e2 e3 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; \<And>T. \<lbrakk>P,E \<turnstile>1 e3 :: T; \<D> e3 (A \<squnion> \ e1 \<squnion> \ e2); \ e3 (length E); length (ty E e2 # ty E e1 # ST) + max_stack e3 \<le> mxs; length E + max_vars e3 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e3, compxE2 e3 0 (length (ty E e2 # ty E e1 # ST)) [::] ty\<^sub>i' (ty E e2 # ty E e1 # ST) E (A \<squnion> \ e1 \<squnion> \ e2) # compT E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3 @ [after E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3]; P,E \<turnstile>1 e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3) :: T; \<D> (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) A; \ (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (length E); length ST + max_stack (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxs; length E + max_vars (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)), compxE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) @ [after E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3))]
 9. \<And>E A ST e M es T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; \<And>Ts. \<lbrakk>P,E \<turnstile>1 es [::] Ts; \<D>s es (A \<squnion> \ e); \s es (length E); length (ty E e # ST) + max_stacks es \<le> mxs; length E + max_varss es \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> let \<tau>s = ty\<^sub>i' (ty E e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (ty E e # ST) es in \<turnstile> compEs2 es, compxEs2 es 0 (length (ty E e # ST)) [::] \<tau>s \<and> last \<tau>s = ty\<^sub>i' (rev Ts @ ty E e # ST) E (A \<squnion> \ e \<squnion> \s es); P,E \<turnstile>1 e\<bullet>M(es) :: T; \<D> (e\<bullet>M(es)) A; \ (e\<bullet>M(es)) (length E); length ST + max_stack (e\<bullet>M(es)) \<le> mxs; length E + max_vars (e\<bullet>M(es)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>M(es)), compxE2 (e\<bullet>M(es)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>M(es)) @ [after E A ST (e\<bullet>M(es))]
 10. \<And>E A ST i T v e Ta. \<lbrakk>\<And>Ta. \<lbrakk>P,E @ [T] \<turnstile>1 e :: Ta; \<D> e (A \<squnion> \<lfloor>{i}\<rfloor>); \ e (length (E @ [T])); length ST + max_stack e \<le> mxs; length (E @ [T]) + max_vars e \<le> mxl; set (E @ [T]) \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e @ [after (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e]; P,E \<turnstile>1 {i:T=\<lfloor>v\<rfloor>; e} :: Ta; \<D> {i:T=\<lfloor>v\<rfloor>; e} A; \ {i:T=\<lfloor>v\<rfloor>; e} (length E); length ST + max_stack {i:T=\<lfloor>v\<rfloor>; e} \<le> mxs; length E + max_vars {i:T=\<lfloor>v\<rfloor>; e} \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 {i:T=\<lfloor>v\<rfloor>; e}, compxE2 {i:T=\<lfloor>v\<rfloor>; e} 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST {i:T=\<lfloor>v\<rfloor>; e} @ [after E A ST {i:T=\<lfloor>v\<rfloor>; e}]
A total of 16 subgoals...
[PROOF STEP]
have "\<dots> = ty\<^sub>i' (T # ST) E (A \<squnion> \ e)"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. ty\<^sub>i' (T # ST) (E @ [Ti]) (A \<squnion> \ e \<ominus> length E) = ty\<^sub>i' (T # ST) E (A \<squnion> \ e)
[PROOF STEP]
by simp
[PROOF STATE]
proof (state)
this:
ty\<^sub>i' (T # ST) (E @ [Ti]) (A \<squnion> \ e \<ominus> length E) = ty\<^sub>i' (T # ST) E (A \<squnion> \ e)

goal (16 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 3. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 4. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 5. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 6. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 7. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
 8. \<And>E A ST e1 D F e2 e3 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; \<And>T. \<lbrakk>P,E \<turnstile>1 e3 :: T; \<D> e3 (A \<squnion> \ e1 \<squnion> \ e2); \ e3 (length E); length (ty E e2 # ty E e1 # ST) + max_stack e3 \<le> mxs; length E + max_vars e3 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e3, compxE2 e3 0 (length (ty E e2 # ty E e1 # ST)) [::] ty\<^sub>i' (ty E e2 # ty E e1 # ST) E (A \<squnion> \ e1 \<squnion> \ e2) # compT E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3 @ [after E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3]; P,E \<turnstile>1 e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3) :: T; \<D> (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) A; \ (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (length E); length ST + max_stack (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxs; length E + max_vars (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)), compxE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) @ [after E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3))]
 9. \<And>E A ST e M es T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; \<And>Ts. \<lbrakk>P,E \<turnstile>1 es [::] Ts; \<D>s es (A \<squnion> \ e); \s es (length E); length (ty E e # ST) + max_stacks es \<le> mxs; length E + max_varss es \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> let \<tau>s = ty\<^sub>i' (ty E e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (ty E e # ST) es in \<turnstile> compEs2 es, compxEs2 es 0 (length (ty E e # ST)) [::] \<tau>s \<and> last \<tau>s = ty\<^sub>i' (rev Ts @ ty E e # ST) E (A \<squnion> \ e \<squnion> \s es); P,E \<turnstile>1 e\<bullet>M(es) :: T; \<D> (e\<bullet>M(es)) A; \ (e\<bullet>M(es)) (length E); length ST + max_stack (e\<bullet>M(es)) \<le> mxs; length E + max_vars (e\<bullet>M(es)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>M(es)), compxE2 (e\<bullet>M(es)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>M(es)) @ [after E A ST (e\<bullet>M(es))]
 10. \<And>E A ST i T v e Ta. \<lbrakk>\<And>Ta. \<lbrakk>P,E @ [T] \<turnstile>1 e :: Ta; \<D> e (A \<squnion> \<lfloor>{i}\<rfloor>); \ e (length (E @ [T])); length ST + max_stack e \<le> mxs; length (E @ [T]) + max_vars e \<le> mxl; set (E @ [T]) \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e @ [after (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e]; P,E \<turnstile>1 {i:T=\<lfloor>v\<rfloor>; e} :: Ta; \<D> {i:T=\<lfloor>v\<rfloor>; e} A; \ {i:T=\<lfloor>v\<rfloor>; e} (length E); length ST + max_stack {i:T=\<lfloor>v\<rfloor>; e} \<le> mxs; length E + max_vars {i:T=\<lfloor>v\<rfloor>; e} \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 {i:T=\<lfloor>v\<rfloor>; e}, compxE2 {i:T=\<lfloor>v\<rfloor>; e} 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST {i:T=\<lfloor>v\<rfloor>; e} @ [after E A ST {i:T=\<lfloor>v\<rfloor>; e}]
A total of 16 subgoals...
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
ty\<^sub>i' (T # ST) (E @ [Ti]) (A \<squnion> \ e \<ominus> length E) = ty\<^sub>i' (T # ST) E (A \<squnion> \ e)

goal (16 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 3. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 4. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 5. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 6. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 7. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
 8. \<And>E A ST e1 D F e2 e3 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; \<And>T. \<lbrakk>P,E \<turnstile>1 e3 :: T; \<D> e3 (A \<squnion> \ e1 \<squnion> \ e2); \ e3 (length E); length (ty E e2 # ty E e1 # ST) + max_stack e3 \<le> mxs; length E + max_vars e3 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e3, compxE2 e3 0 (length (ty E e2 # ty E e1 # ST)) [::] ty\<^sub>i' (ty E e2 # ty E e1 # ST) E (A \<squnion> \ e1 \<squnion> \ e2) # compT E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3 @ [after E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3]; P,E \<turnstile>1 e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3) :: T; \<D> (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) A; \ (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (length E); length ST + max_stack (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxs; length E + max_vars (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)), compxE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) @ [after E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3))]
 9. \<And>E A ST e M es T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; \<And>Ts. \<lbrakk>P,E \<turnstile>1 es [::] Ts; \<D>s es (A \<squnion> \ e); \s es (length E); length (ty E e # ST) + max_stacks es \<le> mxs; length E + max_varss es \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> let \<tau>s = ty\<^sub>i' (ty E e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (ty E e # ST) es in \<turnstile> compEs2 es, compxEs2 es 0 (length (ty E e # ST)) [::] \<tau>s \<and> last \<tau>s = ty\<^sub>i' (rev Ts @ ty E e # ST) E (A \<squnion> \ e \<squnion> \s es); P,E \<turnstile>1 e\<bullet>M(es) :: T; \<D> (e\<bullet>M(es)) A; \ (e\<bullet>M(es)) (length E); length ST + max_stack (e\<bullet>M(es)) \<le> mxs; length E + max_vars (e\<bullet>M(es)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>M(es)), compxE2 (e\<bullet>M(es)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>M(es)) @ [after E A ST (e\<bullet>M(es))]
 10. \<And>E A ST i T v e Ta. \<lbrakk>\<And>Ta. \<lbrakk>P,E @ [T] \<turnstile>1 e :: Ta; \<D> e (A \<squnion> \<lfloor>{i}\<rfloor>); \ e (length (E @ [T])); length ST + max_stack e \<le> mxs; length (E @ [T]) + max_vars e \<le> mxl; set (E @ [T]) \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e @ [after (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e]; P,E \<turnstile>1 {i:T=\<lfloor>v\<rfloor>; e} :: Ta; \<D> {i:T=\<lfloor>v\<rfloor>; e} A; \ {i:T=\<lfloor>v\<rfloor>; e} (length E); length ST + max_stack {i:T=\<lfloor>v\<rfloor>; e} \<le> mxs; length E + max_vars {i:T=\<lfloor>v\<rfloor>; e} \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 {i:T=\<lfloor>v\<rfloor>; e}, compxE2 {i:T=\<lfloor>v\<rfloor>; e} 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST {i:T=\<lfloor>v\<rfloor>; e} @ [after E A ST {i:T=\<lfloor>v\<rfloor>; e}]
A total of 16 subgoals...
[PROOF STEP]
have "P \<turnstile> \<dots> \<le>' ty\<^sub>i' (T # ST) E (A \<squnion> (\ e \<ominus> i))"
[PROOF STATE]
proof (prove)
goal (1 subgoal):
 1. P \<turnstile> ty\<^sub>i' (T # ST) E (A \<squnion> \ e) \<le>' ty\<^sub>i' (T # ST) E (A \<squnion> (\ e \<ominus> i))
[PROOF STEP]
by(auto simp add:hyperset_defs intro: ty\<^sub>i'_antimono)
[PROOF STATE]
proof (state)
this:
P \<turnstile> ty\<^sub>i' (T # ST) E (A \<squnion> \ e) \<le>' ty\<^sub>i' (T # ST) E (A \<squnion> (\ e \<ominus> i))

goal (16 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 3. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 4. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 5. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 6. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 7. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
 8. \<And>E A ST e1 D F e2 e3 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; \<And>T. \<lbrakk>P,E \<turnstile>1 e3 :: T; \<D> e3 (A \<squnion> \ e1 \<squnion> \ e2); \ e3 (length E); length (ty E e2 # ty E e1 # ST) + max_stack e3 \<le> mxs; length E + max_vars e3 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e3, compxE2 e3 0 (length (ty E e2 # ty E e1 # ST)) [::] ty\<^sub>i' (ty E e2 # ty E e1 # ST) E (A \<squnion> \ e1 \<squnion> \ e2) # compT E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3 @ [after E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3]; P,E \<turnstile>1 e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3) :: T; \<D> (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) A; \ (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (length E); length ST + max_stack (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxs; length E + max_vars (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)), compxE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) @ [after E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3))]
 9. \<And>E A ST e M es T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; \<And>Ts. \<lbrakk>P,E \<turnstile>1 es [::] Ts; \<D>s es (A \<squnion> \ e); \s es (length E); length (ty E e # ST) + max_stacks es \<le> mxs; length E + max_varss es \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> let \<tau>s = ty\<^sub>i' (ty E e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (ty E e # ST) es in \<turnstile> compEs2 es, compxEs2 es 0 (length (ty E e # ST)) [::] \<tau>s \<and> last \<tau>s = ty\<^sub>i' (rev Ts @ ty E e # ST) E (A \<squnion> \ e \<squnion> \s es); P,E \<turnstile>1 e\<bullet>M(es) :: T; \<D> (e\<bullet>M(es)) A; \ (e\<bullet>M(es)) (length E); length ST + max_stack (e\<bullet>M(es)) \<le> mxs; length E + max_vars (e\<bullet>M(es)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>M(es)), compxE2 (e\<bullet>M(es)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>M(es)) @ [after E A ST (e\<bullet>M(es))]
 10. \<And>E A ST i T v e Ta. \<lbrakk>\<And>Ta. \<lbrakk>P,E @ [T] \<turnstile>1 e :: Ta; \<D> e (A \<squnion> \<lfloor>{i}\<rfloor>); \ e (length (E @ [T])); length ST + max_stack e \<le> mxs; length (E @ [T]) + max_vars e \<le> mxl; set (E @ [T]) \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e @ [after (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e]; P,E \<turnstile>1 {i:T=\<lfloor>v\<rfloor>; e} :: Ta; \<D> {i:T=\<lfloor>v\<rfloor>; e} A; \ {i:T=\<lfloor>v\<rfloor>; e} (length E); length ST + max_stack {i:T=\<lfloor>v\<rfloor>; e} \<le> mxs; length E + max_vars {i:T=\<lfloor>v\<rfloor>; e} \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 {i:T=\<lfloor>v\<rfloor>; e}, compxE2 {i:T=\<lfloor>v\<rfloor>; e} 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST {i:T=\<lfloor>v\<rfloor>; e} @ [after E A ST {i:T=\<lfloor>v\<rfloor>; e}]
A total of 16 subgoals...
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
P \<turnstile> ty\<^sub>i' (T # ST) E (A \<squnion> \ e) \<le>' ty\<^sub>i' (T # ST) E (A \<squnion> (\ e \<ominus> i))

goal (16 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 3. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 4. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 5. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 6. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 7. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
 8. \<And>E A ST e1 D F e2 e3 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; \<And>T. \<lbrakk>P,E \<turnstile>1 e3 :: T; \<D> e3 (A \<squnion> \ e1 \<squnion> \ e2); \ e3 (length E); length (ty E e2 # ty E e1 # ST) + max_stack e3 \<le> mxs; length E + max_vars e3 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e3, compxE2 e3 0 (length (ty E e2 # ty E e1 # ST)) [::] ty\<^sub>i' (ty E e2 # ty E e1 # ST) E (A \<squnion> \ e1 \<squnion> \ e2) # compT E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3 @ [after E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3]; P,E \<turnstile>1 e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3) :: T; \<D> (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) A; \ (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (length E); length ST + max_stack (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxs; length E + max_vars (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)), compxE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) @ [after E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3))]
 9. \<And>E A ST e M es T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; \<And>Ts. \<lbrakk>P,E \<turnstile>1 es [::] Ts; \<D>s es (A \<squnion> \ e); \s es (length E); length (ty E e # ST) + max_stacks es \<le> mxs; length E + max_varss es \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> let \<tau>s = ty\<^sub>i' (ty E e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (ty E e # ST) es in \<turnstile> compEs2 es, compxEs2 es 0 (length (ty E e # ST)) [::] \<tau>s \<and> last \<tau>s = ty\<^sub>i' (rev Ts @ ty E e # ST) E (A \<squnion> \ e \<squnion> \s es); P,E \<turnstile>1 e\<bullet>M(es) :: T; \<D> (e\<bullet>M(es)) A; \ (e\<bullet>M(es)) (length E); length ST + max_stack (e\<bullet>M(es)) \<le> mxs; length E + max_vars (e\<bullet>M(es)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>M(es)), compxE2 (e\<bullet>M(es)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>M(es)) @ [after E A ST (e\<bullet>M(es))]
 10. \<And>E A ST i T v e Ta. \<lbrakk>\<And>Ta. \<lbrakk>P,E @ [T] \<turnstile>1 e :: Ta; \<D> e (A \<squnion> \<lfloor>{i}\<rfloor>); \ e (length (E @ [T])); length ST + max_stack e \<le> mxs; length (E @ [T]) + max_vars e \<le> mxl; set (E @ [T]) \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e @ [after (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e]; P,E \<turnstile>1 {i:T=\<lfloor>v\<rfloor>; e} :: Ta; \<D> {i:T=\<lfloor>v\<rfloor>; e} A; \ {i:T=\<lfloor>v\<rfloor>; e} (length E); length ST + max_stack {i:T=\<lfloor>v\<rfloor>; e} \<le> mxs; length E + max_vars {i:T=\<lfloor>v\<rfloor>; e} \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 {i:T=\<lfloor>v\<rfloor>; e}, compxE2 {i:T=\<lfloor>v\<rfloor>; e} 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST {i:T=\<lfloor>v\<rfloor>; e} @ [after E A ST {i:T=\<lfloor>v\<rfloor>; e}]
A total of 16 subgoals...
[PROOF STEP]
note append_Cons
[PROOF STATE]
proof (state)
this:
(?x # ?xs) @ ?ys = ?x # ?xs @ ?ys

goal (16 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 3. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 4. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 5. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 6. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 7. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
 8. \<And>E A ST e1 D F e2 e3 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; \<And>T. \<lbrakk>P,E \<turnstile>1 e3 :: T; \<D> e3 (A \<squnion> \ e1 \<squnion> \ e2); \ e3 (length E); length (ty E e2 # ty E e1 # ST) + max_stack e3 \<le> mxs; length E + max_vars e3 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e3, compxE2 e3 0 (length (ty E e2 # ty E e1 # ST)) [::] ty\<^sub>i' (ty E e2 # ty E e1 # ST) E (A \<squnion> \ e1 \<squnion> \ e2) # compT E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3 @ [after E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3]; P,E \<turnstile>1 e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3) :: T; \<D> (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) A; \ (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (length E); length ST + max_stack (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxs; length E + max_vars (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)), compxE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) @ [after E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3))]
 9. \<And>E A ST e M es T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; \<And>Ts. \<lbrakk>P,E \<turnstile>1 es [::] Ts; \<D>s es (A \<squnion> \ e); \s es (length E); length (ty E e # ST) + max_stacks es \<le> mxs; length E + max_varss es \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> let \<tau>s = ty\<^sub>i' (ty E e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (ty E e # ST) es in \<turnstile> compEs2 es, compxEs2 es 0 (length (ty E e # ST)) [::] \<tau>s \<and> last \<tau>s = ty\<^sub>i' (rev Ts @ ty E e # ST) E (A \<squnion> \ e \<squnion> \s es); P,E \<turnstile>1 e\<bullet>M(es) :: T; \<D> (e\<bullet>M(es)) A; \ (e\<bullet>M(es)) (length E); length ST + max_stack (e\<bullet>M(es)) \<le> mxs; length E + max_vars (e\<bullet>M(es)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>M(es)), compxE2 (e\<bullet>M(es)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>M(es)) @ [after E A ST (e\<bullet>M(es))]
 10. \<And>E A ST i T v e Ta. \<lbrakk>\<And>Ta. \<lbrakk>P,E @ [T] \<turnstile>1 e :: Ta; \<D> e (A \<squnion> \<lfloor>{i}\<rfloor>); \ e (length (E @ [T])); length ST + max_stack e \<le> mxs; length (E @ [T]) + max_vars e \<le> mxl; set (E @ [T]) \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e @ [after (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e]; P,E \<turnstile>1 {i:T=\<lfloor>v\<rfloor>; e} :: Ta; \<D> {i:T=\<lfloor>v\<rfloor>; e} A; \ {i:T=\<lfloor>v\<rfloor>; e} (length E); length ST + max_stack {i:T=\<lfloor>v\<rfloor>; e} \<le> mxs; length E + max_vars {i:T=\<lfloor>v\<rfloor>; e} \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 {i:T=\<lfloor>v\<rfloor>; e}, compxE2 {i:T=\<lfloor>v\<rfloor>; e} 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST {i:T=\<lfloor>v\<rfloor>; e} @ [after E A ST {i:T=\<lfloor>v\<rfloor>; e}]
A total of 16 subgoals...
[PROOF STEP]
also
[PROOF STATE]
proof (state)
this:
(?x # ?xs) @ ?ys = ?x # ?xs @ ?ys

goal (16 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 3. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 4. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 5. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 6. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 7. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
 8. \<And>E A ST e1 D F e2 e3 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; \<And>T. \<lbrakk>P,E \<turnstile>1 e3 :: T; \<D> e3 (A \<squnion> \ e1 \<squnion> \ e2); \ e3 (length E); length (ty E e2 # ty E e1 # ST) + max_stack e3 \<le> mxs; length E + max_vars e3 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e3, compxE2 e3 0 (length (ty E e2 # ty E e1 # ST)) [::] ty\<^sub>i' (ty E e2 # ty E e1 # ST) E (A \<squnion> \ e1 \<squnion> \ e2) # compT E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3 @ [after E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3]; P,E \<turnstile>1 e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3) :: T; \<D> (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) A; \ (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (length E); length ST + max_stack (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxs; length E + max_vars (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)), compxE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) @ [after E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3))]
 9. \<And>E A ST e M es T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; \<And>Ts. \<lbrakk>P,E \<turnstile>1 es [::] Ts; \<D>s es (A \<squnion> \ e); \s es (length E); length (ty E e # ST) + max_stacks es \<le> mxs; length E + max_varss es \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> let \<tau>s = ty\<^sub>i' (ty E e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (ty E e # ST) es in \<turnstile> compEs2 es, compxEs2 es 0 (length (ty E e # ST)) [::] \<tau>s \<and> last \<tau>s = ty\<^sub>i' (rev Ts @ ty E e # ST) E (A \<squnion> \ e \<squnion> \s es); P,E \<turnstile>1 e\<bullet>M(es) :: T; \<D> (e\<bullet>M(es)) A; \ (e\<bullet>M(es)) (length E); length ST + max_stack (e\<bullet>M(es)) \<le> mxs; length E + max_vars (e\<bullet>M(es)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>M(es)), compxE2 (e\<bullet>M(es)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>M(es)) @ [after E A ST (e\<bullet>M(es))]
 10. \<And>E A ST i T v e Ta. \<lbrakk>\<And>Ta. \<lbrakk>P,E @ [T] \<turnstile>1 e :: Ta; \<D> e (A \<squnion> \<lfloor>{i}\<rfloor>); \ e (length (E @ [T])); length ST + max_stack e \<le> mxs; length (E @ [T]) + max_vars e \<le> mxl; set (E @ [T]) \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e @ [after (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e]; P,E \<turnstile>1 {i:T=\<lfloor>v\<rfloor>; e} :: Ta; \<D> {i:T=\<lfloor>v\<rfloor>; e} A; \ {i:T=\<lfloor>v\<rfloor>; e} (length E); length ST + max_stack {i:T=\<lfloor>v\<rfloor>; e} \<le> mxs; length E + max_vars {i:T=\<lfloor>v\<rfloor>; e} \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 {i:T=\<lfloor>v\<rfloor>; e}, compxE2 {i:T=\<lfloor>v\<rfloor>; e} 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST {i:T=\<lfloor>v\<rfloor>; e} @ [after E A ST {i:T=\<lfloor>v\<rfloor>; e}]
A total of 16 subgoals...
[PROOF STEP]
{
[PROOF STATE]
proof (state)
this:
(?x # ?xs) @ ?ys = ?x # ?xs @ ?ys

goal (16 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 3. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 4. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 5. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 6. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 7. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
 8. \<And>E A ST e1 D F e2 e3 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; \<And>T. \<lbrakk>P,E \<turnstile>1 e3 :: T; \<D> e3 (A \<squnion> \ e1 \<squnion> \ e2); \ e3 (length E); length (ty E e2 # ty E e1 # ST) + max_stack e3 \<le> mxs; length E + max_vars e3 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e3, compxE2 e3 0 (length (ty E e2 # ty E e1 # ST)) [::] ty\<^sub>i' (ty E e2 # ty E e1 # ST) E (A \<squnion> \ e1 \<squnion> \ e2) # compT E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3 @ [after E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3]; P,E \<turnstile>1 e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3) :: T; \<D> (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) A; \ (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (length E); length ST + max_stack (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxs; length E + max_vars (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)), compxE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) @ [after E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3))]
 9. \<And>E A ST e M es T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; \<And>Ts. \<lbrakk>P,E \<turnstile>1 es [::] Ts; \<D>s es (A \<squnion> \ e); \s es (length E); length (ty E e # ST) + max_stacks es \<le> mxs; length E + max_varss es \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> let \<tau>s = ty\<^sub>i' (ty E e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (ty E e # ST) es in \<turnstile> compEs2 es, compxEs2 es 0 (length (ty E e # ST)) [::] \<tau>s \<and> last \<tau>s = ty\<^sub>i' (rev Ts @ ty E e # ST) E (A \<squnion> \ e \<squnion> \s es); P,E \<turnstile>1 e\<bullet>M(es) :: T; \<D> (e\<bullet>M(es)) A; \ (e\<bullet>M(es)) (length E); length ST + max_stack (e\<bullet>M(es)) \<le> mxs; length E + max_vars (e\<bullet>M(es)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>M(es)), compxE2 (e\<bullet>M(es)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>M(es)) @ [after E A ST (e\<bullet>M(es))]
 10. \<And>E A ST i T v e Ta. \<lbrakk>\<And>Ta. \<lbrakk>P,E @ [T] \<turnstile>1 e :: Ta; \<D> e (A \<squnion> \<lfloor>{i}\<rfloor>); \ e (length (E @ [T])); length ST + max_stack e \<le> mxs; length (E @ [T]) + max_vars e \<le> mxl; set (E @ [T]) \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e @ [after (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e]; P,E \<turnstile>1 {i:T=\<lfloor>v\<rfloor>; e} :: Ta; \<D> {i:T=\<lfloor>v\<rfloor>; e} A; \ {i:T=\<lfloor>v\<rfloor>; e} (length E); length ST + max_stack {i:T=\<lfloor>v\<rfloor>; e} \<le> mxs; length E + max_vars {i:T=\<lfloor>v\<rfloor>; e} \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 {i:T=\<lfloor>v\<rfloor>; e}, compxE2 {i:T=\<lfloor>v\<rfloor>; e} 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST {i:T=\<lfloor>v\<rfloor>; e} @ [after E A ST {i:T=\<lfloor>v\<rfloor>; e}]
A total of 16 subgoals...
[PROOF STEP]
from lenST max_stack1[of e] Tv
[PROOF STATE]
proof (chain)
picking this:
length ST + max_stack e \<le> mxs
1 \<le> max_stack e
P,E \<turnstile>1 Val v :: Tv
P \<turnstile> Tv \<le> Ti
[PROOF STEP]
have "\<turnstile> [Push v], [] [::] [ty\<^sub>i' ST E A, ty\<^sub>i' (ty E (Val v) # ST) E A]"
[PROOF STATE]
proof (prove)
using this:
length ST + max_stack e \<le> mxs
1 \<le> max_stack e
P,E \<turnstile>1 Val v :: Tv
P \<turnstile> Tv \<le> Ti

goal (1 subgoal):
 1. \<turnstile> [Push v], [] [::] [ty\<^sub>i' ST E A, ty\<^sub>i' (ty E (Val v) # ST) E A]
[PROOF STEP]
by(auto intro: wt_Push)
[PROOF STATE]
proof (state)
this:
\<turnstile> [Push v], [] [::] [ty\<^sub>i' ST E A, ty\<^sub>i' (ty E (Val v) # ST) E A]

goal (16 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 3. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 4. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 5. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 6. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 7. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
 8. \<And>E A ST e1 D F e2 e3 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; \<And>T. \<lbrakk>P,E \<turnstile>1 e3 :: T; \<D> e3 (A \<squnion> \ e1 \<squnion> \ e2); \ e3 (length E); length (ty E e2 # ty E e1 # ST) + max_stack e3 \<le> mxs; length E + max_vars e3 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e3, compxE2 e3 0 (length (ty E e2 # ty E e1 # ST)) [::] ty\<^sub>i' (ty E e2 # ty E e1 # ST) E (A \<squnion> \ e1 \<squnion> \ e2) # compT E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3 @ [after E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3]; P,E \<turnstile>1 e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3) :: T; \<D> (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) A; \ (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (length E); length ST + max_stack (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxs; length E + max_vars (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)), compxE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) @ [after E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3))]
 9. \<And>E A ST e M es T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; \<And>Ts. \<lbrakk>P,E \<turnstile>1 es [::] Ts; \<D>s es (A \<squnion> \ e); \s es (length E); length (ty E e # ST) + max_stacks es \<le> mxs; length E + max_varss es \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> let \<tau>s = ty\<^sub>i' (ty E e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (ty E e # ST) es in \<turnstile> compEs2 es, compxEs2 es 0 (length (ty E e # ST)) [::] \<tau>s \<and> last \<tau>s = ty\<^sub>i' (rev Ts @ ty E e # ST) E (A \<squnion> \ e \<squnion> \s es); P,E \<turnstile>1 e\<bullet>M(es) :: T; \<D> (e\<bullet>M(es)) A; \ (e\<bullet>M(es)) (length E); length ST + max_stack (e\<bullet>M(es)) \<le> mxs; length E + max_vars (e\<bullet>M(es)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>M(es)), compxE2 (e\<bullet>M(es)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>M(es)) @ [after E A ST (e\<bullet>M(es))]
 10. \<And>E A ST i T v e Ta. \<lbrakk>\<And>Ta. \<lbrakk>P,E @ [T] \<turnstile>1 e :: Ta; \<D> e (A \<squnion> \<lfloor>{i}\<rfloor>); \ e (length (E @ [T])); length ST + max_stack e \<le> mxs; length (E @ [T]) + max_vars e \<le> mxl; set (E @ [T]) \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e @ [after (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e]; P,E \<turnstile>1 {i:T=\<lfloor>v\<rfloor>; e} :: Ta; \<D> {i:T=\<lfloor>v\<rfloor>; e} A; \ {i:T=\<lfloor>v\<rfloor>; e} (length E); length ST + max_stack {i:T=\<lfloor>v\<rfloor>; e} \<le> mxs; length E + max_vars {i:T=\<lfloor>v\<rfloor>; e} \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 {i:T=\<lfloor>v\<rfloor>; e}, compxE2 {i:T=\<lfloor>v\<rfloor>; e} 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST {i:T=\<lfloor>v\<rfloor>; e} @ [after E A ST {i:T=\<lfloor>v\<rfloor>; e}]
A total of 16 subgoals...
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
\<turnstile> [Push v], [] [::] [ty\<^sub>i' ST E A, ty\<^sub>i' (ty E (Val v) # ST) E A]

goal (16 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 3. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 4. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 5. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 6. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 7. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
 8. \<And>E A ST e1 D F e2 e3 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; \<And>T. \<lbrakk>P,E \<turnstile>1 e3 :: T; \<D> e3 (A \<squnion> \ e1 \<squnion> \ e2); \ e3 (length E); length (ty E e2 # ty E e1 # ST) + max_stack e3 \<le> mxs; length E + max_vars e3 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e3, compxE2 e3 0 (length (ty E e2 # ty E e1 # ST)) [::] ty\<^sub>i' (ty E e2 # ty E e1 # ST) E (A \<squnion> \ e1 \<squnion> \ e2) # compT E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3 @ [after E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3]; P,E \<turnstile>1 e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3) :: T; \<D> (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) A; \ (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (length E); length ST + max_stack (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxs; length E + max_vars (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)), compxE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) @ [after E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3))]
 9. \<And>E A ST e M es T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; \<And>Ts. \<lbrakk>P,E \<turnstile>1 es [::] Ts; \<D>s es (A \<squnion> \ e); \s es (length E); length (ty E e # ST) + max_stacks es \<le> mxs; length E + max_varss es \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> let \<tau>s = ty\<^sub>i' (ty E e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (ty E e # ST) es in \<turnstile> compEs2 es, compxEs2 es 0 (length (ty E e # ST)) [::] \<tau>s \<and> last \<tau>s = ty\<^sub>i' (rev Ts @ ty E e # ST) E (A \<squnion> \ e \<squnion> \s es); P,E \<turnstile>1 e\<bullet>M(es) :: T; \<D> (e\<bullet>M(es)) A; \ (e\<bullet>M(es)) (length E); length ST + max_stack (e\<bullet>M(es)) \<le> mxs; length E + max_vars (e\<bullet>M(es)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>M(es)), compxE2 (e\<bullet>M(es)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>M(es)) @ [after E A ST (e\<bullet>M(es))]
 10. \<And>E A ST i T v e Ta. \<lbrakk>\<And>Ta. \<lbrakk>P,E @ [T] \<turnstile>1 e :: Ta; \<D> e (A \<squnion> \<lfloor>{i}\<rfloor>); \ e (length (E @ [T])); length ST + max_stack e \<le> mxs; length (E @ [T]) + max_vars e \<le> mxl; set (E @ [T]) \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e @ [after (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e]; P,E \<turnstile>1 {i:T=\<lfloor>v\<rfloor>; e} :: Ta; \<D> {i:T=\<lfloor>v\<rfloor>; e} A; \ {i:T=\<lfloor>v\<rfloor>; e} (length E); length ST + max_stack {i:T=\<lfloor>v\<rfloor>; e} \<le> mxs; length E + max_vars {i:T=\<lfloor>v\<rfloor>; e} \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 {i:T=\<lfloor>v\<rfloor>; e}, compxE2 {i:T=\<lfloor>v\<rfloor>; e} 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST {i:T=\<lfloor>v\<rfloor>; e} @ [after E A ST {i:T=\<lfloor>v\<rfloor>; e}]
A total of 16 subgoals...
[PROOF STEP]
from Tv lenE
[PROOF STATE]
proof (chain)
picking this:
P,E \<turnstile>1 Val v :: Tv
P \<turnstile> Tv \<le> Ti
length (E @ [Ti]) + max_vars e \<le> mxl
[PROOF STEP]
have "\<turnstile> [Store (length E)], [] [::] [ty\<^sub>i' (Tv # ST) (E @ [Ti]) (A \<ominus> length E), ty\<^sub>i' ST (E @ [Ti]) (\<lfloor>{length E}\<rfloor> \<squnion> (A \<ominus> length E))]"
[PROOF STATE]
proof (prove)
using this:
P,E \<turnstile>1 Val v :: Tv
P \<turnstile> Tv \<le> Ti
length (E @ [Ti]) + max_vars e \<le> mxl

goal (1 subgoal):
 1. \<turnstile> [Store (length E)], [] [::] [ty\<^sub>i' (Tv # ST) (E @ [Ti]) (A \<ominus> length E), ty\<^sub>i' ST (E @ [Ti]) (\<lfloor>{length E}\<rfloor> \<squnion> (A \<ominus> length E))]
[PROOF STEP]
by -(rule wt_Store, auto)
[PROOF STATE]
proof (state)
this:
\<turnstile> [Store (length E)], [] [::] [ty\<^sub>i' (Tv # ST) (E @ [Ti]) (A \<ominus> length E), ty\<^sub>i' ST (E @ [Ti]) (\<lfloor>{length E}\<rfloor> \<squnion> (A \<ominus> length E))]

goal (16 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 newA T\<lfloor>e\<rceil> :: Ta; \<D> (newA T\<lfloor>e\<rceil>) A; \ (newA T\<lfloor>e\<rceil>) (length E); length ST + max_stack (newA T\<lfloor>e\<rceil>) \<le> mxs; length E + max_vars (newA T\<lfloor>e\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (newA T\<lfloor>e\<rceil>), compxE2 (newA T\<lfloor>e\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (newA T\<lfloor>e\<rceil>) @ [after E A ST (newA T\<lfloor>e\<rceil>)]
 2. \<And>E A ST i T. \<lbrakk>P,E \<turnstile>1 Var i :: T; \<D> (Var i) A; \ (Var i) (length E); length ST + max_stack (Var i) \<le> mxs; length E + max_vars (Var i) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (Var i), compxE2 (Var i) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (Var i) @ [after E A ST (Var i)]
 3. \<And>E A ST i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 i:=e :: T; \<D> (i:=e) A; \ (i:=e) (length E); length ST + max_stack (i:=e) \<le> mxs; length E + max_vars (i:=e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (i:=e), compxE2 (i:=e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (i:=e) @ [after E A ST (i:=e)]
 4. \<And>E A ST a i T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; P,E \<turnstile>1 a\<lfloor>i\<rceil> :: T; \<D> (a\<lfloor>i\<rceil>) A; \ (a\<lfloor>i\<rceil>) (length E); length ST + max_stack (a\<lfloor>i\<rceil>) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil>) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil>), compxE2 (a\<lfloor>i\<rceil>) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil>) @ [after E A ST (a\<lfloor>i\<rceil>)]
 5. \<And>E A ST a i e T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; \<And>T. \<lbrakk>P,E \<turnstile>1 i :: T; \<D> i (A \<squnion> \ a); \ i (length E); length (ty E a # ST) + max_stack i \<le> mxs; length E + max_vars i \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 i, compxE2 i 0 (length (ty E a # ST)) [::] ty\<^sub>i' (ty E a # ST) E (A \<squnion> \ a) # compT E (A \<squnion> \ a) (ty E a # ST) i @ [after E (A \<squnion> \ a) (ty E a # ST) i]; \<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e (A \<squnion> \ a \<squnion> \ i); \ e (length E); length (ty E i # ty E a # ST) + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length (ty E i # ty E a # ST)) [::] ty\<^sub>i' (ty E i # ty E a # ST) E (A \<squnion> \ a \<squnion> \ i) # compT E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e @ [after E (A \<squnion> \ a \<squnion> \ i) (ty E i # ty E a # ST) e]; P,E \<turnstile>1 a\<lfloor>i\<rceil> := e :: T; \<D> (a\<lfloor>i\<rceil> := e) A; \ (a\<lfloor>i\<rceil> := e) (length E); length ST + max_stack (a\<lfloor>i\<rceil> := e) \<le> mxs; length E + max_vars (a\<lfloor>i\<rceil> := e) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<lfloor>i\<rceil> := e), compxE2 (a\<lfloor>i\<rceil> := e) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<lfloor>i\<rceil> := e) @ [after E A ST (a\<lfloor>i\<rceil> := e)]
 6. \<And>E A ST a T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 a :: T; \<D> a A; \ a (length E); length ST + max_stack a \<le> mxs; length E + max_vars a \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 a, compxE2 a 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST a @ [after E A ST a]; P,E \<turnstile>1 a\<bullet>length :: T; \<D> (a\<bullet>length) A; \ (a\<bullet>length) (length E); length ST + max_stack (a\<bullet>length) \<le> mxs; length E + max_vars (a\<bullet>length) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (a\<bullet>length), compxE2 (a\<bullet>length) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (a\<bullet>length) @ [after E A ST (a\<bullet>length)]
 7. \<And>E A ST e F D T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; P,E \<turnstile>1 e\<bullet>F{D} :: T; \<D> (e\<bullet>F{D}) A; \ (e\<bullet>F{D}) (length E); length ST + max_stack (e\<bullet>F{D}) \<le> mxs; length E + max_vars (e\<bullet>F{D}) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>F{D}), compxE2 (e\<bullet>F{D}) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>F{D}) @ [after E A ST (e\<bullet>F{D})]
 8. \<And>E A ST e1 D F e2 e3 T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e1 :: T; \<D> e1 A; \ e1 (length E); length ST + max_stack e1 \<le> mxs; length E + max_vars e1 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e1, compxE2 e1 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e1 @ [after E A ST e1]; \<And>T. \<lbrakk>P,E \<turnstile>1 e2 :: T; \<D> e2 (A \<squnion> \ e1); \ e2 (length E); length (ty E e1 # ST) + max_stack e2 \<le> mxs; length E + max_vars e2 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e2, compxE2 e2 0 (length (ty E e1 # ST)) [::] ty\<^sub>i' (ty E e1 # ST) E (A \<squnion> \ e1) # compT E (A \<squnion> \ e1) (ty E e1 # ST) e2 @ [after E (A \<squnion> \ e1) (ty E e1 # ST) e2]; \<And>T. \<lbrakk>P,E \<turnstile>1 e3 :: T; \<D> e3 (A \<squnion> \ e1 \<squnion> \ e2); \ e3 (length E); length (ty E e2 # ty E e1 # ST) + max_stack e3 \<le> mxs; length E + max_vars e3 \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e3, compxE2 e3 0 (length (ty E e2 # ty E e1 # ST)) [::] ty\<^sub>i' (ty E e2 # ty E e1 # ST) E (A \<squnion> \ e1 \<squnion> \ e2) # compT E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3 @ [after E (A \<squnion> \ e1 \<squnion> \ e2) (ty E e2 # ty E e1 # ST) e3]; P,E \<turnstile>1 e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3) :: T; \<D> (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) A; \ (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) (length E); length ST + max_stack (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxs; length E + max_vars (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)), compxE2 (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3)) @ [after E A ST (e1\<bullet>compareAndSwap(D\<bullet>F, e2, e3))]
 9. \<And>E A ST e M es T. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST e @ [after E A ST e]; \<And>Ts. \<lbrakk>P,E \<turnstile>1 es [::] Ts; \<D>s es (A \<squnion> \ e); \s es (length E); length (ty E e # ST) + max_stacks es \<le> mxs; length E + max_varss es \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> let \<tau>s = ty\<^sub>i' (ty E e # ST) E (A \<squnion> \ e) # compTs E (A \<squnion> \ e) (ty E e # ST) es in \<turnstile> compEs2 es, compxEs2 es 0 (length (ty E e # ST)) [::] \<tau>s \<and> last \<tau>s = ty\<^sub>i' (rev Ts @ ty E e # ST) E (A \<squnion> \ e \<squnion> \s es); P,E \<turnstile>1 e\<bullet>M(es) :: T; \<D> (e\<bullet>M(es)) A; \ (e\<bullet>M(es)) (length E); length ST + max_stack (e\<bullet>M(es)) \<le> mxs; length E + max_vars (e\<bullet>M(es)) \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 (e\<bullet>M(es)), compxE2 (e\<bullet>M(es)) 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST (e\<bullet>M(es)) @ [after E A ST (e\<bullet>M(es))]
 10. \<And>E A ST i T v e Ta. \<lbrakk>\<And>Ta. \<lbrakk>P,E @ [T] \<turnstile>1 e :: Ta; \<D> e (A \<squnion> \<lfloor>{i}\<rfloor>); \ e (length (E @ [T])); length ST + max_stack e \<le> mxs; length (E @ [T]) + max_vars e \<le> mxl; set (E @ [T]) \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2 e 0 (length ST) [::] ty\<^sub>i' ST (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) # compT (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e @ [after (E @ [T]) (A \<squnion> \<lfloor>{i}\<rfloor>) ST e]; P,E \<turnstile>1 {i:T=\<lfloor>v\<rfloor>; e} :: Ta; \<D> {i:T=\<lfloor>v\<rfloor>; e} A; \ {i:T=\<lfloor>v\<rfloor>; e} (length E); length ST + max_stack {i:T=\<lfloor>v\<rfloor>; e} \<le> mxs; length E + max_vars {i:T=\<lfloor>v\<rfloor>; e} \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 {i:T=\<lfloor>v\<rfloor>; e}, compxE2 {i:T=\<lfloor>v\<rfloor>; e} 0 (length ST) [::] ty\<^sub>i' ST E A # compT E A ST {i:T=\<lfloor>v\<rfloor>; e} @ [after E A ST {i:T=\<lfloor>v\<rfloor>; e}]
A total of 16 subgoals...
[PROOF STEP]
moreover
[PROOF STATE]
proof (state)
this:
\<turnstile> [Store (length E)], [] [::] [ty\<^sub>i' (Tv # ST) (E @ [Ti]) (A \<ominus> length E), ty\<^sub>i' ST (E @ [Ti]) (\<lfloor>{length E}\<rfloor> \<squnion> (A \<ominus> length E))]

goal (16 subgoals):
 1. \<And>E A ST T e Ta. \<lbrakk>\<And>T. \<lbrakk>P,E \<turnstile>1 e :: T; \<D> e A; \ e (length E); length ST + max_stack e \<le> mxs; length E + max_vars e \<le> mxl; set E \<subseteq> types P\<rbrakk> \<Longrightarrow> \<turnstile> compE2 e, compxE2
[cell cut: 3940629 characters, first 2000000 kept]