eval_cases: fixes G :: "prog"   and s :: "state"   and t :: "Term.term"   and v :: "vals"   and s' :: "state" assumes "G\<turnstile>s \<midarrow>t\<succ>\<rightarrow> (v, s')" obtains xc :: "abrupt" and sa :: "st" where "s = (Some xc, sa__)" and "va__ = undefined3 t" and "s' = (Some xc, sa__)"   | sa :: "st" where "s = Norm saa__" and "t = In1r Skip" and "va__ = \<diamondsuit>" and "s' = Norm saa__"   | s0 :: "st" and e :: "expr" and v :: "val" where "s = Norm s0b__" and "t = In1r (Expr ea__)" and "va__ = \<diamondsuit>" and "G\<turnstile>Norm s0b__ \<midarrow>ea__-\<succ>vb__\<rightarrow> s'"   | s0 :: "st" and c :: "stmt" and s1 :: "state" and l :: "jump" where "s = Norm s0c__" and "t = In1r (l__\<bullet> c__)" and "va__ = \<diamondsuit>" and "s' = abupd (absorb l__) s1b__" and "G\<turnstile>Norm s0c__ \<midarrow>c__\<rightarrow> s1b__"   | s0 :: "st" and c1 :: "stmt" and s1 :: "state" and c2 :: "stmt" where "s = Norm s0d__" and "t = In1r (c1a__;; c2a__)" and "va__ = \<diamondsuit>" and "G\<turnstile>Norm s0d__ \<midarrow>c1a__\<rightarrow> s1c__" and "G\<turnstile>s1c__ \<midarrow>c2a__\<rightarrow> s'"   | s0 :: "st" and e :: "expr" and b :: "val" and s1 :: "state" and c1 :: "stmt" and c2 :: "stmt" where "s = Norm s0e__" and "t = In1r (If(eb__) c1b__ Else c2b__)" and "va__ = \<diamondsuit>" and "G\<turnstile>Norm s0e__ \<midarrow>eb__-\<succ>ba__\<rightarrow> s1d__" and "G\<turnstile>s1d__ \<midarrow>(if the_Bool ba__ then c1b__ else c2b__)\<rightarrow> s'"   | s0 :: "st" and e :: "expr" and b :: "val" and s1 :: "state" and c :: "stmt" and s2 :: "state" and l :: "label" where "s = Norm s0f__" and "t = In1r (l\<bullet> While(ec__) ca__)" and "va__ = \<diamondsuit>" and "G\<turnstile>Norm s0f__ \<midarrow>ec__-\<succ>bb__\<rightarrow> s1e__" and "if the_Bool bb__ then G\<turnstile>s1e__ \<midarrow>ca__\<rightarrow> s2a__ \<and> G\<turnstile>abupd (absorb (Cont l)) s2a__ \<midarrow>l\<bullet> While(ec__) ca__\<rightarrow> s' else s' = s1e__"   | sa :: "st" and j :: "jump" where "s = Norm sab__" and "t = In1r (Jmp j)" and "va__ = \<diamondsuit>" and "s' = (Some (Jump j), sab__)"   | s0 :: "st" and e :: "expr" and a' :: "val" and s1 :: "state" where "s = Norm s0g__" and "t = In1r (Throw ed__)" and "va__ = \<diamondsuit>" and "s' = abupd (throw a'__) s1f__" and "G\<turnstile>Norm s0g__ \<midarrow>ed__-\<succ>a'__\<rightarrow> s1f__"   | s0 :: "st" and c1 :: "stmt" and s1 :: "state" and s2 :: "state" and C :: "qtname" and vn :: "vname" and c2 :: "stmt" where "s = Norm s0h__" and "t = In1r (Try c1c__ Catch(Ca__ vn__) c2c__)" and "va__ = \<diamondsuit>" and "G\<turnstile>Norm s0h__ \<midarrow>c1c__\<rightarrow> s1g__" and "G\<turnstile>s1g__ \<midarrow>sxalloc\<rightarrow> s2b__" and "if G,s2b__\<turnstile>catch Ca__ then G\<turnstile>new_xcpt_var vn__ s2b__ \<midarrow>c2c__\<rightarrow> s' else s' = s2b__"   | s0 :: "st" and c1 :: "stmt" and x1 :: "abopt" and s1 :: "st" and c2 :: "stmt" and s2 :: "state" where "s = Norm s0i__" and "t = In1r (c1 Finally c2)" and "va__ = \<diamondsuit>" and "s' = (if \<exists>err. x1 = Some (Error err) then (x1, s1h__) else abupd (abrupt_if (x1 \<noteq> None) x1) s2c__)" and "G\<turnstile>Norm s0i__ \<midarrow>c1\<rightarrow> (x1, s1h__)" and "G\<turnstile>Norm s1h__ \<midarrow>c2\<rightarrow> s2c__"   | C :: "qtname" and s0 :: "st" and s1 :: "state" and s2 :: "state" where "s = Norm s0j__" and "t = In1r (Init Cb__)" and "va__ = \<diamondsuit>" and "if inited Cb__ (globs s0j__) then s' = Norm s0j__ else G\<turnstile>Norm (init_class_obj G Cb__ s0j__) \<midarrow>(if Cb__ = Object then Skip else Init (super (the (class G Cb__))))\<rightarrow> s1i__ \<and> G\<turnstile>set_lvars Map.empty s1i__ \<midarrow>init (the (class G Cb__))\<rightarrow> s2d__ \<and> s' = set_lvars (locals (snd s1i__)) s2d__"   | s0 :: "st" and C :: "qtname" and s1 :: "state" and a :: "loc" where "s = Norm s0k__" and "t = In1l (NewC C)" and "va__ = In1 (Addr a__)" and "G\<turnstile>Norm s0k__ \<midarrow>Init C\<rightarrow> s1j__" and "G\<turnstile>s1j__ \<midarrow>halloc CInst C\<succ>a__\<rightarrow> s'"   | s0 :: "st" and T :: "ty" and s1 :: "state" and e :: "expr" and i' :: "val" and s2 :: "state" and a :: "loc" where "s = Norm s0l__" and "t = In1l (New Tb__[ee__])" and "va__ = In1 (Addr aa__)" and "G\<turnstile>Norm s0l__ \<midarrow>init_comp_ty Tb__\<rightarrow> s1k__" and "G\<turnstile>s1k__ \<midarrow>ee__-\<succ>i'\<rightarrow> s2e__" and "G\<turnstile>abupd (check_neg i') s2e__ \<midarrow>halloc Arr Tb__ (the_Intg i')\<succ>aa__\<rightarrow> s'"   | s0 :: "st" and e :: "expr" and v :: "val" and s1 :: "state" and T :: "ty" where "s = Norm s0m__" and "t = In1l (Cast Tc__ ef__)" and "va__ = In1 vc__" and "s' = abupd (raise_if (\<not> G,snd s1l__\<turnstile>vc__ fits Tc__) ClassCast) s1l__" and "G\<turnstile>Norm s0m__ \<midarrow>ef__-\<succ>vc__\<rightarrow> s1l__"   | s0 :: "st" and e :: "expr" and v :: "val" and T :: "ref_ty" where "s = Norm s0n__" and "t = In1l (eg__ InstOf T)" and "va__ = In1 (Bool (vd__ \<noteq> Null \<and> G,snd s'\<turnstile>vd__ fits RefT T))" and "G\<turnstile>Norm s0n__ \<midarrow>eg__-\<succ>vd__\<rightarrow> s'"   | sa :: "st" and v :: "val" where "s = Norm sac__" and "t = In1l (Lit ve__)" and "va__ = In1 ve__" and "s' = Norm sac__"   | s0 :: "st" and e :: "expr" and v :: "val" and unop :: "unop" where "s = Norm s0o__" and "t = In1l (UnOp unop eh__)" and "va__ = In1 (eval_unop unop vf__)" and "G\<turnstile>Norm s0o__ \<midarrow>eh__-\<succ>vf__\<rightarrow> s'"   | s0 :: "st" and e1 :: "expr" and v1 :: "val" and s1 :: "state" and binop :: "binop" and e2 :: "expr" and v2 :: "val" where "s = Norm s0p__" and "t = In1l (BinOp binop e1__ e2__)" and "va__ = In1 (eval_binop binop v1 v2)" and "G\<turnstile>Norm s0p__ \<midarrow>e1__-\<succ>v1\<rightarrow> s1m__" and "G\<turnstile>s1m__ \<midarrow>(if need_second_arg binop v1 then In1l e2__ else In1r Skip)\<succ>\<rightarrow> (In1 v2, s')"   | sa :: "st" where "s = Norm sad__" and "t = In1l Super" and "va__ = In1 (val_this sad__)" and "s' = Norm sad__"   | s0 :: "st" and vaa :: "Term.var" and v :: "val" and f :: "val \<Rightarrow> state \<Rightarrow> state" where "s = Norm s0q__" and "t = In1l (Acc vaa__)" and "va__ = In1 vg__" and "G\<turnstile>Norm s0q__ \<midarrow>vaa__=\<succ>(vg__, f__)\<rightarrow> s'"   | s0 :: "st" and vaa :: "Term.var" and w :: "val" and f :: "val \<Rightarrow> state \<Rightarrow> state" and s1 :: "state" and e :: "expr" and v :: "val" and s2 :: "state" where "s = Norm s0r__" and "t = In1l (vaa:=ei__)" and "va__ = In1 vh__" and "s' = assign f vh__ s2f__" and "G\<turnstile>Norm s0r__ \<midarrow>vaa=\<succ>(w, f)\<rightarrow> s1n__" and "G\<turnstile>s1n__ \<midarrow>ei__-\<succ>vh__\<rightarrow> s2f__"   | s0 :: "st" and e0 :: "expr" and b :: "val" and s1 :: "state" and e1 :: "expr" and e2 :: "expr" and v :: "val" where "s = Norm s0s__" and "t = In1l (e0 ? e1a__ : e2a__)" and "va__ = In1 vi__" and "G\<turnstile>Norm s0s__ \<midarrow>e0-\<succ>b\<rightarrow> s1o__" and "G\<turnstile>s1o__ \<midarrow>(if the_Bool b then e1a__ else e2a__)-\<succ>vi__\<rightarrow> s'"   | s0 :: "st" and e :: "expr" and a' :: "val" and s1 :: "state" and args :: "expr list" and vs :: "val list" and s2 :: "state" and mode :: "inv_mode" and statT :: "ref_ty" and mn :: "mname" and pTs :: "ty list" and accC :: "qtname" and v :: "val" and s4 :: "state" where "s = Norm s0t__" and "t = In1l ({accCb__,statT,mode}ej__\<cdot>mn( {pTs}args))" and "va__ = In1 vj__" and "s' = set_lvars (locals (snd s2g__)) s4" and "G\<turnstile>Norm s0t__ \<midarrow>ej__-\<succ>a'\<rightarrow> s1p__" and "G\<turnstile>s1p__ \<midarrow>args\<doteq>\<succ>vs__\<rightarrow> s2g__" and "G\<turnstile>check_method_access G accCb__ statT mode \<lparr>name = mn, parTs = pTs\<rparr> a' (init_lvars G (invocation_declclass G mode (snd s2g__) a' statT \<lparr>name = mn, parTs = pTs\<rparr>) \<lparr>name = mn, parTs = pTs\<rparr> mode a' vs__ s2g__) \<midarrow>Methd (invocation_declclass G mode (snd s2g__) a' statT \<lparr>name = mn, parTs = pTs\<rparr>) \<lparr>name = mn, parTs = pTs\<rparr>-\<succ>vj__\<rightarrow> s4"   | s0 :: "st" and D :: "qtname" and sig :: "sig" and v :: "val" where "s = Norm s0u__" and "t = In1l (Methd D__ sig)" and "va__ = In1 vk__" and "G\<turnstile>Norm s0u__ \<midarrow>body G D__ sig-\<succ>vk__\<rightarrow> s'"   | s0 :: "st" and D :: "qtname" and s1 :: "state" and c :: "stmt" and s2 :: "state" where "s = Norm s0v__" and "t = In1l (Body D c)" and "va__ = In1 (the (locals (snd s2h__) Result))" and "s' = abupd (absorb Ret) (if \<exists>l. fst s2h__ = Some (Jump (Break l)) \<or> fst s2h__ = Some (Jump (Cont l)) then abupd (\<lambda>x. Some (Error CrossMethodJump)) s2h__ else s2h__)" and "G\<turnstile>Norm s0v__ \<midarrow>Init D\<rightarrow> s1q__" and "G\<turnstile>s1q__ \<midarrow>c\<rightarrow> s2h__"   | sa :: "st" and vn :: "lname" where "s = Norm sa" and "t = In2 (LVar vn)" and "va__ = In2 (lvar vn sa)" and "s' = Norm sa"   | s0 :: "st" and statDeclC :: "qtname" and s1 :: "state" and e :: "expr" and a :: "val" and s2 :: "state" and v :: "vvar" and s2' :: "state" and stat :: "bool" and fn :: "vname" and accC :: "qtname" where "s = Norm s0w__" and "t = In2 ({accC,statDeclC,stat}ek__..fn)" and "va__ = In2 vl__" and "s' = check_field_access G accC statDeclC fn stat ab__ s2'" and "G\<turnstile>Norm s0w__ \<midarrow>Init statDeclC\<rightarrow> s1r__" and "G\<turnstile>s1r__ \<midarrow>ek__-\<succ>ab__\<rightarrow> s2i__" and "(vl__, s2') = fvar statDeclC stat fn ab__ s2i__"   | s0 :: "st" and e1 :: "expr" and a :: "val" and s1 :: "state" and e2 :: "expr" and i :: "val" and s2 :: "state" and v :: "vvar" where "s = Norm s0x__" and "t = In2 (e1.[e2])" and "va__ = In2 vm__" and "G\<turnstile>Norm s0x__ \<midarrow>e1-\<succ>a\<rightarrow> s1s__" and "G\<turnstile>s1s__ \<midarrow>e2-\<succ>i\<rightarrow> s2" and "(vm__, s') = avar G i a s2"   | s0 :: "st" where "s = Norm s0y__" and "t = In3 []" and "va__ = In3 []" and "s' = Norm s0y__"   | s0 :: "st" and e :: "expr" and v :: "val" and s1 :: "state" and es :: "expr list" and vs :: "val list" where "s = Norm s0" and "t = In3 (e # es)" and "va__ = In3 (v # vs)" and "G\<turnstile>Norm s0 \<midarrow>e-\<succ>v\<rightarrow> s1" and "G\<turnstile>s1 \<midarrow>es\<doteq>\<succ>vs\<rightarrow> s'"