cases: 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" assumes "P,a1,a2 \<turnstile> a3 :' a4" obtains C :: "char list" and E :: "char list \<Rightarrow> ty option" and h :: "nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option" where "a1 = Eb__" and "a2 = hb__" and "a3 = new C__" and "a4 = Class C__" and "is_class P C__"   | C :: "char list" and E :: "char list \<Rightarrow> ty option" and h :: "nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option" and e :: "expr" and T :: "ty" where "a1 = Ec__" and "a2 = hc__" and "a3 = Cast Ca__ eb__" and "a4 = Class Ca__" and "is_class P Ca__" and "P,Ec__,hc__ \<turnstile> eb__ :' Tb__" and "is_refT Tb__"   | C :: "char list" and E :: "char list \<Rightarrow> ty option" and h :: "nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option" and e :: "expr" and T :: "ty" where "a1 = Ed__" and "a2 = hd__" and "a3 = \<lparr>Cb__\<rparr>ec__" and "a4 = Class Cb__" and "is_class P Cb__" and "P,Ed__,hd__ \<turnstile> ec__ :' Tc__" and "is_refT Tc__"   | h :: "nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option" and v :: "val" and T :: "ty" and E :: "char list \<Rightarrow> ty option" where "a1 = Ee__" and "a2 = he__" and "a3 = Val v__" and "a4 = Td__" and "P \<turnstile> typeof\<^bsub>he__\<^esub> v__ = \<lfloor>Td__\<rfloor>"   | E :: "char list \<Rightarrow> ty option" and V :: "char list" and T :: "ty" and h :: "nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option" where "a1 = Ef__" and "a2 = hf__" and "a3 = Var V__" and "a4 = Te__" and "Ef__ V__ = \<lfloor>Te__\<rfloor>"   | E :: "char list \<Rightarrow> ty option" and h :: "nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option" and e\<^sub>1 :: "expr" and T\<^sub>1 :: "ty" and e\<^sub>2 :: "expr" and T\<^sub>2 :: "ty" and bop :: "bop" and T :: "ty" where "a1 = Eg__" and "a2 = hg__" and "a3 = e\<^sub>1__ \<guillemotleft>bop\<guillemotright> e\<^sub>2__" and "a4 = Tf__" and "P,Eg__,hg__ \<turnstile> e\<^sub>1__ :' T\<^sub>1__" and "P,Eg__,hg__ \<turnstile> e\<^sub>2__ :' T\<^sub>2__" and "case bop of Eq \<Rightarrow> Tf__ = Boolean | Add \<Rightarrow> T\<^sub>1__ = Integer \<and> T\<^sub>2__ = Integer \<and> Tf__ = Integer"   | E :: "char list \<Rightarrow> ty option" and h :: "nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option" and V :: "char list" and T :: "ty" and e :: "expr" and T' :: "ty" where "a1 = Eh__" and "a2 = hh__" and "a3 = Va__:=ed__" and "a4 = Tg__" and "P,Eh__,hh__ \<turnstile> Var Va__ :' Tg__" and "P,Eh__,hh__ \<turnstile> ed__ :' T'__" and "P \<turnstile> T'__ \<le> Tg__"   | E :: "char list \<Rightarrow> ty option" and h :: "nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option" and e :: "expr" and C :: "char list" and Cs :: "char list list" and F :: "char list" and T :: "ty" where "a1 = Ei__" and "a2 = hi__" and "a3 = ee__\<bullet>F__{Cs__}" and "a4 = Th__" and "P,Ei__,hi__ \<turnstile> ee__ :' Class Cc__" and "Cs__ \<noteq> []" and "P \<turnstile> Cc__ has least F__:Th__ via Cs__"   | E :: "char list \<Rightarrow> ty option" and h :: "nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option" and e :: "expr" and F :: "char list" and Cs :: "char list list" and T :: "ty" where "a1 = Ej__" and "a2 = hj__" and "a3 = ef__\<bullet>Fa__{Csa__}" and "a4 = Ti__" and "P,Ej__,hj__ \<turnstile> ef__ :' NT"   | E :: "char list \<Rightarrow> ty option" and h :: "nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option" and e\<^sub>1 :: "expr" and C :: "char list" and Cs :: "char list list" and F :: "char list" and T :: "ty" and e\<^sub>2 :: "expr" and T' :: "ty" where "a1 = Ek__" and "a2 = hk__" and "a3 = e\<^sub>1'__\<bullet>Fb__{Csb__} := e\<^sub>2'__" and "a4 = Tj__" and "P,Ek__,hk__ \<turnstile> e\<^sub>1'__ :' Class Cd__" and "Csb__ \<noteq> []" and "P \<turnstile> Cd__ has least Fb__:Tj__ via Csb__" and "P,Ek__,hk__ \<turnstile> e\<^sub>2'__ :' T'a__" and "P \<turnstile> T'a__ \<le> Tj__"   | E :: "char list \<Rightarrow> ty option" and h :: "nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option" and e\<^sub>1 :: "expr" and e\<^sub>2 :: "expr" and T' :: "ty" and T :: "ty" and F :: "char list" and Cs :: "char list list" where "a1 = El__" and "a2 = hl__" and "a3 = e\<^sub>1''__\<bullet>F{Csc__} := e\<^sub>2''__" and "a4 = Tk__" and "P,El__,hl__ \<turnstile> e\<^sub>1''__ :' NT" and "P,El__,hl__ \<turnstile> e\<^sub>2''__ :' T'b__" and "P \<turnstile> T'b__ \<le> Tk__"   | E :: "char list \<Rightarrow> ty option" and h :: "nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option" and e :: "expr" and C :: "char list" and M :: "char list" and Ts :: "ty list" and T :: "ty" and m :: "char list list \<times> expr" and Cs :: "char list list" and es :: "expr list" and Ts' :: "ty list" where "a1 = Em__" and "a2 = hm__" and "a3 = Call eg__ None M__ esb__" and "a4 = Tl__" and "P,Em__,hm__ \<turnstile> eg__ :' Class Ce__" and "P \<turnstile> Ce__ has least M__ = (Tsb__, Tl__, m__) via Csd__" and "P,Em__,hm__ \<turnstile> esb__ [:'] Ts'__" and "P \<turnstile> Ts'__ [\<le>] Tsb__"   | E :: "char list \<Rightarrow> ty option" and h :: "nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option" and e :: "expr" and C' :: "char list" and C :: "char list" and M :: "char list" and Ts :: "ty list" and T :: "ty" and m :: "char list list \<times> expr" and Cs :: "char list list" and es :: "expr list" and Ts' :: "ty list" where "a1 = En__" and "a2 = hn__" and "a3 = Call eh__ \<lfloor>C\<rfloor> Ma__ esc__" and "a4 = Tm__" and "P,En__,hn__ \<turnstile> eh__ :' Class C'" and "P \<turnstile> Path C' to C unique" and "P \<turnstile> C has least Ma__ = (Tsc__, Tm__, m) via Cs" and "P,En__,hn__ \<turnstile> esc__ [:'] Ts'" and "P \<turnstile> Ts' [\<le>] Tsc__"   | E :: "char list \<Rightarrow> ty option" and h :: "nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option" and e :: "expr" and es :: "expr list" and Ts :: "ty list" and Copt :: "char list option" and M :: "char list" and T :: "ty" where "a1 = Eo__" and "a2 = ho__" and "a3 = Call ei__ Copt M es" and "a4 = Tn__" and "P,Eo__,ho__ \<turnstile> ei__ :' NT" and "P,Eo__,ho__ \<turnstile> es [:'] Ts"   | h :: "nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option" and v :: "val" and T' :: "ty" and E :: "char list \<Rightarrow> ty option" and V :: "char list" and T :: "ty" and e\<^sub>2 :: "expr" and T\<^sub>2 :: "ty" where "a1 = Ep__" and "a2 = hp__" and "a3 = {Vb__:To__; Vb__:=Val v;; e\<^sub>2'''__}" and "a4 = T\<^sub>2'__" and "P \<turnstile> typeof\<^bsub>hp__\<^esub> v = \<lfloor>T'c__\<rfloor>" and "P,Ep__(Vb__ \<mapsto> To__),hp__ \<turnstile> e\<^sub>2'''__ :' T\<^sub>2'__" and "P \<turnstile> T'c__ \<le> To__" and "is_type P To__"   | E :: "char list \<Rightarrow> ty option" and V :: "char list" and T :: "ty" and h :: "nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option" and e :: "expr" and T' :: "ty" where "a1 = Eq__" and "a2 = hq__" and "a3 = {V:Tp__; ej__}" and "a4 = T'd__" and "P,Eq__(V \<mapsto> Tp__),hq__ \<turnstile> ej__ :' T'd__" and "\<not> assigned V ej__" and "is_type P Tp__"   | E :: "char list \<Rightarrow> ty option" and h :: "nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option" and e\<^sub>1 :: "expr" and T\<^sub>1 :: "ty" and e\<^sub>2 :: "expr" and T\<^sub>2 :: "ty" where "a1 = Er__" and "a2 = hr__" and "a3 = e\<^sub>1'''__;; e\<^sub>2''''__" and "a4 = T\<^sub>2" and "P,Er__,hr__ \<turnstile> e\<^sub>1'''__ :' T\<^sub>1" and "P,Er__,hr__ \<turnstile> e\<^sub>2''''__ :' T\<^sub>2"   | E :: "char list \<Rightarrow> ty option" and h :: "nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option" and e :: "expr" and e\<^sub>1 :: "expr" and T :: "ty" and e\<^sub>2 :: "expr" where "a1 = Es__" and "a2 = hs__" and "a3 = if (ek__) e\<^sub>1 else e\<^sub>2" and "a4 = Tq__" and "P,Es__,hs__ \<turnstile> ek__ :' Boolean" and "P,Es__,hs__ \<turnstile> e\<^sub>1 :' Tq__" and "P,Es__,hs__ \<turnstile> e\<^sub>2 :' Tq__"   | E :: "char list \<Rightarrow> ty option" and h :: "nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option" and e :: "expr" and c :: "expr" and T :: "ty" where "a1 = Et__" and "a2 = ht__" and "a3 = while (el__) c" and "a4 = Void" and "P,Et__,ht__ \<turnstile> el__ :' Boolean" and "P,Et__,ht__ \<turnstile> c :' Tr__"   | E :: "char list \<Rightarrow> ty option" and h :: "nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option" and e :: "expr" and T' :: "ty" and T :: "ty" where "a1 = E" and "a2 = h" and "a3 = throw e" and "a4 = T" and "P,E,h \<turnstile> e :' T'" and "is_refT T'"