simps: fixes P :: "(char list \<times> base list \<times> (char list \<times> ty) list \<times> (char list \<times> ty list \<times> ty \<times> char list list \<times> expr) list) list"   and a1 :: "char list \<Rightarrow> ty option"   and a2 :: "nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option"   and a3 :: "expr"   and a4 :: "ty" shows "(P,a1,a2 \<turnstile> a3 : a4) = ((\<exists>C E h. a1 = E \<and> a2 = h \<and> a3 = new C \<and> a4 = Class C \<and> is_class P C) \<or> (\<exists>E h e T C. a1 = E \<and> a2 = h \<and> a3 = Cast C e \<and> a4 = Class C \<and> P,E,h \<turnstile> e : T \<and> is_refT T \<and> is_class P C) \<or> (\<exists>E h e T C. a1 = E \<and> a2 = h \<and> a3 = \<lparr>C\<rparr>e \<and> a4 = Class C \<and> P,E,h \<turnstile> e : T \<and> is_refT T \<and> is_class P C) \<or> (\<exists>h v T E. a1 = E \<and> a2 = h \<and> a3 = Val v \<and> a4 = T \<and> P \<turnstile> typeof\<^bsub>h\<^esub> v = \<lfloor>T\<rfloor>) \<or> (\<exists>E V T h. a1 = E \<and> a2 = h \<and> a3 = Var V \<and> a4 = T \<and> E V = \<lfloor>T\<rfloor>) \<or> (\<exists>E h e\<^sub>1 T\<^sub>1 e\<^sub>2 T\<^sub>2 bop T. a1 = E \<and> a2 = h \<and> a3 = e\<^sub>1 \<guillemotleft>bop\<guillemotright> e\<^sub>2 \<and> a4 = T \<and> P,E,h \<turnstile> e\<^sub>1 : T\<^sub>1 \<and> P,E,h \<turnstile> e\<^sub>2 : T\<^sub>2 \<and> (case bop of Eq \<Rightarrow> T = Boolean | Add \<Rightarrow> T\<^sub>1 = Integer \<and> T\<^sub>2 = Integer \<and> T = Integer)) \<or> (\<exists>E V T h e T'. a1 = E \<and> a2 = h \<and> a3 = V:=e \<and> a4 = T \<and> E V = \<lfloor>T\<rfloor> \<and> P,E,h \<turnstile> e : T' \<and> P \<turnstile> T' \<le> T) \<or> (\<exists>E h e C Cs F T. a1 = E \<and> a2 = h \<and> a3 = e\<bullet>F{Cs} \<and> a4 = T \<and> P,E,h \<turnstile> e : Class C \<and> Cs \<noteq> [] \<and> P \<turnstile> C has least F:T via Cs) \<or> (\<exists>E h e F Cs T. a1 = E \<and> a2 = h \<and> a3 = e\<bullet>F{Cs} \<and> a4 = T \<and> P,E,h \<turnstile> e : NT) \<or> (\<exists>E h e\<^sub>1 C Cs F T e\<^sub>2 T'. a1 = E \<and> a2 = h \<and> a3 = e\<^sub>1\<bullet>F{Cs} := e\<^sub>2 \<and> a4 = T \<and> P,E,h \<turnstile> e\<^sub>1 : Class C \<and> Cs \<noteq> [] \<and> P \<turnstile> C has least F:T via Cs \<and> P,E,h \<turnstile> e\<^sub>2 : T' \<and> P \<turnstile> T' \<le> T) \<or> (\<exists>E h e\<^sub>1 e\<^sub>2 T' T F Cs. a1 = E \<and> a2 = h \<and> a3 = e\<^sub>1\<bullet>F{Cs} := e\<^sub>2 \<and> a4 = T \<and> P,E,h \<turnstile> e\<^sub>1 : NT \<and> P,E,h \<turnstile> e\<^sub>2 : T' \<and> P \<turnstile> T' \<le> T) \<or> (\<exists>E h e C M Ts T m Cs es Ts'. a1 = E \<and> a2 = h \<and> a3 = Call e None M es \<and> a4 = T \<and> P,E,h \<turnstile> e : Class C \<and> P \<turnstile> C has least M = (Ts, T, m) via Cs \<and> P,E,h \<turnstile> es [:] Ts' \<and> P \<turnstile> Ts' [\<le>] Ts) \<or> (\<exists>E h e C' C M Ts T m Cs es Ts'. a1 = E \<and> a2 = h \<and> a3 = Call e \<lfloor>C\<rfloor> M es \<and> a4 = T \<and> P,E,h \<turnstile> e : Class C' \<and> P \<turnstile> Path C' to C unique \<and> P \<turnstile> C has least M = (Ts, T, m) via Cs \<and> P,E,h \<turnstile> es [:] Ts' \<and> P \<turnstile> Ts' [\<le>] Ts) \<or> (\<exists>E h e es Ts Copt M T. a1 = E \<and> a2 = h \<and> a3 = Call e Copt M es \<and> a4 = T \<and> P,E,h \<turnstile> e : NT \<and> P,E,h \<turnstile> es [:] Ts) \<or> (\<exists>E V T h e T'. a1 = E \<and> a2 = h \<and> a3 = {V:T; e} \<and> a4 = T' \<and> P,E(V \<mapsto> T),h \<turnstile> e : T' \<and> is_type P T) \<or> (\<exists>E h e\<^sub>1 T\<^sub>1 e\<^sub>2 T\<^sub>2. a1 = E \<and> a2 = h \<and> a3 = e\<^sub>1;; e\<^sub>2 \<and> a4 = T\<^sub>2 \<and> P,E,h \<turnstile> e\<^sub>1 : T\<^sub>1 \<and> P,E,h \<turnstile> e\<^sub>2 : T\<^sub>2) \<or> (\<exists>E h e e\<^sub>1 T e\<^sub>2. a1 = E \<and> a2 = h \<and> a3 = if (e) e\<^sub>1 else e\<^sub>2 \<and> a4 = T \<and> P,E,h \<turnstile> e : Boolean \<and> P,E,h \<turnstile> e\<^sub>1 : T \<and> P,E,h \<turnstile> e\<^sub>2 : T) \<or> (\<exists>E h e c T. a1 = E \<and> a2 = h \<and> a3 = while (e) c \<and> a4 = Void \<and> P,E,h \<turnstile> e : Boolean \<and> P,E,h \<turnstile> c : T) \<or> (\<exists>E h e T' T. a1 = E \<and> a2 = h \<and> a3 = throw e \<and> a4 = T \<and> P,E,h \<turnstile> e : T' \<and> is_refT T'))"