cases: fixes extTA :: "('addr, 'thread_id, 'heap) external_thread_action \<Rightarrow> ('addr, 'thread_id, 'b, 'heap) Jinja_thread_action"   and P :: "'addr J_prog"   and t :: "'thread_id"   and a1 :: "'addr expr"   and a2 :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)"   and a3 :: "('addr, 'thread_id, 'b, 'heap) Jinja_thread_action"   and a4 :: "'addr expr"   and a5 :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" assumes "extTA,P,t \<turnstile> \<langle>a1,a2\<rangle> -a3\<rightarrow> \<langle>a4,a5\<rangle>" obtains h' :: "'heap" and a :: "'addr" and h :: "'heap" and C :: "String.literal" and l :: "String.literal \<Rightarrow> 'addr val option" where "a1 = new C__" and "a2 = (h__, l__)" and "a3 = \<lbrace>NewHeapElem a__ (Class_type C__)\<rbrace>" and "a4 = addr a__" and "a5 = (h'__, l__)" and "(h'__, a__) \<in> allocate h__ (Class_type C__)"   | h :: "'heap" and C :: "String.literal" and l :: "String.literal \<Rightarrow> 'addr val option" where "a1 = new Ca__" and "a2 = (ha__, la__)" and "a3 = \<lbrace>\<rbrace>" and "a4 = Throw (addr_of_sys_xcpt OutOfMemory)" and "a5 = (ha__, la__)" and "allocate ha__ (Class_type Ca__) = {}"   | e :: "'addr expr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and ta :: "('addr, 'thread_id, 'b, 'heap) Jinja_thread_action" and e' :: "'addr expr" and s' :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and T :: "ty" where "a1 = newA T__\<lfloor>e__\<rceil>" and "a2 = sa__" and "a3 = taa__" and "a4 = newA T__\<lfloor>e'a__\<rceil>" and "a5 = s'a__" and "extTA,P,t \<turnstile> \<langle>e__,sa__\<rangle> -taa__\<rightarrow> \<langle>e'a__,s'a__\<rangle>"   | i :: "32 word" and h' :: "'heap" and a :: "'addr" and h :: "'heap" and T :: "ty" and l :: "String.literal \<Rightarrow> 'addr val option" where "a1 = newA Ta__\<lfloor>Val (Intg i__)\<rceil>" and "a2 = (hb__, lb__)" and "a3 = \<lbrace>NewHeapElem aa__ (Array_type Ta__ (nat (sint i__)))\<rbrace>" and "a4 = addr aa__" and "a5 = (h'a__, lb__)" and "0 \<le>s i__" and "(h'a__, aa__) \<in> allocate hb__ (Array_type Ta__ (nat (sint i__)))"   | i :: "32 word" and T :: "ty" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" where "a1 = newA Tb__\<lfloor>Val (Intg ia__)\<rceil>" and "a2 = sb__" and "a3 = \<lbrace>\<rbrace>" and "a4 = Throw (addr_of_sys_xcpt NegativeArraySize)" and "a5 = sb__" and "ia__ <s 0"   | i :: "32 word" and h :: "'heap" and T :: "ty" and l :: "String.literal \<Rightarrow> 'addr val option" where "a1 = newA Tc__\<lfloor>Val (Intg ib__)\<rceil>" and "a2 = (hc__, lc__)" and "a3 = \<lbrace>\<rbrace>" and "a4 = Throw (addr_of_sys_xcpt OutOfMemory)" and "a5 = (hc__, lc__)" and "0 \<le>s ib__" and "allocate hc__ (Array_type Tc__ (nat (sint ib__))) = {}"   | e :: "'addr expr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and ta :: "('addr, 'thread_id, 'b, 'heap) Jinja_thread_action" and e' :: "'addr expr" and s' :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and C :: "ty" where "a1 = Cast Cb__ ea__" and "a2 = sc__" and "a3 = tab__" and "a4 = Cast Cb__ e'b__" and "a5 = s'b__" and "extTA,P,t \<turnstile> \<langle>ea__,sc__\<rangle> -tab__\<rightarrow> \<langle>e'b__,s'b__\<rangle>"   | s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and v :: "'addr val" and U :: "ty" and T :: "ty" where "a1 = Cast Td__ (Val va__)" and "a2 = sd__" and "a3 = \<lbrace>\<rbrace>" and "a4 = Val va__" and "a5 = sd__" and "typeof\<^bsub>hp sd__\<^esub> va__ = \<lfloor>U__\<rfloor>" and "P \<turnstile> U__ \<le> Td__"   | s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and v :: "'addr val" and U :: "ty" and T :: "ty" where "a1 = Cast Te__ (Val vb__)" and "a2 = se__" and "a3 = \<lbrace>\<rbrace>" and "a4 = Throw (addr_of_sys_xcpt ClassCast)" and "a5 = se__" and "typeof\<^bsub>hp se__\<^esub> vb__ = \<lfloor>Ua__\<rfloor>" and "\<not> P \<turnstile> Ua__ \<le> Te__"   | e :: "'addr expr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and ta :: "('addr, 'thread_id, 'b, 'heap) Jinja_thread_action" and e' :: "'addr expr" and s' :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and T :: "ty" where "a1 = eb__ instanceof Tf__" and "a2 = sf__" and "a3 = tac__" and "a4 = e'c__ instanceof Tf__" and "a5 = s'c__" and "extTA,P,t \<turnstile> \<langle>eb__,sf__\<rangle> -tac__\<rightarrow> \<langle>e'c__,s'c__\<rangle>"   | s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and v :: "'addr val" and U :: "ty" and b :: "bool" and T :: "ty" where "a1 = Val vc__ instanceof Tg__" and "a2 = sg__" and "a3 = \<lbrace>\<rbrace>" and "a4 = Val (Bool b__)" and "a5 = sg__" and "typeof\<^bsub>hp sg__\<^esub> vc__ = \<lfloor>Ub__\<rfloor>" and "b__ = (vc__ \<noteq> Null \<and> P \<turnstile> Ub__ \<le> Tg__)"   | e :: "'addr expr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and ta :: "('addr, 'thread_id, 'b, 'heap) Jinja_thread_action" and e' :: "'addr expr" and s' :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and bop :: "bop" and e2 :: "'addr expr" where "a1 = ec__ \<guillemotleft>bop__\<guillemotright> e2__" and "a2 = sh__" and "a3 = tad__" and "a4 = e'd__ \<guillemotleft>bop__\<guillemotright> e2__" and "a5 = s'd__" and "extTA,P,t \<turnstile> \<langle>ec__,sh__\<rangle> -tad__\<rightarrow> \<langle>e'd__,s'd__\<rangle>"   | e :: "'addr expr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and ta :: "('addr, 'thread_id, 'b, 'heap) Jinja_thread_action" and e' :: "'addr expr" and s' :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and v :: "'addr val" and bop :: "bop" where "a1 = Val vd__ \<guillemotleft>bopa__\<guillemotright> ed__" and "a2 = si__" and "a3 = tae__" and "a4 = Val vd__ \<guillemotleft>bopa__\<guillemotright> e'e__" and "a5 = s'e__" and "extTA,P,t \<turnstile> \<langle>ed__,si__\<rangle> -tae__\<rightarrow> \<langle>e'e__,s'e__\<rangle>"   | bop :: "bop" and v1 :: "'addr val" and v2 :: "'addr val" and v :: "'addr val" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" where "a1 = Val v1__ \<guillemotleft>bopb__\<guillemotright> Val v2__" and "a2 = sj__" and "a3 = \<lbrace>\<rbrace>" and "a4 = Val ve__" and "a5 = sj__" and "binop bopb__ v1__ v2__ = \<lfloor>Inl ve__\<rfloor>"   | bop :: "bop" and v1 :: "'addr val" and v2 :: "'addr val" and a :: "'addr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" where "a1 = Val v1 \<guillemotleft>bopc__\<guillemotright> Val v2" and "a2 = sk__" and "a3 = \<lbrace>\<rbrace>" and "a4 = Throw ab__" and "a5 = sk__" and "binop bopc__ v1 v2 = \<lfloor>Inr ab__\<rfloor>"   | s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and V :: "String.literal" and v :: "'addr val" where "a1 = Var V__" and "a2 = sl__" and "a3 = \<lbrace>\<rbrace>" and "a4 = Val vf__" and "a5 = sl__" and "lcl sl__ V__ = \<lfloor>vf__\<rfloor>"   | e :: "'addr expr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and ta :: "('addr, 'thread_id, 'b, 'heap) Jinja_thread_action" and e' :: "'addr expr" and s' :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and V :: "String.literal" where "a1 = Va__:=ee__" and "a2 = sm__" and "a3 = taf__" and "a4 = Va__:=e'f__" and "a5 = s'f__" and "extTA,P,t \<turnstile> \<langle>ee__,sm__\<rangle> -taf__\<rightarrow> \<langle>e'f__,s'f__\<rangle>"   | V :: "String.literal" and v :: "'addr val" and h :: "'heap" and l :: "String.literal \<Rightarrow> 'addr val option" where "a1 = Vb__:=Val vg__" and "a2 = (hd__, ld__)" and "a3 = \<lbrace>\<rbrace>" and "a4 = unit" and "a5 = (hd__, ld__(Vb__ \<mapsto> vg__))"   | a :: "'addr expr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and ta :: "('addr, 'thread_id, 'b, 'heap) Jinja_thread_action" and a' :: "'addr expr" and s' :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and i :: "'addr expr" where "a1 = ac__\<lfloor>ic__\<rceil>" and "a2 = sn__" and "a3 = tag__" and "a4 = a'__\<lfloor>ic__\<rceil>" and "a5 = s'g__" and "extTA,P,t \<turnstile> \<langle>ac__,sn__\<rangle> -tag__\<rightarrow> \<langle>a'__,s'g__\<rangle>"   | i :: "'addr expr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and ta :: "('addr, 'thread_id, 'b, 'heap) Jinja_thread_action" and i' :: "'addr expr" and s' :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and a :: "'addr val" where "a1 = Val ad__\<lfloor>id__\<rceil>" and "a2 = so__" and "a3 = tah__" and "a4 = Val ad__\<lfloor>i'__\<rceil>" and "a5 = s'h__" and "extTA,P,t \<turnstile> \<langle>id__,so__\<rangle> -tah__\<rightarrow> \<langle>i'__,s'h__\<rangle>"   | i :: "'addr val" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" where "a1 = null\<lfloor>Val ie__\<rceil>" and "a2 = sp__" and "a3 = \<lbrace>\<rbrace>" and "a4 = Throw (addr_of_sys_xcpt NullPointer)" and "a5 = sp__"   | s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and a :: "'addr" and T :: "ty" and n :: "nat" and i :: "32 word" where "a1 = addr ae__\<lfloor>Val (Intg if__)\<rceil>" and "a2 = sq__" and "a3 = \<lbrace>\<rbrace>" and "a4 = Throw (addr_of_sys_xcpt ArrayIndexOutOfBounds)" and "a5 = sq__" and "typeof_addr (hp sq__) ae__ = \<lfloor>Array_type Th__ n__\<rfloor>" and "if__ <s 0 \<or> int n__ \<le> sint if__"   | h :: "'heap" and a :: "'addr" and T :: "ty" and n :: "nat" and i :: "32 word" and v :: "'addr val" and l :: "String.literal \<Rightarrow> 'addr val option" where "a1 = addr af__\<lfloor>Val (Intg ig__)\<rceil>" and "a2 = (he__, le__)" and "a3 = \<lbrace>ReadMem af__ (ACell (nat (sint ig__))) vh__\<rbrace>" and "a4 = Val vh__" and "a5 = (he__, le__)" and "typeof_addr he__ af__ = \<lfloor>Array_type Ti__ na__\<rfloor>" and "0 \<le>s ig__" and "sint ig__ < int na__" and "heap_read he__ af__ (ACell (nat (sint ig__))) vh__"   | a :: "'addr expr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and ta :: "('addr, 'thread_id, 'b, 'heap) Jinja_thread_action" and a' :: "'addr expr" and s' :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and i :: "'addr expr" and e :: "'addr expr" where "a1 = ag__\<lfloor>ih__\<rceil> := ef__" and "a2 = sr__" and "a3 = tai__" and "a4 = a'a__\<lfloor>ih__\<rceil> := ef__" and "a5 = s'i__" and "extTA,P,t \<turnstile> \<langle>ag__,sr__\<rangle> -tai__\<rightarrow> \<langle>a'a__,s'i__\<rangle>"   | i :: "'addr expr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and ta :: "('addr, 'thread_id, 'b, 'heap) Jinja_thread_action" and i' :: "'addr expr" and s' :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and a :: "'addr val" and e :: "'addr expr" where "a1 = Val ah__\<lfloor>ii__\<rceil> := eg__" and "a2 = ss__" and "a3 = taj__" and "a4 = Val ah__\<lfloor>i'\<rceil> := eg__" and "a5 = s'j__" and "extTA,P,t \<turnstile> \<langle>ii__,ss__\<rangle> -taj__\<rightarrow> \<langle>i',s'j__\<rangle>"   | e :: "'addr expr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and ta :: "('addr, 'thread_id, 'b, 'heap) Jinja_thread_action" and e' :: "'addr expr" and s' :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and a :: "'addr val" and i :: "'addr val" where "a1 = Val ai__\<lfloor>Val ij__\<rceil> := eh__" and "a2 = st__" and "a3 = tak__" and "a4 = Val ai__\<lfloor>Val ij__\<rceil> := e'g__" and "a5 = s'k__" and "extTA,P,t \<turnstile> \<langle>eh__,st__\<rangle> -tak__\<rightarrow> \<langle>e'g__,s'k__\<rangle>"   | i :: "'addr val" and e :: "'addr val" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" where "a1 = null\<lfloor>Val ik__\<rceil> := Val ei__" and "a2 = su__" and "a3 = \<lbrace>\<rbrace>" and "a4 = Throw (addr_of_sys_xcpt NullPointer)" and "a5 = su__"   | s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and a :: "'addr" and T :: "ty" and n :: "nat" and i :: "32 word" and e :: "'addr val" where "a1 = addr aj__\<lfloor>Val (Intg il__)\<rceil> := Val ej__" and "a2 = sv__" and "a3 = \<lbrace>\<rbrace>" and "a4 = Throw (addr_of_sys_xcpt ArrayIndexOutOfBounds)" and "a5 = sv__" and "typeof_addr (hp sv__) aj__ = \<lfloor>Array_type Tj__ nb__\<rfloor>" and "il__ <s 0 \<or> int nb__ \<le> sint il__"   | s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and a :: "'addr" and T :: "ty" and n :: "nat" and i :: "32 word" and w :: "'addr val" and U :: "ty" where "a1 = addr ak__\<lfloor>Val (Intg im__)\<rceil> := Val w__" and "a2 = sw__" and "a3 = \<lbrace>\<rbrace>" and "a4 = Throw (addr_of_sys_xcpt ArrayStore)" and "a5 = sw__" and "typeof_addr (hp sw__) ak__ = \<lfloor>Array_type Tk__ nc__\<rfloor>" and "0 \<le>s im__" and "sint im__ < int nc__" and "typeof\<^bsub>hp sw__\<^esub> w__ = \<lfloor>Uc__\<rfloor>" and "\<not> P \<turnstile> Uc__ \<le> Tk__"   | h :: "'heap" and a :: "'addr" and T :: "ty" and n :: "nat" and i :: "32 word" and w :: "'addr val" and U :: "ty" and h' :: "'heap" and l :: "String.literal \<Rightarrow> 'addr val option" where "a1 = addr al__\<lfloor>Val (Intg in__)\<rceil> := Val w" and "a2 = (hf__, lf__)" and "a3 = \<lbrace>WriteMem al__ (ACell (nat (sint in__))) w\<rbrace>" and "a4 = unit" and "a5 = (h'b__, lf__)" and "typeof_addr hf__ al__ = \<lfloor>Array_type Tl__ nd__\<rfloor>" and "0 \<le>s in__" and "sint in__ < int nd__" and "typeof\<^bsub>hf__\<^esub> w = \<lfloor>U\<rfloor>" and "P \<turnstile> U \<le> Tl__" and "heap_write hf__ al__ (ACell (nat (sint in__))) w h'b__"   | a :: "'addr expr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and ta :: "('addr, 'thread_id, 'b, 'heap) Jinja_thread_action" and a' :: "'addr expr" and s' :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" where "a1 = am__\<bullet>length" and "a2 = sx__" and "a3 = tal__" and "a4 = a'\<bullet>length" and "a5 = s'l__" and "extTA,P,t \<turnstile> \<langle>am__,sx__\<rangle> -tal__\<rightarrow> \<langle>a',s'l__\<rangle>"   | h :: "'heap" and a :: "'addr" and T :: "ty" and n :: "nat" and l :: "String.literal \<Rightarrow> 'addr val option" where "a1 = addr an__\<bullet>length" and "a2 = (hg__, lg__)" and "a3 = \<lbrace>\<rbrace>" and "a4 = Val (Intg (word_of_nat n))" and "a5 = (hg__, lg__)" and "typeof_addr hg__ an__ = \<lfloor>Array_type Tm__ n\<rfloor>"   | s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" where "a1 = null\<bullet>length" and "a2 = sy__" and "a3 = \<lbrace>\<rbrace>" and "a4 = Throw (addr_of_sys_xcpt NullPointer)" and "a5 = sy__"   | e :: "'addr expr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and ta :: "('addr, 'thread_id, 'b, 'heap) Jinja_thread_action" and e' :: "'addr expr" and s' :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and F :: "String.literal" and D :: "String.literal" where "a1 = ek__\<bullet>F__{D__}" and "a2 = sz__" and "a3 = tam__" and "a4 = e'h__\<bullet>F__{D__}" and "a5 = s'm__" and "extTA,P,t \<turnstile> \<langle>ek__,sz__\<rangle> -tam__\<rightarrow> \<langle>e'h__,s'm__\<rangle>"   | h :: "'heap" and a :: "'addr" and D :: "String.literal" and F :: "String.literal" and v :: "'addr val" and l :: "String.literal \<Rightarrow> 'addr val option" where "a1 = addr ao__\<bullet>Fa__{Da__}" and "a2 = (hh__, lh__)" and "a3 = \<lbrace>ReadMem ao__ (CField Da__ Fa__) vi__\<rbrace>" and "a4 = Val vi__" and "a5 = (hh__, lh__)" and "heap_read hh__ ao__ (CField Da__ Fa__) vi__"   | F :: "String.literal" and D :: "String.literal" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" where "a1 = null\<bullet>Fb__{Db__}" and "a2 = tc__" and "a3 = \<lbrace>\<rbrace>" and "a4 = Throw (addr_of_sys_xcpt NullPointer)" and "a5 = tc__"   | e :: "'addr expr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and ta :: "('addr, 'thread_id, 'b, 'heap) Jinja_thread_action" and e' :: "'addr expr" and s' :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and F :: "String.literal" and D :: "String.literal" and e2 :: "'addr expr" where "a1 = el__\<bullet>Fc__{Dc__} := e2a__" and "a2 = td__" and "a3 = tan__" and "a4 = e'i__\<bullet>Fc__{Dc__} := e2a__" and "a5 = s'n__" and "extTA,P,t \<turnstile> \<langle>el__,td__\<rangle> -tan__\<rightarrow> \<langle>e'i__,s'n__\<rangle>"   | e :: "'addr expr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and ta :: "('addr, 'thread_id, 'b, 'heap) Jinja_thread_action" and e' :: "'addr expr" and s' :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and v :: "'addr val" and F :: "String.literal" and D :: "String.literal" where "a1 = Val vj__\<bullet>Fd__{Dd__} := em__" and "a2 = te__" and "a3 = tao__" and "a4 = Val vj__\<bullet>Fd__{Dd__} := e'j__" and "a5 = s'o__" and "extTA,P,t \<turnstile> \<langle>em__,te__\<rangle> -tao__\<rightarrow> \<langle>e'j__,s'o__\<rangle>"   | h :: "'heap" and a :: "'addr" and D :: "String.literal" and F :: "String.literal" and v :: "'addr val" and h' :: "'heap" and l :: "String.literal \<Rightarrow> 'addr val option" where "a1 = addr ap__\<bullet>Fe__{De__} := Val vk__" and "a2 = (hi__, li__)" and "a3 = \<lbrace>WriteMem ap__ (CField De__ Fe__) vk__\<rbrace>" and "a4 = unit" and "a5 = (h'c__, li__)" and "heap_write hi__ ap__ (CField De__ Fe__) vk__ h'c__"   | F :: "String.literal" and D :: "String.literal" and v :: "'addr val" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" where "a1 = null\<bullet>Ff__{Df__} := Val vl__" and "a2 = tf__" and "a3 = \<lbrace>\<rbrace>" and "a4 = Throw (addr_of_sys_xcpt NullPointer)" and "a5 = tf__"   | e :: "'addr expr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and ta :: "('addr, 'thread_id, 'b, 'heap) Jinja_thread_action" and e' :: "'addr expr" and s' :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and D :: "String.literal" and F :: "String.literal" and e2 :: "'addr expr" and e3 :: "'addr expr" where "a1 = en__\<bullet>compareAndSwap(Dg__\<bullet>Fg__, e2b__, e3__)" and "a2 = tg__" and "a3 = tap__" and "a4 = e'k__\<bullet>compareAndSwap(Dg__\<bullet>Fg__, e2b__, e3__)" and "a5 = s'p__" and "extTA,P,t \<turnstile> \<langle>en__,tg__\<rangle> -tap__\<rightarrow> \<langle>e'k__,s'p__\<rangle>"   | e :: "'addr expr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and ta :: "('addr, 'thread_id, 'b, 'heap) Jinja_thread_action" and e' :: "'addr expr" and s' :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and v :: "'addr val" and D :: "String.literal" and F :: "String.literal" and e3 :: "'addr expr" where "a1 = Val vm__\<bullet>compareAndSwap(Dh__\<bullet>Fh__, eo__, e3a__)" and "a2 = th__" and "a3 = taq__" and "a4 = Val vm__\<bullet>compareAndSwap(Dh__\<bullet>Fh__, e'l__, e3a__)" and "a5 = s'q__" and "extTA,P,t \<turnstile> \<langle>eo__,th__\<rangle> -taq__\<rightarrow> \<langle>e'l__,s'q__\<rangle>"   | e :: "'addr expr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and ta :: "('addr, 'thread_id, 'b, 'heap) Jinja_thread_action" and e' :: "'addr expr" and s' :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and v :: "'addr val" and D :: "String.literal" and F :: "String.literal" and v' :: "'addr val" where "a1 = Val vn__\<bullet>compareAndSwap(Di__\<bullet>Fi__, Val v'__, ep__)" and "a2 = ti__" and "a3 = tar__" and "a4 = Val vn__\<bullet>compareAndSwap(Di__\<bullet>Fi__, Val v'__, e'm__)" and "a5 = s'r__" and "extTA,P,t \<turnstile> \<langle>ep__,ti__\<rangle> -tar__\<rightarrow> \<langle>e'm__,s'r__\<rangle>"   | D :: "String.literal" and F :: "String.literal" and v :: "'addr val" and v' :: "'addr val" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" where "a1 = null\<bullet>compareAndSwap(Dj__\<bullet>Fj__, Val vo__, Val v'a__)" and "a2 = tj__" and "a3 = \<lbrace>\<rbrace>" and "a4 = Throw (addr_of_sys_xcpt NullPointer)" and "a5 = tj__"   | h :: "'heap" and a :: "'addr" and D :: "String.literal" and F :: "String.literal" and v :: "'addr val" and v' :: "'addr val" and h' :: "'heap" and l :: "String.literal \<Rightarrow> 'addr val option" where "a1 = addr aq__\<bullet>compareAndSwap(Dk__\<bullet>Fk__, Val vp__, Val v'b__)" and "a2 = (hj__, lj__)" and "a3 = \<lbrace>ReadMem aq__ (CField Dk__ Fk__) vp__, WriteMem aq__ (CField Dk__ Fk__) v'b__\<rbrace>" and "a4 = true" and "a5 = (h'd__, lj__)" and "heap_read hj__ aq__ (CField Dk__ Fk__) vp__" and "heap_write hj__ aq__ (CField Dk__ Fk__) v'b__ h'd__"   | h :: "'heap" and a :: "'addr" and D :: "String.literal" and F :: "String.literal" and v'' :: "'addr val" and v :: "'addr val" and v' :: "'addr val" and l :: "String.literal \<Rightarrow> 'addr val option" where "a1 = addr ar__\<bullet>compareAndSwap(Dl__\<bullet>Fl__, Val vq__, Val v'c__)" and "a2 = (hk__, lk__)" and "a3 = \<lbrace>ReadMem ar__ (CField Dl__ Fl__) v''\<rbrace>" and "a4 = false" and "a5 = (hk__, lk__)" and "heap_read hk__ ar__ (CField Dl__ Fl__) v''" and "vq__ \<noteq> v''"   | e :: "'addr expr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and ta :: "('addr, 'thread_id, 'b, 'heap) Jinja_thread_action" and e' :: "'addr expr" and s' :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and M :: "String.literal" and es :: "'addr expr list" where "a1 = eq__\<bullet>M__(es__)" and "a2 = tk__" and "a3 = tas__" and "a4 = e'n__\<bullet>M__(es__)" and "a5 = s's__" and "extTA,P,t \<turnstile> \<langle>eq__,tk__\<rangle> -tas__\<rightarrow> \<langle>e'n__,s's__\<rangle>"   | es :: "'addr expr list" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and ta :: "('addr, 'thread_id, 'b, 'heap) Jinja_thread_action" and es' :: "'addr expr list" and s' :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and v :: "'addr val" and M :: "String.literal" where "a1 = Val vr__\<bullet>Ma__(esa__)" and "a2 = tl__" and "a3 = tat__" and "a4 = Val vr__\<bullet>Ma__(es'__)" and "a5 = s't__" and "extTA,P,t \<turnstile> \<langle>esa__,tl__\<rangle> [-tat__\<rightarrow>] \<langle>es'__,s't__\<rangle>"   | s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and a :: "'addr" and hU :: "htype" and M :: "String.literal" and Ts :: "ty list" and T :: "ty" and pns :: "String.literal list" and body :: "'addr expr" and D :: "String.literal" and vs :: "'addr val list" where "a1 = addr as__\<bullet>Mb__(map Val vs__)" and "a2 = tm__" and "a3 = \<lbrace>\<rbrace>" and "a4 = blocks (this # pns) (Class Dm__ # Ts__) (Addr as__ # vs__) body" and "a5 = tm__" and "typeof_addr (hp tm__) as__ = \<lfloor>hU__\<rfloor>" and "P \<turnstile> class_type_of hU__ sees Mb__: Ts__\<rightarrow>Tn__ = \<lfloor>(pns, body)\<rfloor> in Dm__" and "length vs__ = length pns" and "length Ts__ = length pns"   | s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and a :: "'addr" and hU :: "htype" and M :: "String.literal" and Ts :: "ty list" and T :: "ty" and D :: "String.literal" and vs :: "'addr val list" and ta :: "('addr, 'thread_id, 'heap) external_thread_action" and va :: "'addr extCallRet" and h' :: "'heap" and ta' :: "('addr, 'thread_id, 'b, 'heap) Jinja_thread_action" and e' :: "'addr expr" and s' :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" where "a1 = addr at__\<bullet>Mc__(map Val vsa__)" and "a2 = tn__" and "a3 = ta'" and "a4 = e'o__" and "a5 = s'u__" and "typeof_addr (hp tn__) at__ = \<lfloor>hU\<rfloor>" and "P \<turnstile> class_type_of hU sees Mc__: Ts\<rightarrow>To__ = Native in Dn__" and "P,t \<turnstile> \<langle>at__\<bullet>Mc__(vsa__),hp tn__\<rangle> -tau__\<rightarrow>ext \<langle>va,h'e__\<rangle>" and "ta' = extTA tau__" and "e'o__ = extRet2J (addr at__\<bullet>Mc__(map Val vsa__)) va" and "s'u__ = (h'e__, lcl tn__)"   | M :: "String.literal" and vs :: "'addr val list" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" where "a1 = null\<bullet>Md__(map Val vsb__)" and "a2 = to__" and "a3 = \<lbrace>\<rbrace>" and "a4 = Throw (addr_of_sys_xcpt NullPointer)" and "a5 = to__"   | e :: "'addr expr" and h :: "'heap" and l :: "String.literal \<Rightarrow> 'addr val option" and V :: "String.literal" and vo :: "'addr val option" and ta :: "('addr, 'thread_id, 'b, 'heap) Jinja_thread_action" and e' :: "'addr expr" and h' :: "'heap" and l' :: "String.literal \<Rightarrow> 'addr val option" and T :: "ty" where "a1 = {Vc__:Tp__=voa__; er__}" and "a2 = (h, l)" and "a3 = tav__" and "a4 = {Vc__:Tp__=l' Vc__; e'p__}" and "a5 = (h', l'(Vc__ := l Vc__))" and "extTA,P,t \<turnstile> \<langle>er__,(h, l(Vc__ := voa__))\<rangle> -tav__\<rightarrow> \<langle>e'p__,(h', l')\<rangle>"   | V :: "String.literal" and T :: "ty" and vo :: "'addr val option" and u :: "'addr val" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" where "a1 = {Vd__:Tq__=vob__; Val u}" and "a2 = tp__" and "a3 = \<lbrace>\<rbrace>" and "a4 = Val u" and "a5 = tp__"   | o' :: "'addr expr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and ta :: "('addr, 'thread_id, 'b, 'heap) Jinja_thread_action" and o'' :: "'addr expr" and s' :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and e :: "'addr expr" where "a1 = sync(o') et__" and "a2 = tq__" and "a3 = taw__" and "a4 = sync(o'') et__" and "a5 = s'v__" and "extTA,P,t \<turnstile> \<langle>o',tq__\<rangle> -taw__\<rightarrow> \<langle>o'',s'v__\<rangle>"   | e :: "'addr expr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" where "a1 = sync(null) eu__" and "a2 = tr__" and "a3 = \<lbrace>\<rbrace>" and "a4 = Throw (addr_of_sys_xcpt NullPointer)" and "a5 = tr__"   | a :: "'addr" and e :: "'addr expr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" where "a1 = sync(addr au__) ev__" and "a2 = ts__" and "a3 = \<lbrace>(Lock, au__), SyncLock au__\<rbrace>" and "a4 = insync(au__) ev__" and "a5 = ts__"   | e :: "'addr expr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and ta :: "('addr, 'thread_id, 'b, 'heap) Jinja_thread_action" and e' :: "'addr expr" and s' :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and a :: "'addr" where "a1 = insync(av__) ew__" and "a2 = tt__" and "a3 = tax__" and "a4 = insync(av__) e'q__" and "a5 = s'w__" and "extTA,P,t \<turnstile> \<langle>ew__,tt__\<rangle> -tax__\<rightarrow> \<langle>e'q__,s'w__\<rangle>"   | a :: "'addr" and v :: "'addr val" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" where "a1 = insync(aw__) Val vt__" and "a2 = tu__" and "a3 = \<lbrace>(Unlock, aw__), SyncUnlock aw__\<rbrace>" and "a4 = Val vt__" and "a5 = tu__"   | e :: "'addr expr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and ta :: "('addr, 'thread_id, 'b, 'heap) Jinja_thread_action" and e' :: "'addr expr" and s' :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and e2 :: "'addr expr" where "a1 = ex__;; e2c__" and "a2 = tv__" and "a3 = tay__" and "a4 = e'r__;; e2c__" and "a5 = s'x__" and "extTA,P,t \<turnstile> \<langle>ex__,tv__\<rangle> -tay__\<rightarrow> \<langle>e'r__,s'x__\<rangle>"   | v :: "'addr val" and e :: "'addr expr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" where "a1 = Val vu__;; ey__" and "a2 = tw__" and "a3 = \<lbrace>\<rbrace>" and "a4 = ey__" and "a5 = tw__"   | b :: "'addr expr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and ta :: "('addr, 'thread_id, 'b, 'heap) Jinja_thread_action" and b' :: "'addr expr" and s' :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and e1 :: "'addr expr" and e2 :: "'addr expr" where "a1 = if (ba__) e1__ else e2d__" and "a2 = tx__" and "a3 = taz__" and "a4 = if (b') e1__ else e2d__" and "a5 = s'y__" and "extTA,P,t \<turnstile> \<langle>ba__,tx__\<rangle> -taz__\<rightarrow> \<langle>b',s'y__\<rangle>"   | e1 :: "'addr expr" and e2 :: "'addr expr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" where "a1 = if (true) e1a__ else e2e__" and "a2 = ty__" and "a3 = \<lbrace>\<rbrace>" and "a4 = e1a__" and "a5 = ty__"   | e1 :: "'addr expr" and e2 :: "'addr expr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" where "a1 = if (false) e1 else e2f__" and "a2 = tz__" and "a3 = \<lbrace>\<rbrace>" and "a4 = e2f__" and "a5 = tz__"   | b :: "'addr expr" and c :: "'addr expr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" where "a1 = while (b) c" and "a2 = ua__" and "a3 = \<lbrace>\<rbrace>" and "a4 = if (b) (c;; while (b) c) else unit" and "a5 = ua__"   | e :: "'addr expr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and ta :: "('addr, 'thread_id, 'b, 'heap) Jinja_thread_action" and e' :: "'addr expr" and s' :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" where "a1 = throw ez__" and "a2 = ub__" and "a3 = tba__" and "a4 = throw e's__" and "a5 = s'z__" and "extTA,P,t \<turnstile> \<langle>ez__,ub__\<rangle> -tba__\<rightarrow> \<langle>e's__,s'z__\<rangle>"   | s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" where "a1 = throw null" and "a2 = uc__" and "a3 = \<lbrace>\<rbrace>" and "a4 = Throw (addr_of_sys_xcpt NullPointer)" and "a5 = uc__"   | e :: "'addr expr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and ta :: "('addr, 'thread_id, 'b, 'heap) Jinja_thread_action" and e' :: "'addr expr" and s' :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and C :: "String.literal" and V :: "String.literal" and e2 :: "'addr expr" where "a1 = try fa__ catch(Cc__ Ve__) e2g__" and "a2 = ud__" and "a3 = ta" and "a4 = try e' catch(Cc__ Ve__) e2g__" and "a5 = s'" and "extTA,P,t \<turnstile> \<langle>fa__,ud__\<rangle> -ta\<rightarrow> \<langle>e',s'\<rangle>"   | v :: "'addr val" and C :: "String.literal" and V :: "String.literal" and e2 :: "'addr expr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" where "a1 = try Val vv__ catch(Cd__ Vf__) e2h__" and "a2 = ue__" and "a3 = \<lbrace>\<rbrace>" and "a4 = Val vv__" and "a5 = ue__"   | s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and a :: "'addr" and D :: "String.literal" and C :: "String.literal" and V :: "String.literal" and e2 :: "'addr expr" where "a1 = try Throw ax__ catch(Ce__ Vg__) e2i__" and "a2 = uf__" and "a3 = \<lbrace>\<rbrace>" and "a4 = {Vg__:Class Ce__=\<lfloor>Addr ax__\<rfloor>; e2i__}" and "a5 = uf__" and "typeof_addr (hp uf__) ax__ = \<lfloor>Class_type Do__\<rfloor>" and "P \<turnstile> Do__ \<preceq>\<^sup>* Ce__"   | s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" and a :: "'addr" and D :: "String.literal" and C :: "String.literal" and V :: "String.literal" and e2 :: "'addr expr" where "a1 = try Throw ay__ catch(Cf__ Vh__) e2j__" and "a2 = ug__" and "a3 = \<lbrace>\<rbrace>" and "a4 = Throw ay__" and "a5 = ug__" and "typeof_addr (hp ug__) ay__ = \<lfloor>Class_type Dp__\<rfloor>" and "\<not> P \<turnstile> Dp__ \<preceq>\<^sup>* Cf__"   | T :: "ty" and a :: "'addr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" where "a1 = newA Tr__\<lfloor>Throw az__\<rceil>" and "a2 = uh__" and "a3 = \<lbrace>\<rbrace>" and "a4 = Throw az__" and "a5 = uh__"   | C :: "ty" and a :: "'addr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" where "a1 = Cast C (Throw bc__)" and "a2 = ui__" and "a3 = \<lbrace>\<rbrace>" and "a4 = Throw bc__" and "a5 = ui__"   | a :: "'addr" and T :: "ty" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" where "a1 = Throw bd__ instanceof Tt__" and "a2 = uj__" and "a3 = \<lbrace>\<rbrace>" and "a4 = Throw bd__" and "a5 = uj__"   | a :: "'addr" and bop :: "bop" and e\<^sub>2 :: "'addr expr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" where "a1 = Throw be__ \<guillemotleft>bopd__\<guillemotright> e\<^sub>2__" and "a2 = uk__" and "a3 = \<lbrace>\<rbrace>" and "a4 = Throw be__" and "a5 = uk__"   | v\<^sub>1 :: "'addr val" and bop :: "bop" and a :: "'addr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" where "a1 = Val v\<^sub>1 \<guillemotleft>bop\<guillemotright> Throw bf__" and "a2 = ul__" and "a3 = \<lbrace>\<rbrace>" and "a4 = Throw bf__" and "a5 = ul__"   | V :: "String.literal" and a :: "'addr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" where "a1 = Vi__:=Throw bg__" and "a2 = um__" and "a3 = \<lbrace>\<rbrace>" and "a4 = Throw bg__" and "a5 = um__"   | a :: "'addr" and i :: "'addr expr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" where "a1 = Throw bh__\<lfloor>io__\<rceil>" and "a2 = un__" and "a3 = \<lbrace>\<rbrace>" and "a4 = Throw bh__" and "a5 = un__"   | v :: "'addr val" and a :: "'addr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" where "a1 = Val vw__\<lfloor>Throw bi__\<rceil>" and "a2 = uo__" and "a3 = \<lbrace>\<rbrace>" and "a4 = Throw bi__" and "a5 = uo__"   | a :: "'addr" and i :: "'addr expr" and e :: "'addr expr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" where "a1 = Throw bj__\<lfloor>ip__\<rceil> := fb__" and "a2 = up__" and "a3 = \<lbrace>\<rbrace>" and "a4 = Throw bj__" and "a5 = up__"   | v :: "'addr val" and a :: "'addr" and e :: "'addr expr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" where "a1 = Val vx__\<lfloor>Throw bk__\<rceil> := fc__" and "a2 = uq__" and "a3 = \<lbrace>\<rbrace>" and "a4 = Throw bk__" and "a5 = uq__"   | v :: "'addr val" and i :: "'addr val" and a :: "'addr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" where "a1 = Val vy__\<lfloor>Val i\<rceil> := Throw bl__" and "a2 = ur__" and "a3 = \<lbrace>\<rbrace>" and "a4 = Throw bl__" and "a5 = ur__"   | a :: "'addr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" where "a1 = Throw bm__\<bullet>length" and "a2 = us__" and "a3 = \<lbrace>\<rbrace>" and "a4 = Throw bm__" and "a5 = us__"   | a :: "'addr" and F :: "String.literal" and D :: "String.literal" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" where "a1 = Throw bn__\<bullet>Fm__{Dq__}" and "a2 = ut__" and "a3 = \<lbrace>\<rbrace>" and "a4 = Throw bn__" and "a5 = ut__"   | a :: "'addr" and F :: "String.literal" and D :: "String.literal" and e\<^sub>2 :: "'addr expr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" where "a1 = Throw bo__\<bullet>Fn__{Dr__} := e\<^sub>2'__" and "a2 = uu__" and "a3 = \<lbrace>\<rbrace>" and "a4 = Throw bo__" and "a5 = uu__"   | v :: "'addr val" and F :: "String.literal" and D :: "String.literal" and a :: "'addr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" where "a1 = Val vz__\<bullet>Fo__{Ds__} := Throw bp__" and "a2 = uv__" and "a3 = \<lbrace>\<rbrace>" and "a4 = Throw bp__" and "a5 = uv__"   | a :: "'addr" and D :: "String.literal" and F :: "String.literal" and e2 :: "'addr expr" and e3 :: "'addr expr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" where "a1 = Throw bq__\<bullet>compareAndSwap(Dt__\<bullet>Fp__, e2, e3b__)" and "a2 = uw__" and "a3 = \<lbrace>\<rbrace>" and "a4 = Throw bq__" and "a5 = uw__"   | v :: "'addr val" and D :: "String.literal" and F :: "String.literal" and a :: "'addr" and e3 :: "'addr expr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" where "a1 = Val wb__\<bullet>compareAndSwap(Du__\<bullet>Fq__, Throw br__, e3)" and "a2 = ux__" and "a3 = \<lbrace>\<rbrace>" and "a4 = Throw br__" and "a5 = ux__"   | v :: "'addr val" and D :: "String.literal" and F :: "String.literal" and v' :: "'addr val" and a :: "'addr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" where "a1 = Val wc__\<bullet>compareAndSwap(D\<bullet>F, Val v', Throw bs__)" and "a2 = uy__" and "a3 = \<lbrace>\<rbrace>" and "a4 = Throw bs__" and "a5 = uy__"   | a :: "'addr" and M :: "String.literal" and es :: "'addr expr list" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" where "a1 = Throw bt__\<bullet>Me__(esb__)" and "a2 = uz__" and "a3 = \<lbrace>\<rbrace>" and "a4 = Throw bt__" and "a5 = uz__"   | es :: "'addr expr list" and vs :: "'addr val list" and a :: "'addr" and es' :: "'addr expr list" and v :: "'addr val" and M :: "String.literal" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" where "a1 = Val v\<bullet>M(es)" and "a2 = we__" and "a3 = \<lbrace>\<rbrace>" and "a4 = Throw bu__" and "a5 = we__" and "es = map Val vs @ Throw bu__ # es'"   | V :: "String.literal" and T :: "ty" and vo :: "'addr val option" and a :: "'addr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" where "a1 = {V:T=vo; Throw bv__}" and "a2 = wf__" and "a3 = \<lbrace>\<rbrace>" and "a4 = Throw bv__" and "a5 = wf__"   | a :: "'addr" and e :: "'addr expr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" where "a1 = sync(Throw bw__) e" and "a2 = wg__" and "a3 = \<lbrace>\<rbrace>" and "a4 = Throw bw__" and "a5 = wg__"   | a :: "'addr" and ad :: "'addr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" where "a1 = insync(bx__) Throw ad" and "a2 = wh__" and "a3 = \<lbrace>(Unlock, bx__), SyncUnlock bx__\<rbrace>" and "a4 = Throw ad" and "a5 = wh__"   | a :: "'addr" and e\<^sub>2 :: "'addr expr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" where "a1 = Throw by__;; e\<^sub>2''__" and "a2 = wi__" and "a3 = \<lbrace>\<rbrace>" and "a4 = Throw by__" and "a5 = wi__"   | a :: "'addr" and e\<^sub>1 :: "'addr expr" and e\<^sub>2 :: "'addr expr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" where "a1 = if (Throw bz__) e\<^sub>1 else e\<^sub>2" and "a2 = wj__" and "a3 = \<lbrace>\<rbrace>" and "a4 = Throw bz__" and "a5 = wj__"   | a :: "'addr" and s :: "'heap \<times> (String.literal \<Rightarrow> 'addr val option)" where "a1 = throw (Throw a)" and "a2 = s" and "a3 = \<lbrace>\<rbrace>" and "a4 = Throw a" and "a5 = s"