induct: fixes G :: "prog"   and x1 :: "state"   and x2 :: "Term.term"   and x3 :: "nat"   and x4 :: "vals"   and x5 :: "state"   and P :: "state \<Rightarrow> Term.term \<Rightarrow> nat \<Rightarrow> vals \<Rightarrow> state \<Rightarrow> bool" assumes "G\<turnstile>x1 \<midarrow>x2\<succ>\<midarrow>x3\<rightarrow> (x4, x5)"   and "\<And>xc s t n. P (Some xc, s) t n (undefined3 t) (Some xc, s)"   and "\<And>s vn n. P (Norm s) (In2 (LVar vn)) n (In2 (lvar vn s)) (Norm s)"   and "\<And>s0 statDeclC n s1 e a s2 v s2' stat fn s3 accC. \<lbrakk>G\<turnstile>Norm s0 \<midarrow>Init statDeclC\<midarrow>n\<rightarrow> s1; P (Norm s0) (In1r (Init statDeclC)) n \<diamondsuit> s1; G\<turnstile>s1 \<midarrow>e-\<succ>a\<midarrow>n\<rightarrow> s2; P s1 (In1l e) n (In1 a) s2; (v, s2') = fvar statDeclC stat fn a s2; s3 = check_field_access G accC statDeclC fn stat a s2'\<rbrakk> \<Longrightarrow> P (Norm s0) (In2 ({accC,statDeclC,stat}e..fn)) n (In2 v) s3"   and "\<And>s0 e1 a n s1 e2 i s2 v s2'. \<lbrakk>G\<turnstile>Norm s0 \<midarrow>e1-\<succ>a\<midarrow>n\<rightarrow> s1; P (Norm s0) (In1l e1) n (In1 a) s1; G\<turnstile>s1 \<midarrow>e2-\<succ>i\<midarrow>n\<rightarrow> s2; P s1 (In1l e2) n (In1 i) s2; (v, s2') = avar G i a s2\<rbrakk> \<Longrightarrow> P (Norm s0) (In2 (e1.[e2])) n (In2 v) s2'"   and "\<And>s0 C n s1 a s2. \<lbrakk>G\<turnstile>Norm s0 \<midarrow>Init C\<midarrow>n\<rightarrow> s1; P (Norm s0) (In1r (Init C)) n \<diamondsuit> s1; G\<turnstile>s1 \<midarrow>halloc CInst C\<succ>a\<rightarrow> s2\<rbrakk> \<Longrightarrow> P (Norm s0) (In1l (NewC C)) n (In1 (Addr a)) s2"   and "\<And>s0 T n s1 e i' s2 a s3. \<lbrakk>G\<turnstile>Norm s0 \<midarrow>init_comp_ty T\<midarrow>n\<rightarrow> s1; P (Norm s0) (In1r (init_comp_ty T)) n \<diamondsuit> s1; G\<turnstile>s1 \<midarrow>e-\<succ>i'\<midarrow>n\<rightarrow> s2; P s1 (In1l e) n (In1 i') s2; G\<turnstile>abupd (check_neg i') s2 \<midarrow>halloc Arr T (the_Intg i')\<succ>a\<rightarrow> s3\<rbrakk> \<Longrightarrow> P (Norm s0) (In1l (New T[e])) n (In1 (Addr a)) s3"   and "\<And>s0 e v n s1 s2 T. \<lbrakk>G\<turnstile>Norm s0 \<midarrow>e-\<succ>v\<midarrow>n\<rightarrow> s1; P (Norm s0) (In1l e) n (In1 v) s1; s2 = abupd (raise_if (\<not> G,snd s1\<turnstile>v fits T) ClassCast) s1\<rbrakk> \<Longrightarrow> P (Norm s0) (In1l (Cast T e)) n (In1 v) s2"   and "\<And>s0 e v n s1 b T. \<lbrakk>G\<turnstile>Norm s0 \<midarrow>e-\<succ>v\<midarrow>n\<rightarrow> s1; P (Norm s0) (In1l e) n (In1 v) s1; b = (v \<noteq> Null \<and> G,snd s1\<turnstile>v fits RefT T)\<rbrakk> \<Longrightarrow> P (Norm s0) (In1l (e InstOf T)) n (In1 (Bool b)) s1"   and "\<And>s v n. P (Norm s) (In1l (Lit v)) n (In1 v) (Norm s)"   and "\<And>s0 e v n s1 unop. \<lbrakk>G\<turnstile>Norm s0 \<midarrow>e-\<succ>v\<midarrow>n\<rightarrow> s1; P (Norm s0) (In1l e) n (In1 v) s1\<rbrakk> \<Longrightarrow> P (Norm s0) (In1l (UnOp unop e)) n (In1 (eval_unop unop v)) s1"   and "\<And>s0 e1 v1 n s1 binop e2 v2 s2. \<lbrakk>G\<turnstile>Norm s0 \<midarrow>e1-\<succ>v1\<midarrow>n\<rightarrow> s1; P (Norm s0) (In1l e1) n (In1 v1) s1; G\<turnstile>s1 \<midarrow>(if need_second_arg binop v1 then In1l e2 else In1r Skip)\<succ>\<midarrow>n\<rightarrow> (In1 v2, s2); P s1 (if need_second_arg binop v1 then In1l e2 else In1r Skip) n (In1 v2) s2\<rbrakk> \<Longrightarrow> P (Norm s0) (In1l (BinOp binop e1 e2)) n (In1 (eval_binop binop v1 v2)) s2"   and "\<And>s n. P (Norm s) (In1l Super) n (In1 (val_this s)) (Norm s)"   and "\<And>s0 va v f n s1. \<lbrakk>G\<turnstile>Norm s0 \<midarrow>va=\<succ>(v, f)\<midarrow>n\<rightarrow> s1; P (Norm s0) (In2 va) n (In2 (v, f)) s1\<rbrakk> \<Longrightarrow> P (Norm s0) (In1l (Acc va)) n (In1 v) s1"   and "\<And>s0 va w f n s1 e v s2. \<lbrakk>G\<turnstile>Norm s0 \<midarrow>va=\<succ>(w, f)\<midarrow>n\<rightarrow> s1; P (Norm s0) (In2 va) n (In2 (w, f)) s1; G\<turnstile>s1 \<midarrow>e-\<succ>v\<midarrow>n\<rightarrow> s2; P s1 (In1l e) n (In1 v) s2\<rbrakk> \<Longrightarrow> P (Norm s0) (In1l (va:=e)) n (In1 v) (assign f v s2)"   and "\<And>s0 e0 b n s1 e1 e2 v s2. \<lbrakk>G\<turnstile>Norm s0 \<midarrow>e0-\<succ>b\<midarrow>n\<rightarrow> s1; P (Norm s0) (In1l e0) n (In1 b) s1; G\<turnstile>s1 \<midarrow>(if the_Bool b then e1 else e2)-\<succ>v\<midarrow>n\<rightarrow> s2; P s1 (In1l (if the_Bool b then e1 else e2)) n (In1 v) s2\<rbrakk> \<Longrightarrow> P (Norm s0) (In1l (e0 ? e1 : e2)) n (In1 v) s2"   and "\<And>s0 e a' n s1 args vs s2 D mode statT mn pTs s3 s3' accC v s4. \<lbrakk>G\<turnstile>Norm s0 \<midarrow>e-\<succ>a'\<midarrow>n\<rightarrow> s1; P (Norm s0) (In1l e) n (In1 a') s1; G\<turnstile>s1 \<midarrow>args\<doteq>\<succ>vs\<midarrow>n\<rightarrow> s2; P s1 (In3 args) n (In3 vs) s2; D = invocation_declclass G mode (snd s2) a' statT \<lparr>name = mn, parTs = pTs\<rparr>; s3 = init_lvars G D \<lparr>name = mn, parTs = pTs\<rparr> mode a' vs s2; s3' = check_method_access G accC statT mode \<lparr>name = mn, parTs = pTs\<rparr> a' s3; G\<turnstile>s3' \<midarrow>Methd D \<lparr>name = mn, parTs = pTs\<rparr>-\<succ>v\<midarrow>n\<rightarrow> s4; P s3' (In1l (Methd D \<lparr>name = mn, parTs = pTs\<rparr>)) n (In1 v) s4\<rbrakk> \<Longrightarrow> P (Norm s0) (In1l ({accC,statT,mode}e\<cdot>mn( {pTs}args))) n (In1 v) (set_lvars (locals (snd s2)) s4)"   and "\<And>s0 D sig v n s1. \<lbrakk>G\<turnstile>Norm s0 \<midarrow>body G D sig-\<succ>v\<midarrow>n\<rightarrow> s1; P (Norm s0) (In1l (body G D sig)) n (In1 v) s1\<rbrakk> \<Longrightarrow> P (Norm s0) (In1l (Methd D sig)) (Suc n) (In1 v) s1"   and "\<And>s0 D n s1 c s2 s3. \<lbrakk>G\<turnstile>Norm s0 \<midarrow>Init D\<midarrow>n\<rightarrow> s1; P (Norm s0) (In1r (Init D)) n \<diamondsuit> s1; G\<turnstile>s1 \<midarrow>c\<midarrow>n\<rightarrow> s2; P s1 (In1r c) n \<diamondsuit> s2; s3 = (if \<exists>l. fst s2 = Some (Jump (Break l)) \<or> fst s2 = Some (Jump (Cont l)) then abupd (\<lambda>x. Some (Error CrossMethodJump)) s2 else s2)\<rbrakk> \<Longrightarrow> P (Norm s0) (In1l (Body D c)) n (In1 (the (locals (snd s2) Result))) (abupd (absorb Ret) s3)"   and "\<And>s0 n. P (Norm s0) (In3 []) n (In3 []) (Norm s0)"   and "\<And>s0 e v n s1 es vs s2. \<lbrakk>G\<turnstile>Norm s0 \<midarrow>e-\<succ>v\<midarrow>n\<rightarrow> s1; P (Norm s0) (In1l e) n (In1 v) s1; G\<turnstile>s1 \<midarrow>es\<doteq>\<succ>vs\<midarrow>n\<rightarrow> s2; P s1 (In3 es) n (In3 vs) s2\<rbrakk> \<Longrightarrow> P (Norm s0) (In3 (e # es)) n (In3 (v # vs)) s2"   and "\<And>s n. P (Norm s) (In1r Skip) n \<diamondsuit> (Norm s)"   and "\<And>s0 e v n s1. \<lbrakk>G\<turnstile>Norm s0 \<midarrow>e-\<succ>v\<midarrow>n\<rightarrow> s1; P (Norm s0) (In1l e) n (In1 v) s1\<rbrakk> \<Longrightarrow> P (Norm s0) (In1r (Expr e)) n \<diamondsuit> s1"   and "\<And>s0 c n s1 l. \<lbrakk>G\<turnstile>Norm s0 \<midarrow>c\<midarrow>n\<rightarrow> s1; P (Norm s0) (In1r c) n \<diamondsuit> s1\<rbrakk> \<Longrightarrow> P (Norm s0) (In1r (l\<bullet> c)) n \<diamondsuit> (abupd (absorb l) s1)"   and "\<And>s0 c1 n s1 c2 s2. \<lbrakk>G\<turnstile>Norm s0 \<midarrow>c1\<midarrow>n\<rightarrow> s1; P (Norm s0) (In1r c1) n \<diamondsuit> s1; G\<turnstile>s1 \<midarrow>c2\<midarrow>n\<rightarrow> s2; P s1 (In1r c2) n \<diamondsuit> s2\<rbrakk> \<Longrightarrow> P (Norm s0) (In1r (c1;; c2)) n \<diamondsuit> s2"   and "\<And>s0 e b n s1 c1 c2 s2. \<lbrakk>G\<turnstile>Norm s0 \<midarrow>e-\<succ>b\<midarrow>n\<rightarrow> s1; P (Norm s0) (In1l e) n (In1 b) s1; G\<turnstile>s1 \<midarrow>(if the_Bool b then c1 else c2)\<midarrow>n\<rightarrow> s2; P s1 (In1r (if the_Bool b then c1 else c2)) n \<diamondsuit> s2\<rbrakk> \<Longrightarrow> P (Norm s0) (In1r (If(e) c1 Else c2)) n \<diamondsuit> s2"   and "\<And>s0 e b n s1 c s2 l s3. \<lbrakk>G\<turnstile>Norm s0 \<midarrow>e-\<succ>b\<midarrow>n\<rightarrow> s1; P (Norm s0) (In1l e) n (In1 b) s1; if the_Bool b then (G\<turnstile>s1 \<midarrow>c\<midarrow>n\<rightarrow> s2 \<and> P s1 (In1r c) n \<diamondsuit> s2) \<and> G\<turnstile>abupd (absorb (Cont l)) s2 \<midarrow>l\<bullet> While(e) c\<midarrow>n\<rightarrow> s3 \<and> P (abupd (absorb (Cont l)) s2) (In1r (l\<bullet> While(e) c)) n \<diamondsuit> s3 else s3 = s1\<rbrakk> \<Longrightarrow> P (Norm s0) (In1r (l\<bullet> While(e) c)) n \<diamondsuit> s3"   and "\<And>s j n. P (Norm s) (In1r (Jmp j)) n \<diamondsuit> (Some (Jump j), s)"   and "\<And>s0 e a' n s1. \<lbrakk>G\<turnstile>Norm s0 \<midarrow>e-\<succ>a'\<midarrow>n\<rightarrow> s1; P (Norm s0) (In1l e) n (In1 a') s1\<rbrakk> \<Longrightarrow> P (Norm s0) (In1r (Throw e)) n \<diamondsuit> (abupd (throw a') s1)"   and "\<And>s0 c1 n s1 s2 tn vn c2 s3. \<lbrakk>G\<turnstile>Norm s0 \<midarrow>c1\<midarrow>n\<rightarrow> s1; P (Norm s0) (In1r c1) n \<diamondsuit> s1; G\<turnstile>s1 \<midarrow>sxalloc\<rightarrow> s2; if G,s2\<turnstile>catch tn then G\<turnstile>new_xcpt_var vn s2 \<midarrow>c2\<midarrow>n\<rightarrow> s3 \<and> P (new_xcpt_var vn s2) (In1r c2) n \<diamondsuit> s3 else s3 = s2\<rbrakk> \<Longrightarrow> P (Norm s0) (In1r (Try c1 Catch(tn vn) c2)) n \<diamondsuit> s3"   and "\<And>s0 c1 n x1 s1 c2 s2 s3. \<lbrakk>G\<turnstile>Norm s0 \<midarrow>c1\<midarrow>n\<rightarrow> (x1, s1); P (Norm s0) (In1r c1) n \<diamondsuit> (x1, s1); G\<turnstile>Norm s1 \<midarrow>c2\<midarrow>n\<rightarrow> s2; P (Norm s1) (In1r c2) n \<diamondsuit> s2; s3 = (if \<exists>err. x1 = Some (Error err) then (x1, s1) else abupd (abrupt_if (x1 \<noteq> None) x1) s2)\<rbrakk> \<Longrightarrow> P (Norm s0) (In1r (c1 Finally c2)) n \<diamondsuit> s3"   and "\<And>C c s0 s3 n s1 s2. \<lbrakk>the (class G C) = c; if inited C (globs s0) then s3 = Norm s0 else (G\<turnstile>Norm (init_class_obj G C s0) \<midarrow>(if C = Object then Skip else Init (super c))\<midarrow>n\<rightarrow> s1 \<and> P (Norm (init_class_obj G C s0)) (In1r (if C = Object then Skip else Init (super c))) n \<diamondsuit> s1) \<and> (G\<turnstile>set_lvars Map.empty s1 \<midarrow>init c\<midarrow>n\<rightarrow> s2 \<and> P (set_lvars Map.empty s1) (In1r (init c)) n \<diamondsuit> s2) \<and> s3 = set_lvars (locals (snd s1)) s2\<rbrakk> \<Longrightarrow> P (Norm s0) (In1r (Init C)) n \<diamondsuit> s3" shows "P x1 x2 x3 x4 x5"