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