induct: fixes x1 :: "env"   and x2 :: "loc \<Rightarrow> ty option"   and x3 :: "Term.term"   and x4 :: "tys"   and P :: "env \<Rightarrow> (loc \<Rightarrow> ty option) \<Rightarrow> Term.term \<Rightarrow> tys \<Rightarrow> bool" assumes "x1,x2\<Turnstile>x3\<Colon>x4"   and "\<And>E dt. P E dt (In1r Skip) (Inl (PrimT Void))"   and "\<And>E dt e T. \<lbrakk>E,dt\<Turnstile>e\<Colon>-T; P E dt (In1l e) (Inl T)\<rbrakk> \<Longrightarrow> P E dt (In1r (Expr e)) (Inl (PrimT Void))"   and "\<And>E dt c l. \<lbrakk>E,dt\<Turnstile>c\<Colon>\<surd>; P E dt (In1r c) (Inl (PrimT Void))\<rbrakk> \<Longrightarrow> P E dt (In1r (l\<bullet> c)) (Inl (PrimT Void))"   and "\<And>E dt c1 c2. \<lbrakk>E,dt\<Turnstile>c1\<Colon>\<surd>; P E dt (In1r c1) (Inl (PrimT Void)); E,dt\<Turnstile>c2\<Colon>\<surd>; P E dt (In1r c2) (Inl (PrimT Void))\<rbrakk> \<Longrightarrow> P E dt (In1r (c1;; c2)) (Inl (PrimT Void))"   and "\<And>E dt e c1 c2. \<lbrakk>E,dt\<Turnstile>e\<Colon>-PrimT Boolean; P E dt (In1l e) (Inl (PrimT Boolean)); E,dt\<Turnstile>c1\<Colon>\<surd>; P E dt (In1r c1) (Inl (PrimT Void)); E,dt\<Turnstile>c2\<Colon>\<surd>; P E dt (In1r c2) (Inl (PrimT Void))\<rbrakk> \<Longrightarrow> P E dt (In1r (If(e) c1 Else c2)) (Inl (PrimT Void))"   and "\<And>E dt e c l. \<lbrakk>E,dt\<Turnstile>e\<Colon>-PrimT Boolean; P E dt (In1l e) (Inl (PrimT Boolean)); E,dt\<Turnstile>c\<Colon>\<surd>; P E dt (In1r c) (Inl (PrimT Void))\<rbrakk> \<Longrightarrow> P E dt (In1r (l\<bullet> While(e) c)) (Inl (PrimT Void))"   and "\<And>E dt jump. P E dt (In1r (Jmp jump)) (Inl (PrimT Void))"   and "\<And>E dt e tn. \<lbrakk>E,dt\<Turnstile>e\<Colon>-Class tn; P E dt (In1l e) (Inl (Class tn)); prg E\<turnstile>tn\<preceq>\<^sub>C SXcpt Throwable\<rbrakk> \<Longrightarrow> P E dt (In1r (Throw e)) (Inl (PrimT Void))"   and "\<And>E dt c1 tn vn c2. \<lbrakk>E,dt\<Turnstile>c1\<Colon>\<surd>; P E dt (In1r c1) (Inl (PrimT Void)); prg E\<turnstile>tn\<preceq>\<^sub>C SXcpt Throwable; lcl E (VName vn) = None; E\<lparr>lcl := lcl E(VName vn \<mapsto> Class tn)\<rparr>,dt\<Turnstile>c2\<Colon>\<surd>; P (E\<lparr>lcl := lcl E(VName vn \<mapsto> Class tn)\<rparr>) dt (In1r c2) (Inl (PrimT Void))\<rbrakk> \<Longrightarrow> P E dt (In1r (Try c1 Catch(tn vn) c2)) (Inl (PrimT Void))"   and "\<And>E dt c1 c2. \<lbrakk>E,dt\<Turnstile>c1\<Colon>\<surd>; P E dt (In1r c1) (Inl (PrimT Void)); E,dt\<Turnstile>c2\<Colon>\<surd>; P E dt (In1r c2) (Inl (PrimT Void))\<rbrakk> \<Longrightarrow> P E dt (In1r (c1 Finally c2)) (Inl (PrimT Void))"   and "\<And>E C dt. is_class (prg E) C \<Longrightarrow> P E dt (In1r (Init C)) (Inl (PrimT Void))"   and "\<And>E C dt. is_acc_class (prg E) (pkg E) C \<Longrightarrow> P E dt (In1l (NewC C)) (Inl (Class C))"   and "\<And>E T dt i. \<lbrakk>is_acc_type (prg E) (pkg E) T; E,dt\<Turnstile>i\<Colon>-PrimT Integer; P E dt (In1l i) (Inl (PrimT Integer))\<rbrakk> \<Longrightarrow> P E dt (In1l (New T[i])) (Inl (T.[]))"   and "\<And>E dt e T T'. \<lbrakk>E,dt\<Turnstile>e\<Colon>-T; P E dt (In1l e) (Inl T); is_acc_type (prg E) (pkg E) T'; prg E\<turnstile>T\<preceq>? T'\<rbrakk> \<Longrightarrow> P E dt (In1l (Cast T' e)) (Inl T')"   and "\<And>E dt e T T'. \<lbrakk>E,dt\<Turnstile>e\<Colon>-RefT T; P E dt (In1l e) (Inl (RefT T)); is_acc_type (prg E) (pkg E) (RefT T'); prg E\<turnstile>RefT T\<preceq>? RefT T'\<rbrakk> \<Longrightarrow> P E dt (In1l (e InstOf T')) (Inl (PrimT Boolean))"   and "\<And>dt x T E. typeof dt x = Some T \<Longrightarrow> P E dt (In1l (Lit x)) (Inl T)"   and "\<And>E dt e Te unop T. \<lbrakk>E,dt\<Turnstile>e\<Colon>-Te; P E dt (In1l e) (Inl Te); wt_unop unop Te; T = PrimT (unop_type unop)\<rbrakk> \<Longrightarrow> P E dt (In1l (UnOp unop e)) (Inl T)"   and "\<And>E dt e1 T1 e2 T2 binop T. \<lbrakk>E,dt\<Turnstile>e1\<Colon>-T1; P E dt (In1l e1) (Inl T1); E,dt\<Turnstile>e2\<Colon>-T2; P E dt (In1l e2) (Inl T2); wt_binop (prg E) binop T1 T2; T = PrimT (binop_type binop)\<rbrakk> \<Longrightarrow> P E dt (In1l (BinOp binop e1 e2)) (Inl T)"   and "\<And>E C c dt. \<lbrakk>lcl E This = Some (Class C); C \<noteq> Object; class (prg E) C = Some c\<rbrakk> \<Longrightarrow> P E dt (In1l Super) (Inl (Class (super c)))"   and "\<And>E dt va T. \<lbrakk>E,dt\<Turnstile>va\<Colon>=T; P E dt (In2 va) (Inl T)\<rbrakk> \<Longrightarrow> P E dt (In1l (Acc va)) (Inl T)"   and "\<And>E dt va T v T'. \<lbrakk>E,dt\<Turnstile>va\<Colon>=T; P E dt (In2 va) (Inl T); va \<noteq> LVar This; E,dt\<Turnstile>v\<Colon>-T'; P E dt (In1l v) (Inl T'); prg E\<turnstile>T'\<preceq>T\<rbrakk> \<Longrightarrow> P E dt (In1l (va:=v)) (Inl T')"   and "\<And>E dt e0 e1 T1 e2 T2 T. \<lbrakk>E,dt\<Turnstile>e0\<Colon>-PrimT Boolean; P E dt (In1l e0) (Inl (PrimT Boolean)); E,dt\<Turnstile>e1\<Colon>-T1; P E dt (In1l e1) (Inl T1); E,dt\<Turnstile>e2\<Colon>-T2; P E dt (In1l e2) (Inl T2); prg E\<turnstile>T1\<preceq>T2 \<and> T = T2 \<or> prg E\<turnstile>T2\<preceq>T1 \<and> T = T1\<rbrakk> \<Longrightarrow> P E dt (In1l (e0 ? e1 : e2)) (Inl T)"   and "\<And>E dt e statT ps pTs mn statDeclT m pTs'. \<lbrakk>E,dt\<Turnstile>e\<Colon>-RefT statT; P E dt (In1l e) (Inl (RefT statT)); E,dt\<Turnstile>ps\<Colon>\<doteq>pTs; P E dt (In3 ps) (Inr pTs); max_spec (prg E) (cls E) statT \<lparr>name = mn, parTs = pTs\<rparr> = {((statDeclT, m), pTs')}\<rbrakk> \<Longrightarrow> P E dt (In1l ({cls E,statT,invmode m e}e\<cdot>mn( {pTs'}ps))) (Inl (resTy m))"   and "\<And>E C sig m dt T. \<lbrakk>is_class (prg E) C; methd (prg E) C sig = Some m; E,dt\<Turnstile>Body (declclass m) (stmt (mbody (mthd m)))\<Colon>-T; P E dt (In1l (Body (declclass m) (stmt (mbody (mthd m))))) (Inl T)\<rbrakk> \<Longrightarrow> P E dt (In1l (Methd C sig)) (Inl T)"   and "\<And>E D dt blk T. \<lbrakk>is_class (prg E) D; E,dt\<Turnstile>blk\<Colon>\<surd>; P E dt (In1r blk) (Inl (PrimT Void)); lcl E Result = Some T; is_type (prg E) T\<rbrakk> \<Longrightarrow> P E dt (In1l (Body D blk)) (Inl T)"   and "\<And>E vn T dt. \<lbrakk>lcl E vn = Some T; is_acc_type (prg E) (pkg E) T\<rbrakk> \<Longrightarrow> P E dt (In2 (LVar vn)) (Inl T)"   and "\<And>E dt e C fn statDeclC f. \<lbrakk>E,dt\<Turnstile>e\<Colon>-Class C; P E dt (In1l e) (Inl (Class C)); accfield (prg E) (cls E) C fn = Some (statDeclC, f)\<rbrakk> \<Longrightarrow> P E dt (In2 ({cls E,statDeclC,is_static f}e..fn)) (Inl (type f))"   and "\<And>E dt e T i. \<lbrakk>E,dt\<Turnstile>e\<Colon>-T.[]; P E dt (In1l e) (Inl (T.[])); E,dt\<Turnstile>i\<Colon>-PrimT Integer; P E dt (In1l i) (Inl (PrimT Integer))\<rbrakk> \<Longrightarrow> P E dt (In2 (e.[i])) (Inl T)"   and "\<And>E dt. P E dt (In3 []) (Inr [])"   and "\<And>E dt e T es Ts. \<lbrakk>E,dt\<Turnstile>e\<Colon>-T; P E dt (In1l e) (Inl T); E,dt\<Turnstile>es\<Colon>\<doteq>Ts; P E dt (In3 es) (Inr Ts)\<rbrakk> \<Longrightarrow> P E dt (In3 (e # es)) (Inr (T # Ts))" shows "P x1 x2 x3 x4"