cases: fixes P :: "(char list \<times> char list \<times> (char list \<times> ty) list \<times> (char list \<times> ty list \<times> ty \<times> char list list \<times> char list exp) list) list"   and h :: "nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option"   and a1 :: "char list \<Rightarrow> ty option"   and a2 :: "char list exp"   and a3 :: "ty" assumes "P,a1,h \<turnstile> a2 : a3" obtains C :: "char list" and E :: "char list \<Rightarrow> ty option" where "a1 = Ea__" and "a2 = new C__" and "a3 = Class C__" and "is_class P C__"   | E :: "char list \<Rightarrow> ty option" and e :: "char list exp" and T :: "ty" and C :: "char list" where "a1 = Eb__" and "a2 = Cast Ca__ ea__" and "a3 = Class Ca__" and "P,Eb__,h \<turnstile> ea__ : Ta__" and "is_refT Ta__" and "is_class P Ca__"   | v :: "val" and T :: "ty" and E :: "char list \<Rightarrow> ty option" where "a1 = Ec__" and "a2 = Val v" and "a3 = Tb__" and "typeof\<^bsub>h\<^esub> v = \<lfloor>Tb__\<rfloor>"   | E :: "char list \<Rightarrow> ty option" and V :: "char list" and T :: "ty" where "a1 = Ed__" and "a2 = Var V__" and "a3 = Tc__" and "Ed__ V__ = \<lfloor>Tc__\<rfloor>"   | E :: "char list \<Rightarrow> ty option" and e\<^sub>1 :: "char list exp" and T\<^sub>1 :: "ty" and e\<^sub>2 :: "char list exp" and T\<^sub>2 :: "ty" where "a1 = Ee__" and "a2 = e\<^sub>1__ \<guillemotleft>Eq\<guillemotright> e\<^sub>2__" and "a3 = Boolean" and "P,Ee__,h \<turnstile> e\<^sub>1__ : T\<^sub>1__" and "P,Ee__,h \<turnstile> e\<^sub>2__ : T\<^sub>2__"   | E :: "char list \<Rightarrow> ty option" and e\<^sub>1 :: "char list exp" and e\<^sub>2 :: "char list exp" where "a1 = Ef__" and "a2 = e\<^sub>1'__ \<guillemotleft>Add\<guillemotright> e\<^sub>2'__" and "a3 = Integer" and "P,Ef__,h \<turnstile> e\<^sub>1'__ : Integer" and "P,Ef__,h \<turnstile> e\<^sub>2'__ : Integer"   | E :: "char list \<Rightarrow> ty option" and V :: "char list" and T :: "ty" and e :: "char list exp" and T' :: "ty" where "a1 = Eg__" and "a2 = Va__:=eb__" and "a3 = Void" and "Eg__ Va__ = \<lfloor>Td__\<rfloor>" and "P,Eg__,h \<turnstile> eb__ : T'__" and "P \<turnstile> T'__ \<le> Td__"   | E :: "char list \<Rightarrow> ty option" and e :: "char list exp" and C :: "char list" and F :: "char list" and T :: "ty" and D :: "char list" where "a1 = Eh__" and "a2 = ec__\<bullet>F__{D__}" and "a3 = Te__" and "P,Eh__,h \<turnstile> ec__ : Class Cb__" and "P \<turnstile> Cb__ has F__:Te__ in D__"   | E :: "char list \<Rightarrow> ty option" and e :: "char list exp" and F :: "char list" and D :: "char list" and T :: "ty" where "a1 = Ei__" and "a2 = ed__\<bullet>Fa__{Da__}" and "a3 = Tf__" and "P,Ei__,h \<turnstile> ed__ : NT"   | E :: "char list \<Rightarrow> ty option" and e\<^sub>1 :: "char list exp" and C :: "char list" and F :: "char list" and T :: "ty" and D :: "char list" and e\<^sub>2 :: "char list exp" and T\<^sub>2 :: "ty" where "a1 = Ej__" and "a2 = e\<^sub>1''__\<bullet>Fb__{Db__} := e\<^sub>2''__" and "a3 = Void" and "P,Ej__,h \<turnstile> e\<^sub>1''__ : Class Cc__" and "P \<turnstile> Cc__ has Fb__:Tg__ in Db__" and "P,Ej__,h \<turnstile> e\<^sub>2''__ : T\<^sub>2'__" and "P \<turnstile> T\<^sub>2'__ \<le> Tg__"   | E :: "char list \<Rightarrow> ty option" and e\<^sub>1 :: "char list exp" and e\<^sub>2 :: "char list exp" and T\<^sub>2 :: "ty" and F :: "char list" and D :: "char list" where "a1 = Ek__" and "a2 = e\<^sub>1'''__\<bullet>F{Dc__} := e\<^sub>2'''__" and "a3 = Void" and "P,Ek__,h \<turnstile> e\<^sub>1'''__ : NT" and "P,Ek__,h \<turnstile> e\<^sub>2'''__ : T\<^sub>2''__"   | E :: "char list \<Rightarrow> ty option" and e :: "char list exp" and C :: "char list" and M :: "char list" and Ts :: "ty list" and T :: "ty" and pns :: "char list list" and body :: "char list exp" and D :: "char list" and es :: "char list exp list" and Ts' :: "ty list" where "a1 = El__" and "a2 = ee__\<bullet>M__(esa__)" and "a3 = Th__" and "P,El__,h \<turnstile> ee__ : Class Cd__" and "P \<turnstile> Cd__ sees M__: Tsa__\<rightarrow>Th__ = (pns, body) in D" and "P,El__,h \<turnstile> esa__ [:] Ts'" and "P \<turnstile> Ts' [\<le>] Tsa__"   | E :: "char list \<Rightarrow> ty option" and e :: "char list exp" and es :: "char list exp list" and Ts :: "ty list" and M :: "char list" and T :: "ty" where "a1 = Em__" and "a2 = ef__\<bullet>M(es)" and "a3 = Ti__" and "P,Em__,h \<turnstile> ef__ : NT" and "P,Em__,h \<turnstile> es [:] Ts"   | E :: "char list \<Rightarrow> ty option" and V :: "char list" and T :: "ty" and e :: "char list exp" and T' :: "ty" where "a1 = En__" and "a2 = {Vb__:Tj__; eg__}" and "a3 = T'" and "P,En__(Vb__ \<mapsto> Tj__),h \<turnstile> eg__ : T'"   | E :: "char list \<Rightarrow> ty option" and e\<^sub>1 :: "char list exp" and T\<^sub>1 :: "ty" and e\<^sub>2 :: "char list exp" and T\<^sub>2 :: "ty" where "a1 = Eo__" and "a2 = e\<^sub>1''''__;; e\<^sub>2''''__" and "a3 = T\<^sub>2'''__" and "P,Eo__,h \<turnstile> e\<^sub>1''''__ : T\<^sub>1'__" and "P,Eo__,h \<turnstile> e\<^sub>2''''__ : T\<^sub>2'''__"   | E :: "char list \<Rightarrow> ty option" and e :: "char list exp" and e\<^sub>1 :: "char list exp" and T\<^sub>1 :: "ty" and e\<^sub>2 :: "char list exp" and T\<^sub>2 :: "ty" and T :: "ty" where "a1 = Ep__" and "a2 = if (eh__) e\<^sub>1'''''__ else e\<^sub>2'''''__" and "a3 = Tk__" and "P,Ep__,h \<turnstile> eh__ : Boolean" and "P,Ep__,h \<turnstile> e\<^sub>1'''''__ : T\<^sub>1''__" and "P,Ep__,h \<turnstile> e\<^sub>2'''''__ : T\<^sub>2''''__" and "P \<turnstile> T\<^sub>1''__ \<le> T\<^sub>2''''__ \<or> P \<turnstile> T\<^sub>2''''__ \<le> T\<^sub>1''__" and "P \<turnstile> T\<^sub>1''__ \<le> T\<^sub>2''''__ \<longrightarrow> Tk__ = T\<^sub>2''''__" and "P \<turnstile> T\<^sub>2''''__ \<le> T\<^sub>1''__ \<longrightarrow> Tk__ = T\<^sub>1''__"   | E :: "char list \<Rightarrow> ty option" and e :: "char list exp" and c :: "char list exp" and T :: "ty" where "a1 = Eq__" and "a2 = while (ei__) c" and "a3 = Void" and "P,Eq__,h \<turnstile> ei__ : Boolean" and "P,Eq__,h \<turnstile> c : Tl__"   | E :: "char list \<Rightarrow> ty option" and e :: "char list exp" and T\<^sub>r :: "ty" and T :: "ty" where "a1 = Er__" and "a2 = throw e" and "a3 = T" and "P,Er__,h \<turnstile> e : T\<^sub>r" and "is_refT T\<^sub>r"   | E :: "char list \<Rightarrow> ty option" and e\<^sub>1 :: "char list exp" and T\<^sub>1 :: "ty" and V :: "char list" and C :: "char list" and e\<^sub>2 :: "char list exp" and T\<^sub>2 :: "ty" where "a1 = E" and "a2 = try e\<^sub>1 catch(C V) e\<^sub>2" and "a3 = T\<^sub>2" and "P,E,h \<turnstile> e\<^sub>1 : T\<^sub>1" and "P,E(V \<mapsto> Class C),h \<turnstile> e\<^sub>2 : T\<^sub>2" and "P \<turnstile> T\<^sub>1 \<le> T\<^sub>2"