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 :: "expr"   and a3 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)"   and a4 :: "expr"   and a5 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" assumes "P,a1 \<turnstile> \<langle>a2,a3\<rangle> \<Rightarrow> \<langle>a4,a5\<rangle>" obtains h :: "nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option" and a :: "nat" and h' :: "nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option" and C :: "char list" and E :: "char list \<Rightarrow> ty option" and l :: "char list \<Rightarrow> val option" where "a1 = E__" and "a2 = new C__" and "a3 = (h__, l__)" and "a4 = ref (a__, [C__])" and "a5 = (h', l__)" and "new_Addr h__ = \<lfloor>a__\<rfloor>" and "h' = h__(a__ \<mapsto> (C__, Collect (init_obj P C__)))"   | h :: "nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option" and E :: "char list \<Rightarrow> ty option" and C :: "char list" and l :: "char list \<Rightarrow> val option" where "a1 = Ea__" and "a2 = new Ca__" and "a3 = (ha__, la__)" and "a4 = Throw (addr_of_sys_xcpt OutOfMemory, [OutOfMemory])" and "a5 = (ha__, la__)" and "new_Addr ha__ = None"   | E :: "char list \<Rightarrow> ty option" and e :: "expr" and s\<^sub>0 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and a :: "nat" and Cs :: "char list list" and s\<^sub>1 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and C :: "char list" and Cs' :: "char list list" and Ds :: "char list list" where "a1 = Eb__" and "a2 = \<lparr>Cb__\<rparr>e__" and "a3 = s\<^sub>0__" and "a4 = ref (aa__, Ds__)" and "a5 = s\<^sub>1__" and "P,Eb__ \<turnstile> \<langle>e__,s\<^sub>0__\<rangle> \<Rightarrow> \<langle>ref (aa__, Cs__),s\<^sub>1__\<rangle>" and "P \<turnstile> Path last Cs__ to Cb__ via Cs'__ " and "Ds__ = Cs__ @\<^sub>p Cs'__"   | E :: "char list \<Rightarrow> ty option" and e :: "expr" and s\<^sub>0 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and a :: "nat" and Cs :: "char list list" and C :: "char list" and Cs' :: "char list list" and s\<^sub>1 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" where "a1 = Ec__" and "a2 = \<lparr>Cc__\<rparr>ea__" and "a3 = s\<^sub>0'__" and "a4 = ref (ab__, Csa__ @ [Cc__])" and "a5 = s\<^sub>1'__" and "P,Ec__ \<turnstile> \<langle>ea__,s\<^sub>0'__\<rangle> \<Rightarrow> \<langle>ref (ab__, Csa__ @ [Cc__] @ Cs'a__),s\<^sub>1'__\<rangle>"   | E :: "char list \<Rightarrow> ty option" and e :: "expr" and s\<^sub>0 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and s\<^sub>1 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and C :: "char list" where "a1 = Ed__" and "a2 = \<lparr>Cd__\<rparr>eb__" and "a3 = s\<^sub>0''__" and "a4 = null" and "a5 = s\<^sub>1''__" and "P,Ed__ \<turnstile> \<langle>eb__,s\<^sub>0''__\<rangle> \<Rightarrow> \<langle>null,s\<^sub>1''__\<rangle>"   | E :: "char list \<Rightarrow> ty option" and e :: "expr" and s\<^sub>0 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and a :: "nat" and Cs :: "char list list" and s\<^sub>1 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and C :: "char list" where "a1 = Ee__" and "a2 = \<lparr>Ce__\<rparr>ec__" and "a3 = s\<^sub>0'''__" and "a4 = Throw (addr_of_sys_xcpt ClassCast, [ClassCast])" and "a5 = s\<^sub>1'''__" and "P,Ee__ \<turnstile> \<langle>ec__,s\<^sub>0'''__\<rangle> \<Rightarrow> \<langle>ref (ac__, Csb__),s\<^sub>1'''__\<rangle>" and "(last Csb__, Ce__) \<notin> (subcls1 P)\<^sup>*" and "Ce__ \<notin> set Csb__"   | E :: "char list \<Rightarrow> ty option" and e :: "expr" and s\<^sub>0 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and e' :: "expr" and s\<^sub>1 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and C :: "char list" where "a1 = Ef__" and "a2 = \<lparr>Cf__\<rparr>ed__" and "a3 = s\<^sub>0''''__" and "a4 = throw e'__" and "a5 = s\<^sub>1''''__" and "P,Ef__ \<turnstile> \<langle>ed__,s\<^sub>0''''__\<rangle> \<Rightarrow> \<langle>throw e'__,s\<^sub>1''''__\<rangle>"   | E :: "char list \<Rightarrow> ty option" and e :: "expr" and s\<^sub>0 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and a :: "nat" and Cs :: "char list list" and s\<^sub>1 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and C :: "char list" and Cs' :: "char list list" and Ds :: "char list list" where "a1 = Eg__" and "a2 = Cast Cg__ ee__" and "a3 = s\<^sub>0'''''__" and "a4 = ref (ad__, Dsa__)" and "a5 = s\<^sub>1'''''__" and "P,Eg__ \<turnstile> \<langle>ee__,s\<^sub>0'''''__\<rangle> \<Rightarrow> \<langle>ref (ad__, Csc__),s\<^sub>1'''''__\<rangle>" and "P \<turnstile> Path last Csc__ to Cg__ unique" and "P \<turnstile> Path last Csc__ to Cg__ via Cs'b__ " and "Dsa__ = Csc__ @\<^sub>p Cs'b__"   | E :: "char list \<Rightarrow> ty option" and e :: "expr" and s\<^sub>0 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and a :: "nat" and Cs :: "char list list" and C :: "char list" and Cs' :: "char list list" and s\<^sub>1 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" where "a1 = Eh__" and "a2 = Cast Ch__ ef__" and "a3 = s\<^sub>0''''''__" and "a4 = ref (ae__, Csd__ @ [Ch__])" and "a5 = s\<^sub>1''''''__" and "P,Eh__ \<turnstile> \<langle>ef__,s\<^sub>0''''''__\<rangle> \<Rightarrow> \<langle>ref (ae__, Csd__ @ [Ch__] @ Cs'c__),s\<^sub>1''''''__\<rangle>"   | E :: "char list \<Rightarrow> ty option" and e :: "expr" and s\<^sub>0 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and a :: "nat" and Cs :: "char list list" and h :: "nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option" and l :: "char list \<Rightarrow> val option" and D :: "char list" and S :: "(char list list \<times> (char list \<Rightarrow> val option)) set" and C :: "char list" and Cs' :: "char list list" where "a1 = Ei__" and "a2 = Cast Ci__ eg__" and "a3 = s\<^sub>0'''''''__" and "a4 = ref (af__, Cs'd__)" and "a5 = (hb__, lb__)" and "P,Ei__ \<turnstile> \<langle>eg__,s\<^sub>0'''''''__\<rangle> \<Rightarrow> \<langle>ref (af__, Cse__),(hb__, lb__)\<rangle>" and "hb__ af__ = \<lfloor>(D__, S__)\<rfloor>" and "P \<turnstile> Path D__ to Ci__ via Cs'd__ " and "P \<turnstile> Path D__ to Ci__ unique"   | E :: "char list \<Rightarrow> ty option" and e :: "expr" and s\<^sub>0 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and s\<^sub>1 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and C :: "char list" where "a1 = Ej__" and "a2 = Cast Cj__ eh__" and "a3 = s\<^sub>0''''''''__" and "a4 = null" and "a5 = s\<^sub>1'''''''__" and "P,Ej__ \<turnstile> \<langle>eh__,s\<^sub>0''''''''__\<rangle> \<Rightarrow> \<langle>null,s\<^sub>1'''''''__\<rangle>"   | E :: "char list \<Rightarrow> ty option" and e :: "expr" and s\<^sub>0 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and a :: "nat" and Cs :: "char list list" and h :: "nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option" and l :: "char list \<Rightarrow> val option" and D :: "char list" and S :: "(char list list \<times> (char list \<Rightarrow> val option)) set" and C :: "char list" where "a1 = Ek__" and "a2 = Cast Ck__ ei__" and "a3 = s\<^sub>0'''''''''__" and "a4 = null" and "a5 = (hc__, lc__)" and "P,Ek__ \<turnstile> \<langle>ei__,s\<^sub>0'''''''''__\<rangle> \<Rightarrow> \<langle>ref (ag__, Csf__),(hc__, lc__)\<rangle>" and "hc__ ag__ = \<lfloor>(Da__, Sa__)\<rfloor>" and "\<not> P \<turnstile> Path Da__ to Ck__ unique" and "\<not> P \<turnstile> Path last Csf__ to Ck__ unique" and "Ck__ \<notin> set Csf__"   | E :: "char list \<Rightarrow> ty option" and e :: "expr" and s\<^sub>0 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and e' :: "expr" and s\<^sub>1 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and C :: "char list" where "a1 = El__" and "a2 = Cast Cl__ ej__" and "a3 = s\<^sub>0''''''''''__" and "a4 = throw e'a__" and "a5 = s\<^sub>1''''''''__" and "P,El__ \<turnstile> \<langle>ej__,s\<^sub>0''''''''''__\<rangle> \<Rightarrow> \<langle>throw e'a__,s\<^sub>1''''''''__\<rangle>"   | E :: "char list \<Rightarrow> ty option" and v :: "val" and s :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" where "a1 = Em__" and "a2 = Val v__" and "a3 = s" and "a4 = Val v__" and "a5 = s"   | E :: "char list \<Rightarrow> ty option" and e\<^sub>1 :: "expr" and s\<^sub>0 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and v\<^sub>1 :: "val" and s\<^sub>1 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and e\<^sub>2 :: "expr" and v\<^sub>2 :: "val" and s\<^sub>2 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and bop :: "bop" and v :: "val" where "a1 = En__" and "a2 = e\<^sub>1__ \<guillemotleft>bop__\<guillemotright> e\<^sub>2__" and "a3 = s\<^sub>0'''''''''''__" and "a4 = Val va__" and "a5 = s\<^sub>2__" and "P,En__ \<turnstile> \<langle>e\<^sub>1__,s\<^sub>0'''''''''''__\<rangle> \<Rightarrow> \<langle>Val v\<^sub>1__,s\<^sub>1'''''''''__\<rangle>" and "P,En__ \<turnstile> \<langle>e\<^sub>2__,s\<^sub>1'''''''''__\<rangle> \<Rightarrow> \<langle>Val v\<^sub>2,s\<^sub>2__\<rangle>" and "binop (bop__, v\<^sub>1__, v\<^sub>2) = \<lfloor>va__\<rfloor>"   | E :: "char list \<Rightarrow> ty option" and e\<^sub>1 :: "expr" and s\<^sub>0 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and e :: "expr" and s\<^sub>1 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and bop :: "bop" and e\<^sub>2 :: "expr" where "a1 = Eo__" and "a2 = e\<^sub>1'__ \<guillemotleft>bopa__\<guillemotright> e\<^sub>2'__" and "a3 = s\<^sub>0''''''''''''__" and "a4 = throw ek__" and "a5 = s\<^sub>1''''''''''__" and "P,Eo__ \<turnstile> \<langle>e\<^sub>1'__,s\<^sub>0''''''''''''__\<rangle> \<Rightarrow> \<langle>throw ek__,s\<^sub>1''''''''''__\<rangle>"   | E :: "char list \<Rightarrow> ty option" and e\<^sub>1 :: "expr" and s\<^sub>0 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and v\<^sub>1 :: "val" and s\<^sub>1 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and e\<^sub>2 :: "expr" and e :: "expr" and s\<^sub>2 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and bop :: "bop" where "a1 = Ep__" and "a2 = e\<^sub>1''__ \<guillemotleft>bop\<guillemotright> e\<^sub>2''__" and "a3 = s\<^sub>0'''''''''''''__" and "a4 = throw el__" and "a5 = s\<^sub>2'__" and "P,Ep__ \<turnstile> \<langle>e\<^sub>1''__,s\<^sub>0'''''''''''''__\<rangle> \<Rightarrow> \<langle>Val v\<^sub>1'__,s\<^sub>1'''''''''''__\<rangle>" and "P,Ep__ \<turnstile> \<langle>e\<^sub>2''__,s\<^sub>1'''''''''''__\<rangle> \<Rightarrow> \<langle>throw el__,s\<^sub>2'__\<rangle>"   | l :: "char list \<Rightarrow> val option" and V :: "char list" and v :: "val" 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 = Eq__" and "a2 = Var V__" and "a3 = (hd__, ld__)" and "a4 = Val vb__" and "a5 = (hd__, ld__)" and "ld__ V__ = \<lfloor>vb__\<rfloor>"   | E :: "char list \<Rightarrow> ty option" and e :: "expr" and s\<^sub>0 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and v :: "val" and h :: "nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option" and l :: "char list \<Rightarrow> val option" and V :: "char list" and T :: "ty" and v' :: "val" and l' :: "char list \<Rightarrow> val option" where "a1 = Er__" and "a2 = Va__:=em__" and "a3 = s\<^sub>0''''''''''''''__" and "a4 = Val v'__" and "a5 = (he__, l')" and "P,Er__ \<turnstile> \<langle>em__,s\<^sub>0''''''''''''''__\<rangle> \<Rightarrow> \<langle>Val vc__,(he__, le__)\<rangle>" and "Er__ Va__ = \<lfloor>T__\<rfloor>" and "P \<turnstile> T__ casts vc__ to v'__ " and "l' = le__(Va__ \<mapsto> v'__)"   | E :: "char list \<Rightarrow> ty option" and e :: "expr" and s\<^sub>0 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and e' :: "expr" and s\<^sub>1 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and V :: "char list" where "a1 = Es__" and "a2 = Vb__:=en__" and "a3 = s\<^sub>0'''''''''''''''__" and "a4 = throw e'b__" and "a5 = s\<^sub>1''''''''''''__" and "P,Es__ \<turnstile> \<langle>en__,s\<^sub>0'''''''''''''''__\<rangle> \<Rightarrow> \<langle>throw e'b__,s\<^sub>1''''''''''''__\<rangle>"   | E :: "char list \<Rightarrow> ty option" and e :: "expr" and s\<^sub>0 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and a :: "nat" and Cs' :: "char list list" and h :: "nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option" and l :: "char list \<Rightarrow> val option" and D :: "char list" and S :: "(char list list \<times> (char list \<Rightarrow> val option)) set" and Ds :: "char list list" and Cs :: "char list list" and fs :: "char list \<Rightarrow> val option" and F :: "char list" and v :: "val" where "a1 = Et__" and "a2 = eo__\<bullet>F__{Csg__}" and "a3 = s\<^sub>0''''''''''''''''__" and "a4 = Val vd__" and "a5 = (h, l)" and "P,Et__ \<turnstile> \<langle>eo__,s\<^sub>0''''''''''''''''__\<rangle> \<Rightarrow> \<langle>ref (ah__, Cs'e__),(h, l)\<rangle>" and "h ah__ = \<lfloor>(Db__, Sb__)\<rfloor>" and "Dsb__ = Cs'e__ @\<^sub>p Csg__" and "(Dsb__, fs__) \<in> Sb__" and "fs__ F__ = \<lfloor>vd__\<rfloor>"   | E :: "char list \<Rightarrow> ty option" and e :: "expr" and s\<^sub>0 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and s\<^sub>1 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and F :: "char list" and Cs :: "char list list" where "a1 = Eu__" and "a2 = ep__\<bullet>Fa__{Csh__}" and "a3 = s\<^sub>0'''''''''''''''''__" and "a4 = Throw (addr_of_sys_xcpt NullPointer, [NullPointer])" and "a5 = s\<^sub>1'''''''''''''__" and "P,Eu__ \<turnstile> \<langle>ep__,s\<^sub>0'''''''''''''''''__\<rangle> \<Rightarrow> \<langle>null,s\<^sub>1'''''''''''''__\<rangle>"   | E :: "char list \<Rightarrow> ty option" and e :: "expr" and s\<^sub>0 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and e' :: "expr" and s\<^sub>1 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and F :: "char list" and Cs :: "char list list" where "a1 = Ev__" and "a2 = eq__\<bullet>Fb__{Csi__}" and "a3 = s\<^sub>0''''''''''''''''''__" and "a4 = throw e'c__" and "a5 = s\<^sub>1''''''''''''''__" and "P,Ev__ \<turnstile> \<langle>eq__,s\<^sub>0''''''''''''''''''__\<rangle> \<Rightarrow> \<langle>throw e'c__,s\<^sub>1''''''''''''''__\<rangle>"   | E :: "char list \<Rightarrow> ty option" and e\<^sub>1 :: "expr" and s\<^sub>0 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and a :: "nat" and Cs' :: "char list list" and s\<^sub>1 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and e\<^sub>2 :: "expr" and v :: "val" and h\<^sub>2 :: "nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option" and l\<^sub>2 :: "char list \<Rightarrow> val option" and D :: "char list" and S :: "(char list list \<times> (char list \<Rightarrow> val option)) set" and F :: "char list" and T :: "ty" and Cs :: "char list list" and v' :: "val" and Ds :: "char list list" and fs :: "char list \<Rightarrow> val option" and fs' :: "char list \<Rightarrow> val option" and S' :: "(char list list \<times> (char list \<Rightarrow> val option)) set" and h\<^sub>2' :: "nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option" where "a1 = Ew__" and "a2 = e\<^sub>1'''__\<bullet>Fc__{Csj__} := e\<^sub>2'''__" and "a3 = s\<^sub>0'''''''''''''''''''__" and "a4 = Val v'" and "a5 = (h\<^sub>2', l\<^sub>2__)" and "P,Ew__ \<turnstile> \<langle>e\<^sub>1'''__,s\<^sub>0'''''''''''''''''''__\<rangle> \<Rightarrow> \<langle>ref (ai__, Cs'f__),s\<^sub>1'''''''''''''''__\<rangle>" and "P,Ew__ \<turnstile> \<langle>e\<^sub>2'''__,s\<^sub>1'''''''''''''''__\<rangle> \<Rightarrow> \<langle>Val ve__,(h\<^sub>2__, l\<^sub>2__)\<rangle>" and "h\<^sub>2__ ai__ = \<lfloor>(D, Sc__)\<rfloor>" and "P \<turnstile> last Cs'f__ has least Fc__:Ta__ via Csj__" and "P \<turnstile> Ta__ casts ve__ to v' " and "Dsc__ = Cs'f__ @\<^sub>p Csj__" and "(Dsc__, fs) \<in> Sc__" and "fs' = fs(Fc__ \<mapsto> v')" and "S' = Sc__ - {(Dsc__, fs)} \<union> {(Dsc__, fs')}" and "h\<^sub>2' = h\<^sub>2__(ai__ \<mapsto> (D, S'))"   | E :: "char list \<Rightarrow> ty option" and e\<^sub>1 :: "expr" and s\<^sub>0 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and s\<^sub>1 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and e\<^sub>2 :: "expr" and v :: "val" and s\<^sub>2 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and F :: "char list" and Cs :: "char list list" where "a1 = Ex__" and "a2 = e\<^sub>1''''__\<bullet>Fd__{Csk__} := e\<^sub>2''''__" and "a3 = s\<^sub>0''''''''''''''''''''__" and "a4 = Throw (addr_of_sys_xcpt NullPointer, [NullPointer])" and "a5 = s\<^sub>2''__" and "P,Ex__ \<turnstile> \<langle>e\<^sub>1''''__,s\<^sub>0''''''''''''''''''''__\<rangle> \<Rightarrow> \<langle>null,s\<^sub>1''''''''''''''''__\<rangle>" and "P,Ex__ \<turnstile> \<langle>e\<^sub>2''''__,s\<^sub>1''''''''''''''''__\<rangle> \<Rightarrow> \<langle>Val vf__,s\<^sub>2''__\<rangle>"   | E :: "char list \<Rightarrow> ty option" and e\<^sub>1 :: "expr" and s\<^sub>0 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and e' :: "expr" and s\<^sub>1 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and F :: "char list" and Cs :: "char list list" and e\<^sub>2 :: "expr" where "a1 = Ey__" and "a2 = e\<^sub>1'''''__\<bullet>Fe__{Csl__} := e\<^sub>2'''''__" and "a3 = s\<^sub>0'''''''''''''''''''''__" and "a4 = throw e'd__" and "a5 = s\<^sub>1'''''''''''''''''__" and "P,Ey__ \<turnstile> \<langle>e\<^sub>1'''''__,s\<^sub>0'''''''''''''''''''''__\<rangle> \<Rightarrow> \<langle>throw e'd__,s\<^sub>1'''''''''''''''''__\<rangle>"   | E :: "char list \<Rightarrow> ty option" and e\<^sub>1 :: "expr" and s\<^sub>0 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and v :: "val" and s\<^sub>1 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and e\<^sub>2 :: "expr" and e' :: "expr" and s\<^sub>2 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and F :: "char list" and Cs :: "char list list" where "a1 = Ez__" and "a2 = e\<^sub>1''''''__\<bullet>F{Csm__} := e\<^sub>2''''''__" and "a3 = s\<^sub>0''''''''''''''''''''''__" and "a4 = throw e'e__" and "a5 = s\<^sub>2'''__" and "P,Ez__ \<turnstile> \<langle>e\<^sub>1''''''__,s\<^sub>0''''''''''''''''''''''__\<rangle> \<Rightarrow> \<langle>Val vg__,s\<^sub>1''''''''''''''''''__\<rangle>" and "P,Ez__ \<turnstile> \<langle>e\<^sub>2''''''__,s\<^sub>1''''''''''''''''''__\<rangle> \<Rightarrow> \<langle>throw e'e__,s\<^sub>2'''__\<rangle>"   | E :: "char list \<Rightarrow> ty option" and e :: "expr" and s\<^sub>0 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and e' :: "expr" and s\<^sub>1 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and Copt :: "char list option" and M :: "char list" and es :: "expr list" where "a1 = Eaa__" and "a2 = Call er__ Copt__ M__ es__" and "a3 = s\<^sub>0'''''''''''''''''''''''__" and "a4 = throw e'f__" and "a5 = s\<^sub>1'''''''''''''''''''__" and "P,Eaa__ \<turnstile> \<langle>er__,s\<^sub>0'''''''''''''''''''''''__\<rangle> \<Rightarrow> \<langle>throw e'f__,s\<^sub>1'''''''''''''''''''__\<rangle>"   | E :: "char list \<Rightarrow> ty option" and e :: "expr" and s\<^sub>0 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and v :: "val" and s\<^sub>1 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and es :: "expr list" and vs :: "val list" and ex :: "expr" and es' :: "expr list" and s\<^sub>2 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and Copt :: "char list option" and M :: "char list" where "a1 = Eab__" and "a2 = Call et__ Copta__ Ma__ esa__" and "a3 = s\<^sub>0''''''''''''''''''''''''__" and "a4 = throw ex" and "a5 = s\<^sub>2''''__" and "P,Eab__ \<turnstile> \<langle>et__,s\<^sub>0''''''''''''''''''''''''__\<rangle> \<Rightarrow> \<langle>Val vh__,s\<^sub>1''''''''''''''''''''__\<rangle>" and "P,Eab__ \<turnstile> \<langle>esa__,s\<^sub>1''''''''''''''''''''__\<rangle> [\<Rightarrow>] \<langle>map Val vs__ @ throw ex # es',s\<^sub>2''''__\<rangle>"   | E :: "char list \<Rightarrow> ty option" and e :: "expr" and s\<^sub>0 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and a :: "nat" and Cs :: "char list list" and s\<^sub>1 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and ps :: "expr list" and vs :: "val list" and h\<^sub>2 :: "nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option" and l\<^sub>2 :: "char list \<Rightarrow> val option" and C :: "char list" and S :: "(char list list \<times> (char list \<Rightarrow> val option)) set" and M :: "char list" and Ts' :: "ty list" and T' :: "ty" and pns' :: "char list list" and body' :: "expr" and Ds :: "char list list" and Ts :: "ty list" and T :: "ty" and pns :: "char list list" and body :: "expr" and Cs' :: "char list list" and vs' :: "val list" and l\<^sub>2' :: "char list \<Rightarrow> val option" and new_body :: "expr" and e' :: "expr" and h\<^sub>3 :: "nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option" and l\<^sub>3 :: "char list \<Rightarrow> val option" where "a1 = Eac__" and "a2 = Call eu__ None Mb__ ps__" and "a3 = s\<^sub>0'''''''''''''''''''''''''__" and "a4 = e'g__" and "a5 = (h\<^sub>3__, l\<^sub>2'__)" and "P,Eac__ \<turnstile> \<langle>eu__,s\<^sub>0'''''''''''''''''''''''''__\<rangle> \<Rightarrow> \<langle>ref (aj__, Csn__),s\<^sub>1'''''''''''''''''''''__\<rangle>" and "P,Eac__ \<turnstile> \<langle>ps__,s\<^sub>1'''''''''''''''''''''__\<rangle> [\<Rightarrow>] \<langle>map Val vsa__,(h\<^sub>2''__, l\<^sub>2'__)\<rangle>" and "h\<^sub>2''__ aj__ = \<lfloor>(Cm__, S)\<rfloor>" and "P \<turnstile> last Csn__ has least Mb__ = (Ts', T', pns', body') via Dsd__" and "P \<turnstile> (Cm__,Csn__ @\<^sub>p Dsd__) selects Mb__ = (Ts__, Tb__, pns__, body__) via Cs'g__" and "length vsa__ = length pns__" and "P \<turnstile> Ts__ Casts vsa__ to vs'__ " and "l\<^sub>2''__ = [this \<mapsto> Ref (aj__, Cs'g__), pns__ [\<mapsto>] vs'__]" and "new_body = (case T' of Class D \<Rightarrow> \<lparr>D\<rparr>body__ | _ \<Rightarrow> body__)" and "P,Eac__(this \<mapsto> Class (last Cs'g__), pns__ [\<mapsto>] Ts__) \<turnstile> \<langle>new_body,(h\<^sub>2''__, l\<^sub>2''__)\<rangle> \<Rightarrow> \<langle>e'g__,(h\<^sub>3__, l\<^sub>3__)\<rangle>"   | E :: "char list \<Rightarrow> ty option" and e :: "expr" and s\<^sub>0 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and a :: "nat" and Cs :: "char list list" and s\<^sub>1 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and ps :: "expr list" and vs :: "val list" and h\<^sub>2 :: "nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option" and l\<^sub>2 :: "char list \<Rightarrow> val option" and C :: "char list" and Cs'' :: "char list list" and M :: "char list" and Ts :: "ty list" and T :: "ty" and pns :: "char list list" and body :: "expr" and Cs' :: "char list list" and Ds :: "char list list" and vs' :: "val list" and l\<^sub>2' :: "char list \<Rightarrow> val option" and e' :: "expr" and h\<^sub>3 :: "nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option" and l\<^sub>3 :: "char list \<Rightarrow> val option" where "a1 = Ead__" and "a2 = Call ev__ \<lfloor>C\<rfloor> Mc__ ps" and "a3 = s\<^sub>0''''''''''''''''''''''''''__" and "a4 = e'h__" and "a5 = (h\<^sub>3, l\<^sub>2)" and "P,Ead__ \<turnstile> \<langle>ev__,s\<^sub>0''''''''''''''''''''''''''__\<rangle> \<Rightarrow> \<langle>ref (a, Cs),s\<^sub>1''''''''''''''''''''''__\<rangle>" and "P,Ead__ \<turnstile> \<langle>ps,s\<^sub>1''''''''''''''''''''''__\<rangle> [\<Rightarrow>] \<langle>map Val vsb__,(h\<^sub>2, l\<^sub>2)\<rangle>" and "P \<turnstile> Path last Cs to C unique" and "P \<turnstile> Path last Cs to C via Cs'' " and "P \<turnstile> C has least Mc__ = (Ts, Tc__, pns, body) via Cs'" and "Ds = (Cs @\<^sub>p Cs'') @\<^sub>p Cs'" and "length vsb__ = length pns" and "P \<turnstile> Ts Casts vsb__ to vs' " and "l\<^sub>2' = [this \<mapsto> Ref (a, Ds), pns [\<mapsto>] vs']" and "P,Ead__(this \<mapsto> Class (last Ds), pns [\<mapsto>] Ts) \<turnstile> \<langle>body,(h\<^sub>2, l\<^sub>2')\<rangle> \<Rightarrow> \<langle>e'h__,(h\<^sub>3, l\<^sub>3)\<rangle>"   | E :: "char list \<Rightarrow> ty option" and e :: "expr" and s\<^sub>0 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and s\<^sub>1 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and es :: "expr list" and vs :: "val list" and s\<^sub>2 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and Copt :: "char list option" and M :: "char list" where "a1 = Eae__" and "a2 = Call ew__ Copt M es" and "a3 = s\<^sub>0'''''''''''''''''''''''''''__" and "a4 = Throw (addr_of_sys_xcpt NullPointer, [NullPointer])" and "a5 = s\<^sub>2'''''__" and "P,Eae__ \<turnstile> \<langle>ew__,s\<^sub>0'''''''''''''''''''''''''''__\<rangle> \<Rightarrow> \<langle>null,s\<^sub>1'''''''''''''''''''''''__\<rangle>" and "P,Eae__ \<turnstile> \<langle>es,s\<^sub>1'''''''''''''''''''''''__\<rangle> [\<Rightarrow>] \<langle>map Val vs,s\<^sub>2'''''__\<rangle>"   | E :: "char list \<Rightarrow> ty option" and V :: "char list" and T :: "ty" and e\<^sub>0 :: "expr" and h\<^sub>0 :: "nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option" and l\<^sub>0 :: "char list \<Rightarrow> val option" and e\<^sub>1 :: "expr" and h\<^sub>1 :: "nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option" and l\<^sub>1 :: "char list \<Rightarrow> val option" where "a1 = Eaf__" and "a2 = {V:T; e\<^sub>0__}" and "a3 = (h\<^sub>0, l\<^sub>0)" and "a4 = e\<^sub>1'''''''__" and "a5 = (h\<^sub>1, l\<^sub>1(V := l\<^sub>0 V))" and "P,Eaf__(V \<mapsto> T) \<turnstile> \<langle>e\<^sub>0__,(h\<^sub>0, l\<^sub>0(V := None))\<rangle> \<Rightarrow> \<langle>e\<^sub>1'''''''__,(h\<^sub>1, l\<^sub>1)\<rangle>"   | E :: "char list \<Rightarrow> ty option" and e\<^sub>0 :: "expr" and s\<^sub>0 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and v :: "val" and s\<^sub>1 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and e\<^sub>1 :: "expr" and e\<^sub>2 :: "expr" and s\<^sub>2 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" where "a1 = Eag__" and "a2 = e\<^sub>0'__;; e\<^sub>1''''''''__" and "a3 = s\<^sub>0''''''''''''''''''''''''''''__" and "a4 = e\<^sub>2'''''''__" and "a5 = s\<^sub>2''''''__" and "P,Eag__ \<turnstile> \<langle>e\<^sub>0'__,s\<^sub>0''''''''''''''''''''''''''''__\<rangle> \<Rightarrow> \<langle>Val v,s\<^sub>1''''''''''''''''''''''''__\<rangle>" and "P,Eag__ \<turnstile> \<langle>e\<^sub>1''''''''__,s\<^sub>1''''''''''''''''''''''''__\<rangle> \<Rightarrow> \<langle>e\<^sub>2'''''''__,s\<^sub>2''''''__\<rangle>"   | E :: "char list \<Rightarrow> ty option" and e\<^sub>0 :: "expr" and s\<^sub>0 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and e :: "expr" and s\<^sub>1 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and e\<^sub>1 :: "expr" where "a1 = Eah__" and "a2 = e\<^sub>0;; e\<^sub>1'''''''''__" and "a3 = s\<^sub>0'''''''''''''''''''''''''''''__" and "a4 = throw ey__" and "a5 = s\<^sub>1'''''''''''''''''''''''''__" and "P,Eah__ \<turnstile> \<langle>e\<^sub>0,s\<^sub>0'''''''''''''''''''''''''''''__\<rangle> \<Rightarrow> \<langle>throw ey__,s\<^sub>1'''''''''''''''''''''''''__\<rangle>"   | E :: "char list \<Rightarrow> ty option" and e :: "expr" and s\<^sub>0 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and s\<^sub>1 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and e\<^sub>1 :: "expr" and e' :: "expr" and s\<^sub>2 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and e\<^sub>2 :: "expr" where "a1 = Eai__" and "a2 = if (ez__) e\<^sub>1''''''''''__ else e\<^sub>2''''''''__" and "a3 = s\<^sub>0''''''''''''''''''''''''''''''__" and "a4 = e'i__" and "a5 = s\<^sub>2'''''''__" and "P,Eai__ \<turnstile> \<langle>ez__,s\<^sub>0''''''''''''''''''''''''''''''__\<rangle> \<Rightarrow> \<langle>true,s\<^sub>1''''''''''''''''''''''''''__\<rangle>" and "P,Eai__ \<turnstile> \<langle>e\<^sub>1''''''''''__,s\<^sub>1''''''''''''''''''''''''''__\<rangle> \<Rightarrow> \<langle>e'i__,s\<^sub>2'''''''__\<rangle>"   | E :: "char list \<Rightarrow> ty option" and e :: "expr" and s\<^sub>0 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and s\<^sub>1 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and e\<^sub>2 :: "expr" and e' :: "expr" and s\<^sub>2 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and e\<^sub>1 :: "expr" where "a1 = Eaj__" and "a2 = if (fa__) e\<^sub>1'''''''''''__ else e\<^sub>2'''''''''__" and "a3 = s\<^sub>0'''''''''''''''''''''''''''''''__" and "a4 = e'j__" and "a5 = s\<^sub>2''''''''__" and "P,Eaj__ \<turnstile> \<langle>fa__,s\<^sub>0'''''''''''''''''''''''''''''''__\<rangle> \<Rightarrow> \<langle>false,s\<^sub>1'''''''''''''''''''''''''''__\<rangle>" and "P,Eaj__ \<turnstile> \<langle>e\<^sub>2'''''''''__,s\<^sub>1'''''''''''''''''''''''''''__\<rangle> \<Rightarrow> \<langle>e'j__,s\<^sub>2''''''''__\<rangle>"   | E :: "char list \<Rightarrow> ty option" and e :: "expr" and s\<^sub>0 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and e' :: "expr" and s\<^sub>1 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and e\<^sub>1 :: "expr" and e\<^sub>2 :: "expr" where "a1 = Eak__" and "a2 = if (fb__) e\<^sub>1 else e\<^sub>2" and "a3 = s\<^sub>0''''''''''''''''''''''''''''''''__" and "a4 = throw e'k__" and "a5 = s\<^sub>1''''''''''''''''''''''''''''__" and "P,Eak__ \<turnstile> \<langle>fb__,s\<^sub>0''''''''''''''''''''''''''''''''__\<rangle> \<Rightarrow> \<langle>throw e'k__,s\<^sub>1''''''''''''''''''''''''''''__\<rangle>"   | E :: "char list \<Rightarrow> ty option" and e :: "expr" and s\<^sub>0 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and s\<^sub>1 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and c :: "expr" where "a1 = Eal__" and "a2 = while (fc__) c__" and "a3 = s\<^sub>0'''''''''''''''''''''''''''''''''__" and "a4 = unit" and "a5 = s\<^sub>1'''''''''''''''''''''''''''''__" and "P,Eal__ \<turnstile> \<langle>fc__,s\<^sub>0'''''''''''''''''''''''''''''''''__\<rangle> \<Rightarrow> \<langle>false,s\<^sub>1'''''''''''''''''''''''''''''__\<rangle>"   | E :: "char list \<Rightarrow> ty option" and e :: "expr" and s\<^sub>0 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and s\<^sub>1 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and c :: "expr" and v\<^sub>1 :: "val" and s\<^sub>2 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and e\<^sub>3 :: "expr" and s\<^sub>3 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" where "a1 = Eam__" and "a2 = while (fd__) ca__" and "a3 = s\<^sub>0''''''''''''''''''''''''''''''''''__" and "a4 = e\<^sub>3" and "a5 = s\<^sub>3" and "P,Eam__ \<turnstile> \<langle>fd__,s\<^sub>0''''''''''''''''''''''''''''''''''__\<rangle> \<Rightarrow> \<langle>true,s\<^sub>1''''''''''''''''''''''''''''''__\<rangle>" and "P,Eam__ \<turnstile> \<langle>ca__,s\<^sub>1''''''''''''''''''''''''''''''__\<rangle> \<Rightarrow> \<langle>Val v\<^sub>1,s\<^sub>2'''''''''__\<rangle>" and "P,Eam__ \<turnstile> \<langle>while (fd__) ca__,s\<^sub>2'''''''''__\<rangle> \<Rightarrow> \<langle>e\<^sub>3,s\<^sub>3\<rangle>"   | E :: "char list \<Rightarrow> ty option" and e :: "expr" and s\<^sub>0 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and e' :: "expr" and s\<^sub>1 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and c :: "expr" where "a1 = Ean__" and "a2 = while (fe__) cb__" and "a3 = s\<^sub>0'''''''''''''''''''''''''''''''''''__" and "a4 = throw e'l__" and "a5 = s\<^sub>1'''''''''''''''''''''''''''''''__" and "P,Ean__ \<turnstile> \<langle>fe__,s\<^sub>0'''''''''''''''''''''''''''''''''''__\<rangle> \<Rightarrow> \<langle>throw e'l__,s\<^sub>1'''''''''''''''''''''''''''''''__\<rangle>"   | E :: "char list \<Rightarrow> ty option" and e :: "expr" and s\<^sub>0 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and s\<^sub>1 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and c :: "expr" and e' :: "expr" and s\<^sub>2 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" where "a1 = Eao__" and "a2 = while (ff__) c" and "a3 = s\<^sub>0''''''''''''''''''''''''''''''''''''__" and "a4 = throw e'm__" and "a5 = s\<^sub>2" and "P,Eao__ \<turnstile> \<langle>ff__,s\<^sub>0''''''''''''''''''''''''''''''''''''__\<rangle> \<Rightarrow> \<langle>true,s\<^sub>1''''''''''''''''''''''''''''''''__\<rangle>" and "P,Eao__ \<turnstile> \<langle>c,s\<^sub>1''''''''''''''''''''''''''''''''__\<rangle> \<Rightarrow> \<langle>throw e'm__,s\<^sub>2\<rangle>"   | E :: "char list \<Rightarrow> ty option" and e :: "expr" and s\<^sub>0 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and r :: "nat \<times> char list list" and s\<^sub>1 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" where "a1 = Eap__" and "a2 = throw fg__" and "a3 = s\<^sub>0'''''''''''''''''''''''''''''''''''''__" and "a4 = Throw r" and "a5 = s\<^sub>1'''''''''''''''''''''''''''''''''__" and "P,Eap__ \<turnstile> \<langle>fg__,s\<^sub>0'''''''''''''''''''''''''''''''''''''__\<rangle> \<Rightarrow> \<langle>ref r,s\<^sub>1'''''''''''''''''''''''''''''''''__\<rangle>"   | E :: "char list \<Rightarrow> ty option" and e :: "expr" and s\<^sub>0 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and s\<^sub>1 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" where "a1 = Eaq__" and "a2 = throw fh__" and "a3 = s\<^sub>0''''''''''''''''''''''''''''''''''''''__" and "a4 = Throw (addr_of_sys_xcpt NullPointer, [NullPointer])" and "a5 = s\<^sub>1''''''''''''''''''''''''''''''''''__" and "P,Eaq__ \<turnstile> \<langle>fh__,s\<^sub>0''''''''''''''''''''''''''''''''''''''__\<rangle> \<Rightarrow> \<langle>null,s\<^sub>1''''''''''''''''''''''''''''''''''__\<rangle>"   | E :: "char list \<Rightarrow> ty option" and e :: "expr" and s\<^sub>0 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" and e' :: "expr" and s\<^sub>1 :: "(nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option) \<times> (char list \<Rightarrow> val option)" where "a1 = E" and "a2 = throw e" and "a3 = s\<^sub>0" and "a4 = throw e'" and "a5 = s\<^sub>1" and "P,E \<turnstile> \<langle>e,s\<^sub>0\<rangle> \<Rightarrow> \<langle>throw e',s\<^sub>1\<rangle>"