cases: fixes a1 :: "env"   and a2 :: "lname set"   and a3 :: "Term.term"   and a4 :: "assigned" assumes "a1\<turnstile> a2 \<guillemotright>a3\<guillemotright> a4" obtains Env :: "env" and B :: "lname set" where "a1 = Env__" and "a2 = B__" and "a3 = \<langle>Skip\<rangle>" and "a4 = \<lparr>nrm = B__, brk = \<lambda>l. UNIV\<rparr>"   | Env :: "env" and B :: "lname set" and e :: "expr" and A :: "assigned" where "a1 = Enva__" and "a2 = Ba__" and "a3 = \<langle>Expr e__\<rangle>" and "a4 = A__" and "Enva__\<turnstile> Ba__ \<guillemotright>\<langle>e__\<rangle>\<guillemotright> A__"   | Env :: "env" and B :: "lname set" and c :: "stmt" and C :: "assigned" and A :: "assigned" and l :: "label" where "a1 = Envb__" and "a2 = Bb__" and "a3 = \<langle>Break l__\<bullet> c__\<rangle>" and "a4 = Aa__" and "Envb__\<turnstile> Bb__ \<guillemotright>\<langle>c__\<rangle>\<guillemotright> C__" and "nrm Aa__ = nrm C__ \<inter> brk C__ l__" and "brk Aa__ = rmlab l__ (brk C__)"   | Env :: "env" and B :: "lname set" and c1 :: "stmt" and C1 :: "assigned" and c2 :: "stmt" and C2 :: "assigned" and A :: "assigned" where "a1 = Envc__" and "a2 = Bc__" and "a3 = \<langle>c1__;; c2__\<rangle>" and "a4 = Ab__" and "Envc__\<turnstile> Bc__ \<guillemotright>\<langle>c1__\<rangle>\<guillemotright> C1__" and "Envc__\<turnstile> nrm C1__ \<guillemotright>\<langle>c2__\<rangle>\<guillemotright> C2__" and "nrm Ab__ = nrm C2__" and "brk Ab__ = brk C1__ \<Rightarrow>\<inter>  brk C2__"   | Env :: "env" and B :: "lname set" and e :: "expr" and E :: "assigned" and c1 :: "stmt" and C1 :: "assigned" and c2 :: "stmt" and C2 :: "assigned" and A :: "assigned" where "a1 = Envd__" and "a2 = Bd__" and "a3 = \<langle>If(ea__) c1a__ Else c2a__\<rangle>" and "a4 = Ac__" and "Envd__\<turnstile> Bd__ \<guillemotright>\<langle>ea__\<rangle>\<guillemotright> E__" and "Envd__\<turnstile> Bd__ \<union> assigns_if True ea__ \<guillemotright>\<langle>c1a__\<rangle>\<guillemotright> C1a__" and "Envd__\<turnstile> Bd__ \<union> assigns_if False ea__ \<guillemotright>\<langle>c2a__\<rangle>\<guillemotright> C2a__" and "nrm Ac__ = nrm C1a__ \<inter> nrm C2a__" and "brk Ac__ = brk C1a__ \<Rightarrow>\<inter>  brk C2a__"   | Env :: "env" and B :: "lname set" and e :: "expr" and E :: "assigned" and c :: "stmt" and C :: "assigned" and A :: "assigned" and l :: "label" where "a1 = Enve__" and "a2 = Be__" and "a3 = \<langle>l\<bullet> While(eb__) ca__\<rangle>" and "a4 = Ad__" and "Enve__\<turnstile> Be__ \<guillemotright>\<langle>eb__\<rangle>\<guillemotright> Ea__" and "Enve__\<turnstile> Be__ \<union> assigns_if True eb__ \<guillemotright>\<langle>ca__\<rangle>\<guillemotright> Ca__" and "nrm Ad__ = nrm Ca__ \<inter> (Be__ \<union> assigns_if False eb__)" and "brk Ad__ = brk Ca__"   | jump :: "jump" and B :: "lname set" and A :: "assigned" and Env :: "env" where "a1 = Envf__" and "a2 = Bf__" and "a3 = \<langle>Jmp jump\<rangle>" and "a4 = Ae__" and "jump = Ret \<longrightarrow> Result \<in> Bf__" and "nrm Ae__ = UNIV" and "brk Ae__ = (case jump of Break l \<Rightarrow> \<lambda>k. if k = l then Bf__ else UNIV | _ \<Rightarrow> \<lambda>k. UNIV)"   | Env :: "env" and B :: "lname set" and e :: "expr" and E :: "assigned" and A :: "assigned" where "a1 = Envg__" and "a2 = Bg__" and "a3 = \<langle>Throw ec__\<rangle>" and "a4 = Af__" and "Envg__\<turnstile> Bg__ \<guillemotright>\<langle>ec__\<rangle>\<guillemotright> Eb__" and "nrm Af__ = UNIV" and "brk Af__ = (\<lambda>l. UNIV)"   | Env :: "env" and B :: "lname set" and c1 :: "stmt" and C1 :: "assigned" and vn :: "vname" and C :: "qtname" and c2 :: "stmt" and C2 :: "assigned" and A :: "assigned" where "a1 = Envh__" and "a2 = Bh__" and "a3 = \<langle>Try c1b__ Catch(Cb__ vn__) c2b__\<rangle>" and "a4 = Ag__" and "Envh__\<turnstile> Bh__ \<guillemotright>\<langle>c1b__\<rangle>\<guillemotright> C1b__" and "Envh__\<lparr>lcl := lcl Envh__(VName vn__ \<mapsto> Class Cb__)\<rparr>\<turnstile> Bh__ \<union> {VName vn__} \<guillemotright>\<langle>c2b__\<rangle>\<guillemotright> C2b__" and "nrm Ag__ = nrm C1b__ \<inter> nrm C2b__" and "brk Ag__ = brk C1b__ \<Rightarrow>\<inter>  brk C2b__"   | Env :: "env" and B :: "lname set" and c1 :: "stmt" and C1 :: "assigned" and c2 :: "stmt" and C2 :: "assigned" and A :: "assigned" where "a1 = Envi__" and "a2 = Bi__" and "a3 = \<langle>c1 Finally c2\<rangle>" and "a4 = Ah__" and "Envi__\<turnstile> Bi__ \<guillemotright>\<langle>c1\<rangle>\<guillemotright> C1" and "Envi__\<turnstile> Bi__ \<guillemotright>\<langle>c2\<rangle>\<guillemotright> C2" and "nrm Ah__ = nrm C1 \<union> nrm C2" and "brk Ah__ = (brk C1 \<Rightarrow>\<union>\<^sub>\<forall> nrm C2) \<Rightarrow>\<inter>  brk C2"   | Env :: "env" and B :: "lname set" and C :: "qtname" where "a1 = Envj__" and "a2 = Bj__" and "a3 = \<langle>Init Cc__\<rangle>" and "a4 = \<lparr>nrm = Bj__, brk = \<lambda>l. UNIV\<rparr>"   | Env :: "env" and B :: "lname set" and C :: "qtname" where "a1 = Envk__" and "a2 = Bk__" and "a3 = \<langle>NewC Cd__\<rangle>" and "a4 = \<lparr>nrm = Bk__, brk = \<lambda>l. UNIV\<rparr>"   | Env :: "env" and B :: "lname set" and e :: "expr" and A :: "assigned" and T :: "ty" where "a1 = Envl__" and "a2 = Bl__" and "a3 = \<langle>New T__[ed__]\<rangle>" and "a4 = Ai__" and "Envl__\<turnstile> Bl__ \<guillemotright>\<langle>ed__\<rangle>\<guillemotright> Ai__"   | Env :: "env" and B :: "lname set" and e :: "expr" and A :: "assigned" and T :: "ty" where "a1 = Envm__" and "a2 = Bm__" and "a3 = \<langle>Cast Ta__ ee__\<rangle>" and "a4 = Aj__" and "Envm__\<turnstile> Bm__ \<guillemotright>\<langle>ee__\<rangle>\<guillemotright> Aj__"   | Env :: "env" and B :: "lname set" and e :: "expr" and A :: "assigned" and T :: "ref_ty" where "a1 = Envn__" and "a2 = Bn__" and "a3 = \<langle>ef__ InstOf T\<rangle>" and "a4 = Ak__" and "Envn__\<turnstile> Bn__ \<guillemotright>\<langle>ef__\<rangle>\<guillemotright> Ak__"   | Env :: "env" and B :: "lname set" and v :: "val" where "a1 = Envo__" and "a2 = Bo__" and "a3 = \<langle>Lit v__\<rangle>" and "a4 = \<lparr>nrm = Bo__, brk = \<lambda>l. UNIV\<rparr>"   | Env :: "env" and B :: "lname set" and e :: "expr" and A :: "assigned" and unop :: "unop" where "a1 = Envp__" and "a2 = Bp__" and "a3 = \<langle>UnOp unop eg__\<rangle>" and "a4 = Al__" and "Envp__\<turnstile> Bp__ \<guillemotright>\<langle>eg__\<rangle>\<guillemotright> Al__"   | Env :: "env" and B :: "lname set" and e1 :: "expr" and E1 :: "assigned" and e2 :: "expr" and E2 :: "assigned" and A :: "assigned" where "a1 = Envq__" and "a2 = Bq__" and "a3 = \<langle>BinOp CondAnd e1__ e2__\<rangle>" and "a4 = Am__" and "Envq__\<turnstile> Bq__ \<guillemotright>\<langle>e1__\<rangle>\<guillemotright> E1__" and "Envq__\<turnstile> Bq__ \<union> assigns_if True e1__ \<guillemotright>\<langle>e2__\<rangle>\<guillemotright> E2__" and "nrm Am__ = Bq__ \<union> assigns_if True (BinOp CondAnd e1__ e2__) \<inter> assigns_if False (BinOp CondAnd e1__ e2__)" and "brk Am__ = (\<lambda>l. UNIV)"   | Env :: "env" and B :: "lname set" and e1 :: "expr" and E1 :: "assigned" and e2 :: "expr" and E2 :: "assigned" and A :: "assigned" where "a1 = Envr__" and "a2 = Br__" and "a3 = \<langle>BinOp CondOr e1a__ e2a__\<rangle>" and "a4 = An__" and "Envr__\<turnstile> Br__ \<guillemotright>\<langle>e1a__\<rangle>\<guillemotright> E1a__" and "Envr__\<turnstile> Br__ \<union> assigns_if False e1a__ \<guillemotright>\<langle>e2a__\<rangle>\<guillemotright> E2a__" and "nrm An__ = Br__ \<union> assigns_if True (BinOp CondOr e1a__ e2a__) \<inter> assigns_if False (BinOp CondOr e1a__ e2a__)" and "brk An__ = (\<lambda>l. UNIV)"   | Env :: "env" and B :: "lname set" and e1 :: "expr" and E1 :: "assigned" and e2 :: "expr" and A :: "assigned" and binop :: "binop" where "a1 = Envs__" and "a2 = Bs__" and "a3 = \<langle>BinOp binop e1b__ e2b__\<rangle>" and "a4 = Ao__" and "Envs__\<turnstile> Bs__ \<guillemotright>\<langle>e1b__\<rangle>\<guillemotright> E1b__" and "Envs__\<turnstile> nrm E1b__ \<guillemotright>\<langle>e2b__\<rangle>\<guillemotright> Ao__" and "binop \<noteq> CondAnd" and "binop \<noteq> CondOr"   | B :: "lname set" and Env :: "env" where "a1 = Envt__" and "a2 = Bt__" and "a3 = \<langle>Super\<rangle>" and "a4 = \<lparr>nrm = Bt__, brk = \<lambda>l. UNIV\<rparr>" and "This \<in> Bt__"   | vn :: "lname" and B :: "lname set" and A :: "assigned" and Env :: "env" where "a1 = Envu__" and "a2 = Bu__" and "a3 = \<langle>Acc (LVar vna__)\<rangle>" and "a4 = Ap__" and "vna__ \<in> Bu__" and "nrm Ap__ = Bu__" and "brk Ap__ = (\<lambda>k. UNIV)"   | v :: "Term.var" and Env :: "env" and B :: "lname set" and A :: "assigned" where "a1 = Envv__" and "a2 = Bv__" and "a3 = \<langle>Acc va__\<rangle>" and "a4 = Aq__" and "\<forall>vn. va__ \<noteq> LVar vn" and "Envv__\<turnstile> Bv__ \<guillemotright>\<langle>va__\<rangle>\<guillemotright> Aq__"   | Env :: "env" and B :: "lname set" and e :: "expr" and E :: "assigned" and A :: "assigned" and vn :: "lname" where "a1 = Envw__" and "a2 = Bw__" and "a3 = \<langle>LVar vnb__:=eh__\<rangle>" and "a4 = Ar__" and "Envw__\<turnstile> Bw__ \<guillemotright>\<langle>eh__\<rangle>\<guillemotright> Ec__" and "nrm Ar__ = nrm Ec__ \<union> {vnb__}" and "brk Ar__ = brk Ec__"   | v :: "Term.var" and Env :: "env" and B :: "lname set" and V :: "assigned" and e :: "expr" and A :: "assigned" where "a1 = Envx__" and "a2 = Bx__" and "a3 = \<langle>v:=ei__\<rangle>" and "a4 = As__" and "\<forall>vn. v \<noteq> LVar vn" and "Envx__\<turnstile> Bx__ \<guillemotright>\<langle>v\<rangle>\<guillemotright> V" and "Envx__\<turnstile> nrm V \<guillemotright>\<langle>ei__\<rangle>\<guillemotright> As__"   | Env :: "env" and c :: "expr" and e1 :: "expr" and e2 :: "expr" and B :: "lname set" and C :: "assigned" and E1 :: "assigned" and E2 :: "assigned" and A :: "assigned" where "a1 = Envy__" and "a2 = By__" and "a3 = \<langle>cb__ ? e1c__ : e2c__\<rangle>" and "a4 = At__" and "Envy__\<turnstile>cb__ ? e1c__ : e2c__\<Colon>-PrimT Boolean" and "Envy__\<turnstile> By__ \<guillemotright>\<langle>cb__\<rangle>\<guillemotright> Ce__" and "Envy__\<turnstile> By__ \<union> assigns_if True cb__ \<guillemotright>\<langle>e1c__\<rangle>\<guillemotright> E1c__" and "Envy__\<turnstile> By__ \<union> assigns_if False cb__ \<guillemotright>\<langle>e2c__\<rangle>\<guillemotright> E2b__" and "nrm At__ = By__ \<union> assigns_if True (cb__ ? e1c__ : e2c__) \<inter> assigns_if False (cb__ ? e1c__ : e2c__)" and "brk At__ = (\<lambda>l. UNIV)"   | Env :: "env" and c :: "expr" and e1 :: "expr" and e2 :: "expr" and B :: "lname set" and C :: "assigned" and E1 :: "assigned" and E2 :: "assigned" and A :: "assigned" where "a1 = Envz__" and "a2 = Bz__" and "a3 = \<langle>cc__ ? e1d__ : e2d__\<rangle>" and "a4 = Au__" and "\<not> Envz__\<turnstile>cc__ ? e1d__ : e2d__\<Colon>-PrimT Boolean" and "Envz__\<turnstile> Bz__ \<guillemotright>\<langle>cc__\<rangle>\<guillemotright> Cf__" and "Envz__\<turnstile> Bz__ \<union> assigns_if True cc__ \<guillemotright>\<langle>e1d__\<rangle>\<guillemotright> E1d__" and "Envz__\<turnstile> Bz__ \<union> assigns_if False cc__ \<guillemotright>\<langle>e2d__\<rangle>\<guillemotright> E2" and "nrm Au__ = nrm E1d__ \<inter> nrm E2" and "brk Au__ = (\<lambda>l. UNIV)"   | Env :: "env" and B :: "lname set" and e :: "expr" and E :: "assigned" and args :: "expr list" and A :: "assigned" and accC :: "qtname" and statT :: "ref_ty" and mode :: "inv_mode" and mn :: "mname" and pTs :: "ty list" where "a1 = Enwa__" and "a2 = Baa__" and "a3 = \<langle>{accC__,statT,mode}ej__\<cdot>mn( {pTs}args)\<rangle>" and "a4 = Av__" and "Enwa__\<turnstile> Baa__ \<guillemotright>\<langle>ej__\<rangle>\<guillemotright> Ed__" and "Enwa__\<turnstile> nrm Ed__ \<guillemotright>\<langle>args\<rangle>\<guillemotright> Av__"   | Env :: "env" and D :: "qtname" and sig :: "sig" and m :: "qtname \<times> methd" and B :: "lname set" and A :: "assigned" where "a1 = Enwb__" and "a2 = Bab__" and "a3 = \<langle>Methd D__ sig\<rangle>" and "a4 = Aw__" and "methd (prg Enwb__) D__ sig = Some m" and "Enwb__\<turnstile> Bab__ \<guillemotright>\<langle>Body (declclass m) (stmt (mbody (mthd m)))\<rangle>\<guillemotright> Aw__"   | Env :: "env" and B :: "lname set" and c :: "stmt" and C :: "assigned" and A :: "assigned" and D :: "qtname" where "a1 = Enwc__" and "a2 = Bac__" and "a3 = \<langle>Body D c\<rangle>" and "a4 = Ax__" and "Enwc__\<turnstile> Bac__ \<guillemotright>\<langle>c\<rangle>\<guillemotright> C" and "jumpNestingOkS {Ret} c" and "Result \<in> nrm C" and "nrm Ax__ = Bac__" and "brk Ax__ = (\<lambda>l. UNIV)"   | Env :: "env" and B :: "lname set" and vn :: "lname" where "a1 = Enwd__" and "a2 = Bad__" and "a3 = \<langle>LVar vn\<rangle>" and "a4 = \<lparr>nrm = Bad__, brk = \<lambda>l. UNIV\<rparr>"   | Env :: "env" and B :: "lname set" and e :: "expr" and A :: "assigned" and accC :: "qtname" and statDeclC :: "qtname" and stat :: "bool" and fn :: "vname" where "a1 = Enwe__" and "a2 = Bae__" and "a3 = \<langle>{accC,statDeclC,stat}ek__..fn\<rangle>" and "a4 = Ay__" and "Enwe__\<turnstile> Bae__ \<guillemotright>\<langle>ek__\<rangle>\<guillemotright> Ay__"   | Env :: "env" and B :: "lname set" and e1 :: "expr" and E1 :: "assigned" and e2 :: "expr" and A :: "assigned" where "a1 = Enwf__" and "a2 = Baf__" and "a3 = \<langle>e1.[e2]\<rangle>" and "a4 = Az__" and "Enwf__\<turnstile> Baf__ \<guillemotright>\<langle>e1\<rangle>\<guillemotright> E1" and "Enwf__\<turnstile> nrm E1 \<guillemotright>\<langle>e2\<rangle>\<guillemotright> Az__"   | Env :: "env" and B :: "lname set" where "a1 = Enwg__" and "a2 = Bag__" and "a3 = \<langle>[]\<rangle>" and "a4 = \<lparr>nrm = Bag__, brk = \<lambda>l. UNIV\<rparr>"   | Env :: "env" and B :: "lname set" and e :: "expr" and E :: "assigned" and es :: "expr list" and A :: "assigned" where "a1 = Env" and "a2 = B" and "a3 = \<langle>e # es\<rangle>" and "a4 = A" and "Env\<turnstile> B \<guillemotright>\<langle>e\<rangle>\<guillemotright> E" and "Env\<turnstile> nrm E \<guillemotright>\<langle>es\<rangle>\<guillemotright> A"