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