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