cases: fixes 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)"   and 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" 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 = Ea__" and "a2 = new C__" and "a3 = (ha__, la__)" and "a4 = ref (a__, [C__])" and "a5 = (h'b__, la__)" and "new_Addr ha__ = \<lfloor>a__\<rfloor>" and "h'b__ = ha__(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 = Eb__" and "a2 = new Ca__" and "a3 = (hb__, lb__)" and "a4 = Throw (addr_of_sys_xcpt OutOfMemory, [OutOfMemory])" and "a5 = (hb__, lb__)" and "new_Addr hb__ = None"   | E :: "char list \<Rightarrow> ty option" and e :: "expr" and s :: "(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' :: "(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 = Ec__" and "a2 = \<lparr>Cb__\<rparr>ea__" and "a3 = s__" and "a4 = \<lparr>Cb__\<rparr>e'b__" and "a5 = s'__" and "P,Ec__ \<turnstile> \<langle>ea__,s__\<rangle> \<rightarrow> \<langle>e'b__,s'__\<rangle>"   | E :: "char list \<Rightarrow> ty option" and C :: "char list" 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 = Ed__" and "a2 = \<lparr>Cc__\<rparr>null" and "a3 = sa__" and "a4 = null" and "a5 = sa__"   | Cs :: "char list list" and C :: "char list" and Cs' :: "char list list" and Ds :: "char list list" and E :: "char list \<Rightarrow> ty option" and a :: "nat" 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 = Ee__" and "a2 = \<lparr>Cd__\<rparr>ref (aa__, Cs__)" and "a3 = sb__" and "a4 = ref (aa__, Ds__)" and "a5 = sb__" and "P \<turnstile> Path last Cs__ to Cd__ via Cs'__ " and "Ds__ = Cs__ @\<^sub>p Cs'__"   | E :: "char list \<Rightarrow> ty option" and C :: "char list" and a :: "nat" and Cs :: "char list list" and Cs' :: "char list list" 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 = Ef__" and "a2 = \<lparr>Ce__\<rparr>ref (ab__, Csa__ @ [Ce__] @ Cs'a__)" and "a3 = sc__" and "a4 = ref (ab__, Csa__ @ [Ce__])" and "a5 = sc__"   | C :: "char list" and Cs :: "char list list" and E :: "char list \<Rightarrow> ty option" and a :: "nat" 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 = Eg__" and "a2 = \<lparr>Cf__\<rparr>ref (ac__, Csb__)" and "a3 = sd__" and "a4 = Throw (addr_of_sys_xcpt ClassCast, [ClassCast])" and "a5 = sd__" and "Cf__ \<notin> set Csb__" and "(last Csb__, Cf__) \<notin> (subcls1 P)\<^sup>*"   | E :: "char list \<Rightarrow> ty option" and e :: "expr" and s :: "(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' :: "(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 = Eh__" and "a2 = Cast Cg__ eb__" and "a3 = se__" and "a4 = Cast Cg__ e'c__" and "a5 = s'a__" and "P,Eh__ \<turnstile> \<langle>eb__,se__\<rangle> \<rightarrow> \<langle>e'c__,s'a__\<rangle>"   | E :: "char list \<Rightarrow> ty option" and C :: "char list" 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 = Ei__" and "a2 = Cast Ch__ null" and "a3 = sf__" and "a4 = null" and "a5 = sf__"   | Cs :: "char list list" and C :: "char list" and Cs' :: "char list list" and Ds :: "char list list" and E :: "char list \<Rightarrow> ty option" and a :: "nat" 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 = Ej__" and "a2 = Cast Ci__ (ref (ad__, Csc__))" and "a3 = sg__" and "a4 = ref (ad__, Dsa__)" and "a5 = sg__" and "P \<turnstile> Path last Csc__ to Ci__ unique" and "P \<turnstile> Path last Csc__ to Ci__ via Cs'b__ " and "Dsa__ = Csc__ @\<^sub>p Cs'b__"   | E :: "char list \<Rightarrow> ty option" and C :: "char list" and a :: "nat" and Cs :: "char list list" and Cs' :: "char list list" 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 = Ek__" and "a2 = Cast Cj__ (ref (ae__, Csd__ @ [Cj__] @ Cs'c__))" and "a3 = sh__" and "a4 = ref (ae__, Csd__ @ [Cj__])" and "a5 = sh__"   | s :: "(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 D :: "char list" and S :: "(char list list \<times> (char list \<Rightarrow> val option)) set" and C :: "char list" and Cs' :: "char list list" and E :: "char list \<Rightarrow> ty option" and Cs :: "char list list" where "a1 = El__" and "a2 = Cast Ck__ (ref (af__, Cse__))" and "a3 = si__" and "a4 = ref (af__, Cs'd__)" and "a5 = si__" and "hp si__ af__ = \<lfloor>(D__, S__)\<rfloor>" and "P \<turnstile> Path D__ to Ck__ via Cs'd__ " and "P \<turnstile> Path D__ to Ck__ unique"   | s :: "(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 D :: "char list" and S :: "(char list list \<times> (char list \<Rightarrow> val option)) set" and C :: "char list" and Cs :: "char list list" and E :: "char list \<Rightarrow> ty option" where "a1 = Em__" and "a2 = Cast Cl__ (ref (ag__, Csf__))" and "a3 = sj__" and "a4 = null" and "a5 = sj__" and "hp sj__ ag__ = \<lfloor>(Da__, Sa__)\<rfloor>" and "\<not> P \<turnstile> Path Da__ to Cl__ unique" and "\<not> P \<turnstile> Path last Csf__ to Cl__ unique" and "Cl__ \<notin> set Csf__"   | E :: "char list \<Rightarrow> ty option" and e :: "expr" and s :: "(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' :: "(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 = En__" and "a2 = ec__ \<guillemotleft>bop__\<guillemotright> e\<^sub>2__" and "a3 = sk__" and "a4 = e'd__ \<guillemotleft>bop__\<guillemotright> e\<^sub>2__" and "a5 = s'b__" and "P,En__ \<turnstile> \<langle>ec__,sk__\<rangle> \<rightarrow> \<langle>e'd__,s'b__\<rangle>"   | E :: "char list \<Rightarrow> ty option" and e :: "expr" and s :: "(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' :: "(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 bop :: "bop" where "a1 = Eo__" and "a2 = Val v\<^sub>1__ \<guillemotleft>bopa__\<guillemotright> ed__" and "a3 = sl__" and "a4 = Val v\<^sub>1__ \<guillemotleft>bopa__\<guillemotright> e'e__" and "a5 = s'c__" and "P,Eo__ \<turnstile> \<langle>ed__,sl__\<rangle> \<rightarrow> \<langle>e'e__,s'c__\<rangle>"   | bop :: "bop" and v\<^sub>1 :: "val" and v\<^sub>2 :: "val" and v :: "val" and E :: "char list \<Rightarrow> ty option" 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 = Ep__" and "a2 = Val v\<^sub>1'__ \<guillemotleft>bopb__\<guillemotright> Val v\<^sub>2" and "a3 = sm__" and "a4 = Val v__" and "a5 = sm__" and "binop (bopb__, v\<^sub>1'__, v\<^sub>2) = \<lfloor>v__\<rfloor>"   | s :: "(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" and v :: "val" and E :: "char list \<Rightarrow> ty option" where "a1 = Eq__" and "a2 = Var V__" and "a3 = sn__" and "a4 = Val va__" and "a5 = sn__" and "lcl sn__ V__ = \<lfloor>va__\<rfloor>"   | E :: "char list \<Rightarrow> ty option" and e :: "expr" and s :: "(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' :: "(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 = Er__" and "a2 = Va__:=ee__" and "a3 = so__" and "a4 = Va__:=e'f__" and "a5 = s'd__" and "P,Er__ \<turnstile> \<langle>ee__,so__\<rangle> \<rightarrow> \<langle>e'f__,s'd__\<rangle>"   | E :: "char list \<Rightarrow> ty option" and V :: "char list" and T :: "ty" and v :: "val" 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" where "a1 = Es__" and "a2 = Vb__:=Val vb__" and "a3 = (hc__, lc__)" and "a4 = Val v'__" and "a5 = (hc__, lc__(Vb__ \<mapsto> v'__))" and "Es__ Vb__ = \<lfloor>T__\<rfloor>" and "P \<turnstile> T__ casts vb__ to v'__ "   | E :: "char list \<Rightarrow> ty option" and e :: "expr" and s :: "(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' :: "(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 = Et__" and "a2 = ef__\<bullet>F__{Csg__}" and "a3 = sp__" and "a4 = e'g__\<bullet>F__{Csg__}" and "a5 = s'e__" and "P,Et__ \<turnstile> \<langle>ef__,sp__\<rangle> \<rightarrow> \<langle>e'g__,s'e__\<rangle>"   | s :: "(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 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 Cs :: "char list list" and fs :: "char list \<Rightarrow> val option" and F :: "char list" and v :: "val" and E :: "char list \<Rightarrow> ty option" where "a1 = Eu__" and "a2 = ref (ah__, Cs'e__)\<bullet>Fa__{Csh__}" and "a3 = sq__" and "a4 = Val vc__" and "a5 = sq__" and "hp sq__ ah__ = \<lfloor>(Db__, Sb__)\<rfloor>" and "Dsb__ = Cs'e__ @\<^sub>p Csh__" and "(Dsb__, fs__) \<in> Sb__" and "fs__ Fa__ = \<lfloor>vc__\<rfloor>"   | E :: "char list \<Rightarrow> ty option" and F :: "char list" and Cs :: "char list list" 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 = Ev__" and "a2 = null\<bullet>Fb__{Csi__}" and "a3 = sr__" and "a4 = Throw (addr_of_sys_xcpt NullPointer, [NullPointer])" and "a5 = sr__"   | E :: "char list \<Rightarrow> ty option" and e :: "expr" and s :: "(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' :: "(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 = Ew__" and "a2 = eg__\<bullet>Fc__{Csj__} := e\<^sub>2'__" and "a3 = ss__" and "a4 = e'h__\<bullet>Fc__{Csj__} := e\<^sub>2'__" and "a5 = s'f__" and "P,Ew__ \<turnstile> \<langle>eg__,ss__\<rangle> \<rightarrow> \<langle>e'h__,s'f__\<rangle>"   | E :: "char list \<Rightarrow> ty option" and e :: "expr" and s :: "(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' :: "(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 F :: "char list" and Cs :: "char list list" where "a1 = Ex__" and "a2 = Val vd__\<bullet>Fd__{Csk__} := eh__" and "a3 = st__" and "a4 = Val vd__\<bullet>Fd__{Csk__} := e'i__" and "a5 = s'g__" and "P,Ex__ \<turnstile> \<langle>eh__,st__\<rangle> \<rightarrow> \<langle>e'i__,s'g__\<rangle>"   | h :: "nat \<Rightarrow> (char list \<times> (char list list \<times> (char list \<Rightarrow> val option)) set) option" and a :: "nat" and D :: "char list" and S :: "(char list list \<times> (char list \<Rightarrow> val option)) set" and Cs' :: "char list list" and F :: "char list" and T :: "ty" and Cs :: "char list list" and v :: "val" and v' :: "val" and Ds :: "char list list" and fs :: "char list \<Rightarrow> val option" and E :: "char list \<Rightarrow> ty option" and l :: "char list \<Rightarrow> val option" where "a1 = Ey__" and "a2 = ref (ai__, Cs'f__)\<bullet>Fe__{Csl__} := Val ve__" and "a3 = (hd__, ld__)" and "a4 = Val v'a__" and "a5 = (hd__(ai__ \<mapsto> (D, insert (Dsc__, fs(Fe__ \<mapsto> v'a__)) (Sc__ - {(Dsc__, fs)}))), ld__)" and "hd__ ai__ = \<lfloor>(D, Sc__)\<rfloor>" and "P \<turnstile> last Cs'f__ has least Fe__:Ta__ via Csl__" and "P \<turnstile> Ta__ casts ve__ to v'a__ " and "Dsc__ = Cs'f__ @\<^sub>p Csl__" and "(Dsc__, fs) \<in> Sc__"   | E :: "char list \<Rightarrow> ty option" and F :: "char list" and Cs :: "char list list" 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 = Ez__" and "a2 = null\<bullet>Ff__{Csm__} := Val vf__" and "a3 = su__" and "a4 = Throw (addr_of_sys_xcpt NullPointer, [NullPointer])" and "a5 = su__"   | E :: "char list \<Rightarrow> ty option" and e :: "expr" and s :: "(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' :: "(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 ei__ Copt__ M__ es__" and "a3 = sv__" and "a4 = Call e'j__ Copt__ M__ es__" and "a5 = s'h__" and "P,Eaa__ \<turnstile> \<langle>ei__,sv__\<rangle> \<rightarrow> \<langle>e'j__,s'h__\<rangle>"   | E :: "char list \<Rightarrow> ty option" and es :: "expr list" and s :: "(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 s' :: "(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 Copt :: "char list option" and M :: "char list" where "a1 = Eab__" and "a2 = Call (Val vg__) Copta__ Ma__ esa__" and "a3 = sw__" and "a4 = Call (Val vg__) Copta__ Ma__ es'__" and "a5 = s'i__" and "P,Eab__ \<turnstile> \<langle>esa__,sw__\<rangle> [\<rightarrow>] \<langle>es'__,s'i__\<rangle>"   | s :: "(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 C :: "char list" and S :: "(char list list \<times> (char list \<Rightarrow> val option)) set" 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 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 bs :: "expr" and new_body :: "expr" and E :: "char list \<Rightarrow> ty option" where "a1 = Eac__" and "a2 = Call (ref (aj__, Csn__)) None Mb__ (map Val vs__)" and "a3 = sx__" and "a4 = new_body" and "a5 = sx__" and "hp sx__ 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 vs__ = length pns__" and "length Ts__ = length pns__" and "bs = blocks (this # pns__, Class (last Cs'g__) # Ts__, Ref (aj__, Cs'g__) # vs__, body__)" and "new_body = (case T' of Class D \<Rightarrow> \<lparr>D\<rparr>bs | _ \<Rightarrow> bs)"   | Cs :: "char list list" 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 E :: "char list \<Rightarrow> ty option" and a :: "nat" 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 = Ead__" and "a2 = Call (ref (a, Cso__)) \<lfloor>Cn__\<rfloor> Mc__ (map Val vsa__)" and "a3 = sy__" and "a4 = blocks (this # pns, Class (last Ds) # Ts, Ref (a, Ds) # vsa__, body)" and "a5 = sy__" and "P \<turnstile> Path last Cso__ to Cn__ unique" and "P \<turnstile> Path last Cso__ to Cn__ via Cs'' " and "P \<turnstile> Cn__ has least Mc__ = (Ts, Tc__, pns, body) via Cs'" and "Ds = (Cso__ @\<^sub>p Cs'') @\<^sub>p Cs'" and "length vsa__ = length pns" and "length Ts = length pns"   | E :: "char list \<Rightarrow> ty option" and Copt :: "char list option" and M :: "char list" and vs :: "val list" 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 = Eae__" and "a2 = Call null Coptb__ Md__ (map Val vsb__)" and "a3 = sz__" and "a4 = Throw (addr_of_sys_xcpt NullPointer, [NullPointer])" and "a5 = sz__"   | E :: "char list \<Rightarrow> ty option" and V :: "char list" and T :: "ty" and e :: "expr" 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 e' :: "expr" 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" where "a1 = Eaf__" and "a2 = {Vc__:Td__; ej__}" and "a3 = (he__, le__)" and "a4 = {Vc__:Td__; e'k__}" and "a5 = (h'c__, l'b__(Vc__ := le__ Vc__))" and "P,Eaf__(Vc__ \<mapsto> Td__) \<turnstile> \<langle>ej__,(he__, le__(Vc__ := None))\<rangle> \<rightarrow> \<langle>e'k__,(h'c__, l'b__)\<rangle>" and "l'b__ Vc__ = None" and "\<not> assigned Vc__ ej__"   | E :: "char list \<Rightarrow> ty option" and V :: "char list" and T :: "ty" and e :: "expr" 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 e' :: "expr" 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 :: "val" where "a1 = Eag__" and "a2 = {Vd__:Te__; ek__}" and "a3 = (hf__, lf__)" and "a4 = {Vd__:Te__; Vd__:=Val vh__;; e'l__}" and "a5 = (h'd__, l'c__(Vd__ := lf__ Vd__))" and "P,Eag__(Vd__ \<mapsto> Te__) \<turnstile> \<langle>ek__,(hf__, lf__(Vd__ := None))\<rangle> \<rightarrow> \<langle>e'l__,(h'd__, l'c__)\<rangle>" and "l'c__ Vd__ = \<lfloor>vh__\<rfloor>" and "\<not> assigned Vd__ ek__"   | E :: "char list \<Rightarrow> ty option" and V :: "char list" and T :: "ty" and e :: "expr" 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' :: "val" and e' :: "expr" 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'' :: "val" and v :: "val" where "a1 = Eah__" and "a2 = {Ve__:Tf__; Ve__:=Val vi__;; el__}" and "a3 = (h, l)" and "a4 = {Ve__:Tf__; Ve__:=Val v'';; e'm__}" and "a5 = (h', l'(Ve__ := l Ve__))" and "P,Eah__(Ve__ \<mapsto> Tf__) \<turnstile> \<langle>el__,(h, l(Ve__ \<mapsto> v'b__))\<rangle> \<rightarrow> \<langle>e'm__,(h', l')\<rangle>" and "l' Ve__ = \<lfloor>v''\<rfloor>" and "P \<turnstile> Tf__ casts vi__ to v'b__ "   | E :: "char list \<Rightarrow> ty option" and V :: "char list" and T :: "ty" and u :: "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 = Eai__" and "a2 = {Vf__:Tg__; Val u__}" and "a3 = ta__" and "a4 = Val u__" and "a5 = ta__"   | T :: "ty" and v :: "val" and v' :: "val" and E :: "char list \<Rightarrow> ty option" and V :: "char list" and u :: "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 = Eaj__" and "a2 = {Vg__:Th__; Vg__:=Val vj__;; Val u}" and "a3 = tb__" and "a4 = Val u" and "a5 = tb__" and "P \<turnstile> Th__ casts vj__ to v'c__ "   | E :: "char list \<Rightarrow> ty option" and e :: "expr" and s :: "(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' :: "(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 = Eak__" and "a2 = em__;; e\<^sub>2''__" and "a3 = tc__" and "a4 = e'n__;; e\<^sub>2''__" and "a5 = s'j__" and "P,Eak__ \<turnstile> \<langle>em__,tc__\<rangle> \<rightarrow> \<langle>e'n__,s'j__\<rangle>"   | E :: "char list \<Rightarrow> ty option" and v :: "val" and e\<^sub>2 :: "expr" 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 = Eal__" and "a2 = Val vk__;; e\<^sub>2'''__" and "a3 = td__" and "a4 = e\<^sub>2'''__" and "a5 = td__"   | E :: "char list \<Rightarrow> ty option" and e :: "expr" and s :: "(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' :: "(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 = Eam__" and "a2 = if (en__) e\<^sub>1'__ else e\<^sub>2''''__" and "a3 = te__" and "a4 = if (e'o__) e\<^sub>1'__ else e\<^sub>2''''__" and "a5 = s'k__" and "P,Eam__ \<turnstile> \<langle>en__,te__\<rangle> \<rightarrow> \<langle>e'o__,s'k__\<rangle>"   | E :: "char list \<Rightarrow> ty option" and e\<^sub>1 :: "expr" and e\<^sub>2 :: "expr" 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 = Ean__" and "a2 = if (true) e\<^sub>1''__ else e\<^sub>2'''''__" and "a3 = tf__" and "a4 = e\<^sub>1''__" and "a5 = tf__"   | E :: "char list \<Rightarrow> ty option" and e\<^sub>1 :: "expr" and e\<^sub>2 :: "expr" 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 = Eao__" and "a2 = if (false) e\<^sub>1'''__ else e\<^sub>2''''''__" and "a3 = tg__" and "a4 = e\<^sub>2''''''__" and "a5 = tg__"   | E :: "char list \<Rightarrow> ty option" and b :: "expr" and c :: "expr" 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 = Eap__" and "a2 = while (b) c" and "a3 = th__" and "a4 = if (b) (c;; while (b) c) else unit" and "a5 = th__"   | E :: "char list \<Rightarrow> ty option" and e :: "expr" and s :: "(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' :: "(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 e" and "a3 = ti__" and "a4 = throw e'" and "a5 = s'" and "P,Eaq__ \<turnstile> \<langle>e,ti__\<rangle> \<rightarrow> \<langle>e',s'\<rangle>"   | E :: "char list \<Rightarrow> ty option" 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 = Ear__" and "a2 = throw null" and "a3 = tj__" and "a4 = Throw (addr_of_sys_xcpt NullPointer, [NullPointer])" and "a5 = tj__"   | E :: "char list \<Rightarrow> ty option" and C :: "char list" and r :: "nat \<times> char list list" 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 = Eas__" and "a2 = Cast Co__ (Throw r__)" and "a3 = tk__" and "a4 = Throw r__" and "a5 = tk__"   | E :: "char list \<Rightarrow> ty option" and C :: "char list" and r :: "nat \<times> char list list" 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 = Eat__" and "a2 = \<lparr>C\<rparr>Throw ra__" and "a3 = tl__" and "a4 = Throw ra__" and "a5 = tl__"   | E :: "char list \<Rightarrow> ty option" and r :: "nat \<times> char list list" and bop :: "bop" and e\<^sub>2 :: "expr" 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 = Eau__" and "a2 = Throw rb__ \<guillemotleft>bopc__\<guillemotright> e\<^sub>2'''''''__" and "a3 = tm__" and "a4 = Throw rb__" and "a5 = tm__"   | E :: "char list \<Rightarrow> ty option" and v\<^sub>1 :: "val" and bop :: "bop" and r :: "nat \<times> char list list" 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 = Eav__" and "a2 = Val v\<^sub>1 \<guillemotleft>bop\<guillemotright> Throw rc__" and "a3 = tn__" and "a4 = Throw rc__" and "a5 = tn__"   | E :: "char list \<Rightarrow> ty option" and V :: "char list" and r :: "nat \<times> char list list" 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 = Eaw__" and "a2 = Vh__:=Throw rd__" and "a3 = to__" and "a4 = Throw rd__" and "a5 = to__"   | E :: "char list \<Rightarrow> ty option" and r :: "nat \<times> char list list" and F :: "char list" and Cs :: "char list list" 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 = Eax__" and "a2 = Throw re__\<bullet>Fg__{Csp__}" and "a3 = tp__" and "a4 = Throw re__" and "a5 = tp__"   | E :: "char list \<Rightarrow> ty option" and r :: "nat \<times> char list list" and F :: "char list" and Cs :: "char list list" and e\<^sub>2 :: "expr" 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 = Eay__" and "a2 = Throw rf__\<bullet>Fh__{Csq__} := e\<^sub>2''''''''__" and "a3 = tq__" and "a4 = Throw rf__" and "a5 = tq__"   | E :: "char list \<Rightarrow> ty option" and v :: "val" and F :: "char list" and Cs :: "char list list" and r :: "nat \<times> char list list" 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 = Eaz__" and "a2 = Val vl__\<bullet>F{Cs} := Throw rg__" and "a3 = tr__" and "a4 = Throw rg__" and "a5 = tr__"   | E :: "char list \<Rightarrow> ty option" and r :: "nat \<times> char list list" and Copt :: "char list option" and M :: "char list" and es :: "expr list" 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 = Eba__" and "a2 = Call (Throw rh__) Coptc__ Me__ esb__" and "a3 = ts__" and "a4 = Throw rh__" and "a5 = ts__"   | es :: "expr list" and vs :: "val list" and r :: "nat \<times> char list list" and es' :: "expr list" and E :: "char list \<Rightarrow> ty option" and v :: "val" and Copt :: "char list option" and M :: "char list" 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 = Ebb__" and "a2 = Call (Val vm__) Copt M es" and "a3 = tt__" and "a4 = Throw ri__" and "a5 = tt__" and "es = map Val vs @ Throw ri__ # es'"   | E :: "char list \<Rightarrow> ty option" and V :: "char list" and T :: "ty" and r :: "nat \<times> char list list" 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 = Ebc__" and "a2 = {Vi__:Ti__; Throw rj__}" and "a3 = tu__" and "a4 = Throw rj__" and "a5 = tu__"   | T :: "ty" and v :: "val" and v' :: "val" and E :: "char list \<Rightarrow> ty option" and V :: "char list" and r :: "nat \<times> char list list" 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 = Ebd__" and "a2 = {V:T; V:=Val v;; Throw rk__}" and "a3 = tv__" and "a4 = Throw rk__" and "a5 = tv__" and "P \<turnstile> T casts v to v' "   | E :: "char list \<Rightarrow> ty option" and r :: "nat \<times> char list list" and e\<^sub>2 :: "expr" 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 = Ebe__" and "a2 = Throw rl__;; e\<^sub>2'''''''''__" and "a3 = tw__" and "a4 = Throw rl__" and "a5 = tw__"   | E :: "char list \<Rightarrow> ty option" and r :: "nat \<times> char list list" and e\<^sub>1 :: "expr" and e\<^sub>2 :: "expr" 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 = Ebf__" and "a2 = if (Throw rm__) e\<^sub>1 else e\<^sub>2" and "a3 = tx__" and "a4 = Throw rm__" and "a5 = tx__"   | E :: "char list \<Rightarrow> ty option" and r :: "nat \<times> char list list" 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 = E" and "a2 = throw (Throw r)" and "a3 = s" and "a4 = Throw r" and "a5 = s"