cases: fixes a1 :: "char list exp"   and a2 :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)"   and a3 :: "char list exp"   and a4 :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)"   and 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" assumes "P \<turnstile> \<langle>a1,a2\<rangle> \<rightarrow> \<langle>a3,a4\<rangle>" obtains h :: "nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option" and a :: "nat" and C :: "char list" and FDTs :: "((char list \<times> char list) \<times> ty) list" and h' :: "nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option" and l :: "char list \<Rightarrow> val option" where "a1 = new C__" and "a2 = (ha__, la__)" and "a3 = addr a__" and "a4 = (h'b__, la__)" and "new_Addr ha__ = \<lfloor>a__\<rfloor>" and "P \<turnstile> C__ has_fields FDTs" and "h'b__ = ha__(a__ \<mapsto> (C__, init_fields FDTs))"   | h :: "nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option" and C :: "char list" and l :: "char list \<Rightarrow> val option" where "a1 = new Ca__" and "a2 = (hb__, lb__)" and "a3 = THROW OutOfMemory" and "a4 = (hb__, lb__)" and "new_Addr hb__ = None"   | e :: "char list exp" and s :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" and e' :: "char list exp" and s' :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" and C :: "char list" where "a1 = Cast Cb__ ea__" and "a2 = s__" and "a3 = Cast Cb__ e'b__" and "a4 = s'__" and "P \<turnstile> \<langle>ea__,s__\<rangle> \<rightarrow> \<langle>e'b__,s'__\<rangle>"   | C :: "char list" and s :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" where "a1 = Cast Cc__ null" and "a2 = sa__" and "a3 = null" and "a4 = sa__"   | s :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" and a :: "nat" and D :: "char list" and fs :: "char list \<times> char list \<Rightarrow> val option" and C :: "char list" where "a1 = Cast Cd__ (addr aa__)" and "a2 = sb__" and "a3 = addr aa__" and "a4 = sb__" and "hp sb__ aa__ = \<lfloor>(D__, fs__)\<rfloor>" and "P \<turnstile> D__ \<preceq>\<^sup>* Cd__"   | s :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" and a :: "nat" and D :: "char list" and fs :: "char list \<times> char list \<Rightarrow> val option" and C :: "char list" where "a1 = Cast Ce__ (addr ab__)" and "a2 = sc__" and "a3 = THROW ClassCast" and "a4 = sc__" and "hp sc__ ab__ = \<lfloor>(Da__, fsa__)\<rfloor>" and "(Da__, Ce__) \<notin> (subcls1 P)\<^sup>*"   | e :: "char list exp" and s :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" and e' :: "char list exp" and s' :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" and bop :: "bop" and e\<^sub>2 :: "char list exp" where "a1 = eb__ \<guillemotleft>bop__\<guillemotright> e\<^sub>2__" and "a2 = sd__" and "a3 = e'c__ \<guillemotleft>bop__\<guillemotright> e\<^sub>2__" and "a4 = s'a__" and "P \<turnstile> \<langle>eb__,sd__\<rangle> \<rightarrow> \<langle>e'c__,s'a__\<rangle>"   | e :: "char list exp" and s :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" and e' :: "char list exp" and s' :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" and v\<^sub>1 :: "val" and bop :: "bop" where "a1 = Val v\<^sub>1__ \<guillemotleft>bopa__\<guillemotright> ec__" and "a2 = se__" and "a3 = Val v\<^sub>1__ \<guillemotleft>bopa__\<guillemotright> e'd__" and "a4 = s'b__" and "P \<turnstile> \<langle>ec__,se__\<rangle> \<rightarrow> \<langle>e'd__,s'b__\<rangle>"   | bop :: "bop" and v\<^sub>1 :: "val" and v\<^sub>2 :: "val" and v :: "val" and s :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" where "a1 = Val v\<^sub>1'__ \<guillemotleft>bopb__\<guillemotright> Val v\<^sub>2" and "a2 = sf__" and "a3 = Val v__" and "a4 = sf__" and "binop (bopb__, v\<^sub>1'__, v\<^sub>2) = \<lfloor>v__\<rfloor>"   | s :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" and V :: "char list" and v :: "val" where "a1 = Var V__" and "a2 = sg__" and "a3 = Val va__" and "a4 = sg__" and "lcl sg__ V__ = \<lfloor>va__\<rfloor>"   | e :: "char list exp" and s :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" and e' :: "char list exp" and s' :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" and V :: "char list" where "a1 = Va__:=ed__" and "a2 = sh__" and "a3 = Va__:=e'e__" and "a4 = s'c__" and "P \<turnstile> \<langle>ed__,sh__\<rangle> \<rightarrow> \<langle>e'e__,s'c__\<rangle>"   | V :: "char list" and v :: "val" and h :: "nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option" and l :: "char list \<Rightarrow> val option" where "a1 = Vb__:=Val vb__" and "a2 = (hc__, lc__)" and "a3 = unit" and "a4 = (hc__, lc__(Vb__ \<mapsto> vb__))"   | e :: "char list exp" and s :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" and e' :: "char list exp" and s' :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" and F :: "char list" and D :: "char list" where "a1 = ee__\<bullet>F__{Db__}" and "a2 = si__" and "a3 = e'f__\<bullet>F__{Db__}" and "a4 = s'd__" and "P \<turnstile> \<langle>ee__,si__\<rangle> \<rightarrow> \<langle>e'f__,s'd__\<rangle>"   | s :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" and a :: "nat" and C :: "char list" and fs :: "char list \<times> char list \<Rightarrow> val option" and F :: "char list" and D :: "char list" and v :: "val" where "a1 = addr ac__\<bullet>Fa__{Dc__}" and "a2 = sj__" and "a3 = Val vc__" and "a4 = sj__" and "hp sj__ ac__ = \<lfloor>(Cf__, fsb__)\<rfloor>" and "fsb__ (Fa__, Dc__) = \<lfloor>vc__\<rfloor>"   | F :: "char list" and D :: "char list" and s :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" where "a1 = null\<bullet>Fb__{Dd__}" and "a2 = sk__" and "a3 = THROW NullPointer" and "a4 = sk__"   | e :: "char list exp" and s :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" and e' :: "char list exp" and s' :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" and F :: "char list" and D :: "char list" and e\<^sub>2 :: "char list exp" where "a1 = ef__\<bullet>Fc__{De__} := e\<^sub>2'__" and "a2 = sl__" and "a3 = e'g__\<bullet>Fc__{De__} := e\<^sub>2'__" and "a4 = s'e__" and "P \<turnstile> \<langle>ef__,sl__\<rangle> \<rightarrow> \<langle>e'g__,s'e__\<rangle>"   | e :: "char list exp" and s :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" and e' :: "char list exp" and s' :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" and v :: "val" and F :: "char list" and D :: "char list" where "a1 = Val vd__\<bullet>Fd__{Df__} := eg__" and "a2 = sm__" and "a3 = Val vd__\<bullet>Fd__{Df__} := e'h__" and "a4 = s'f__" and "P \<turnstile> \<langle>eg__,sm__\<rangle> \<rightarrow> \<langle>e'h__,s'f__\<rangle>"   | h :: "nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option" and a :: "nat" and C :: "char list" and fs :: "char list \<times> char list \<Rightarrow> val option" and F :: "char list" and D :: "char list" and v :: "val" and l :: "char list \<Rightarrow> val option" where "a1 = addr ad__\<bullet>Fe__{Dg__} := Val ve__" and "a2 = (hd__, ld__)" and "a3 = unit" and "a4 = (hd__(ad__ \<mapsto> (Cg__, fsc__((Fe__, Dg__) \<mapsto> ve__))), ld__)" and "hd__ ad__ = \<lfloor>(Cg__, fsc__)\<rfloor>"   | F :: "char list" and D :: "char list" and v :: "val" and s :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" where "a1 = null\<bullet>Ff__{Dh__} := Val vf__" and "a2 = sn__" and "a3 = THROW NullPointer" and "a4 = sn__"   | e :: "char list exp" and s :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" and e' :: "char list exp" and s' :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" and M :: "char list" and es :: "char list exp list" where "a1 = eh__\<bullet>M__(es__)" and "a2 = so__" and "a3 = e'i__\<bullet>M__(es__)" and "a4 = s'g__" and "P \<turnstile> \<langle>eh__,so__\<rangle> \<rightarrow> \<langle>e'i__,s'g__\<rangle>"   | es :: "char list exp list" and s :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" and es' :: "char list exp list" and s' :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" and v :: "val" and M :: "char list" where "a1 = Val vg__\<bullet>Ma__(esa__)" and "a2 = sp__" and "a3 = Val vg__\<bullet>Ma__(es'__)" and "a4 = s'h__" and "P \<turnstile> \<langle>esa__,sp__\<rangle> [\<rightarrow>] \<langle>es'__,s'h__\<rangle>"   | s :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" and a :: "nat" and C :: "char list" and fs :: "char list \<times> char list \<Rightarrow> val option" 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 vs :: "val list" where "a1 = addr ae__\<bullet>Mb__(map Val vs__)" and "a2 = sq__" and "a3 = blocks (this # pns, Class Di__ # Ts, Addr ae__ # vs__, body)" and "a4 = sq__" and "hp sq__ ae__ = \<lfloor>(Ch__, fsd__)\<rfloor>" and "P \<turnstile> Ch__ sees Mb__: Ts\<rightarrow>T__ = (pns, body) in Di__" and "length vs__ = length pns" and "length Ts = length pns"   | M :: "char list" and vs :: "val list" and s :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" where "a1 = null\<bullet>Mc__(map Val vsa__)" and "a2 = sr__" and "a3 = THROW NullPointer" and "a4 = sr__"   | e :: "char list exp" and h :: "nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option" and l :: "char list \<Rightarrow> val option" and V :: "char list" and e' :: "char list exp" and h' :: "nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option" and l' :: "char list \<Rightarrow> val option" and T :: "ty" where "a1 = {Vc__:Ta__; ei__}" and "a2 = (he__, le__)" and "a3 = {Vc__:Ta__; e'j__}" and "a4 = (h'c__, l'b__(Vc__ := le__ Vc__))" and "P \<turnstile> \<langle>ei__,(he__, le__(Vc__ := None))\<rangle> \<rightarrow> \<langle>e'j__,(h'c__, l'b__)\<rangle>" and "l'b__ Vc__ = None" and "\<not> assigned Vc__ ei__"   | e :: "char list exp" and h :: "nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option" and l :: "char list \<Rightarrow> val option" and V :: "char list" and e' :: "char list exp" and h' :: "nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option" and l' :: "char list \<Rightarrow> val option" and v :: "val" and T :: "ty" where "a1 = {Vd__:Tb__; ej__}" and "a2 = (hf__, lf__)" and "a3 = {Vd__:Tb__; Vd__:=Val vh__;; e'k__}" and "a4 = (h'd__, l'c__(Vd__ := lf__ Vd__))" and "P \<turnstile> \<langle>ej__,(hf__, lf__(Vd__ := None))\<rangle> \<rightarrow> \<langle>e'k__,(h'd__, l'c__)\<rangle>" and "l'c__ Vd__ = \<lfloor>vh__\<rfloor>" and "\<not> assigned Vd__ ej__"   | e :: "char list exp" and h :: "nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option" and l :: "char list \<Rightarrow> val option" and V :: "char list" and v :: "val" and e' :: "char list exp" and h' :: "nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option" and l' :: "char list \<Rightarrow> val option" and v' :: "val" and T :: "ty" where "a1 = {Ve__:Tc__; Ve__:=Val vi__;; ek__}" and "a2 = (h, l)" and "a3 = {Ve__:Tc__; Ve__:=Val v';; e'l__}" and "a4 = (h', l'(Ve__ := l Ve__))" and "P \<turnstile> \<langle>ek__,(h, l(Ve__ \<mapsto> vi__))\<rangle> \<rightarrow> \<langle>e'l__,(h', l')\<rangle>" and "l' Ve__ = \<lfloor>v'\<rfloor>"   | V :: "char list" and T :: "ty" and u :: "val" and s :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" where "a1 = {Vf__:Td__; Val u__}" and "a2 = ss__" and "a3 = Val u__" and "a4 = ss__"   | V :: "char list" and T :: "ty" and v :: "val" and u :: "val" and s :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" where "a1 = {Vg__:Te__; Vg__:=Val vj__;; Val u}" and "a2 = st__" and "a3 = Val u" and "a4 = st__"   | e :: "char list exp" and s :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" and e' :: "char list exp" and s' :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" and e\<^sub>2 :: "char list exp" where "a1 = el__;; e\<^sub>2''__" and "a2 = su__" and "a3 = e'm__;; e\<^sub>2''__" and "a4 = s'i__" and "P \<turnstile> \<langle>el__,su__\<rangle> \<rightarrow> \<langle>e'm__,s'i__\<rangle>"   | v :: "val" and e\<^sub>2 :: "char list exp" and s :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" where "a1 = Val vk__;; e\<^sub>2'''__" and "a2 = sv__" and "a3 = e\<^sub>2'''__" and "a4 = sv__"   | e :: "char list exp" and s :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" and e' :: "char list exp" and s' :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" and e\<^sub>1 :: "char list exp" and e\<^sub>2 :: "char list exp" where "a1 = if (em__) e\<^sub>1'__ else e\<^sub>2''''__" and "a2 = sw__" and "a3 = if (e'n__) e\<^sub>1'__ else e\<^sub>2''''__" and "a4 = s'j__" and "P \<turnstile> \<langle>em__,sw__\<rangle> \<rightarrow> \<langle>e'n__,s'j__\<rangle>"   | e\<^sub>1 :: "char list exp" and e\<^sub>2 :: "char list exp" and s :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" where "a1 = if (true) e\<^sub>1''__ else e\<^sub>2'''''__" and "a2 = sx__" and "a3 = e\<^sub>1''__" and "a4 = sx__"   | e\<^sub>1 :: "char list exp" and e\<^sub>2 :: "char list exp" and s :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" where "a1 = if (false) e\<^sub>1'''__ else e\<^sub>2''''''__" and "a2 = sy__" and "a3 = e\<^sub>2''''''__" and "a4 = sy__"   | b :: "char list exp" and c :: "char list exp" and s :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" where "a1 = while (b) c" and "a2 = sz__" and "a3 = if (b) (c;; while (b) c) else unit" and "a4 = sz__"   | e :: "char list exp" and s :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" and e' :: "char list exp" and s' :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" where "a1 = throw en__" and "a2 = ta__" and "a3 = throw e'o__" and "a4 = s'k__" and "P \<turnstile> \<langle>en__,ta__\<rangle> \<rightarrow> \<langle>e'o__,s'k__\<rangle>"   | s :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" where "a1 = throw null" and "a2 = tb__" and "a3 = THROW NullPointer" and "a4 = tb__"   | e :: "char list exp" and s :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" and e' :: "char list exp" and s' :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" and C :: "char list" and V :: "char list" and e\<^sub>2 :: "char list exp" where "a1 = try eo__ catch(Ci__ Vh__) e\<^sub>2'''''''__" and "a2 = tc__" and "a3 = try e' catch(Ci__ Vh__) e\<^sub>2'''''''__" and "a4 = s'" and "P \<turnstile> \<langle>eo__,tc__\<rangle> \<rightarrow> \<langle>e',s'\<rangle>"   | v :: "val" and C :: "char list" and V :: "char list" and e\<^sub>2 :: "char list exp" and s :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" where "a1 = try Val vl__ catch(Cj__ Vi__) e\<^sub>2''''''''__" and "a2 = td__" and "a3 = Val vl__" and "a4 = td__"   | s :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" and a :: "nat" and D :: "char list" and fs :: "char list \<times> char list \<Rightarrow> val option" and C :: "char list" and V :: "char list" and e\<^sub>2 :: "char list exp" where "a1 = try Throw af__ catch(Ck__ Vj__) e\<^sub>2'''''''''__" and "a2 = te__" and "a3 = {Vj__:Class Ck__; Vj__:=addr af__;; e\<^sub>2'''''''''__}" and "a4 = te__" and "hp te__ af__ = \<lfloor>(Dj__, fse__)\<rfloor>" and "P \<turnstile> Dj__ \<preceq>\<^sup>* Ck__"   | s :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" and a :: "nat" and D :: "char list" and fs :: "char list \<times> char list \<Rightarrow> val option" and C :: "char list" and V :: "char list" and e\<^sub>2 :: "char list exp" where "a1 = try Throw ag__ catch(Cl__ Vk__) e\<^sub>2''''''''''__" and "a2 = tf__" and "a3 = Throw ag__" and "a4 = tf__" and "hp tf__ ag__ = \<lfloor>(Dk__, fs)\<rfloor>" and "(Dk__, Cl__) \<notin> (subcls1 P)\<^sup>*"   | C :: "char list" and e :: "char list exp" and s :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" where "a1 = Cast C (throw ep__)" and "a2 = tg__" and "a3 = throw ep__" and "a4 = tg__"   | e :: "char list exp" and bop :: "bop" and e\<^sub>2 :: "char list exp" and s :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" where "a1 = throw eq__ \<guillemotleft>bopc__\<guillemotright> e\<^sub>2'''''''''''__" and "a2 = th__" and "a3 = throw eq__" and "a4 = th__"   | v\<^sub>1 :: "val" and bop :: "bop" and e :: "char list exp" and s :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" where "a1 = Val v\<^sub>1 \<guillemotleft>bop\<guillemotright> throw er__" and "a2 = ti__" and "a3 = throw er__" and "a4 = ti__"   | V :: "char list" and e :: "char list exp" and s :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" where "a1 = Vl__:=throw et__" and "a2 = tj__" and "a3 = throw et__" and "a4 = tj__"   | e :: "char list exp" and F :: "char list" and D :: "char list" and s :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" where "a1 = throw eu__\<bullet>Fg__{Dl__}" and "a2 = tk__" and "a3 = throw eu__" and "a4 = tk__"   | e :: "char list exp" and F :: "char list" and D :: "char list" and e\<^sub>2 :: "char list exp" and s :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" where "a1 = throw ev__\<bullet>Fh__{Dm__} := e\<^sub>2''''''''''''__" and "a2 = tl__" and "a3 = throw ev__" and "a4 = tl__"   | v :: "val" and F :: "char list" and D :: "char list" and e :: "char list exp" and s :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" where "a1 = Val vm__\<bullet>F{D} := throw ew__" and "a2 = tm__" and "a3 = throw ew__" and "a4 = tm__"   | e :: "char list exp" and M :: "char list" and es :: "char list exp list" and s :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" where "a1 = throw ex__\<bullet>Md__(esb__)" and "a2 = tn__" and "a3 = throw ex__" and "a4 = tn__"   | es :: "char list exp list" and vs :: "val list" and e :: "char list exp" and es' :: "char list exp list" and v :: "val" and M :: "char list" and s :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" where "a1 = Val vn__\<bullet>M(es)" and "a2 = to__" and "a3 = throw ey__" and "a4 = to__" and "es = map Val vs @ throw ey__ # es'"   | V :: "char list" and T :: "ty" and a :: "nat" and s :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" where "a1 = {Vm__:Tf__; Throw ah__}" and "a2 = tp__" and "a3 = Throw ah__" and "a4 = tp__"   | V :: "char list" and T :: "ty" and v :: "val" and a :: "nat" and s :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" where "a1 = {V:T; V:=Val v;; Throw a}" and "a2 = tq__" and "a3 = Throw a" and "a4 = tq__"   | e :: "char list exp" and e\<^sub>2 :: "char list exp" and s :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" where "a1 = throw ez__;; e\<^sub>2'''''''''''''__" and "a2 = tr__" and "a3 = throw ez__" and "a4 = tr__"   | e :: "char list exp" and e\<^sub>1 :: "char list exp" and e\<^sub>2 :: "char list exp" and s :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" where "a1 = if (throw fa__) e\<^sub>1 else e\<^sub>2" and "a2 = ts__" and "a3 = throw fa__" and "a4 = ts__"   | e :: "char list exp" and s :: "(nat \<Rightarrow> (char list \<times> (char list \<times> char list \<Rightarrow> val option)) option) \<times> (char list \<Rightarrow> val option)" where "a1 = throw (throw e)" and "a2 = s" and "a3 = throw e" and "a4 = s"