induct: fixes x1 :: "bool"   and x2 :: "((Class \<times> Method \<times> int) \<times> ((Var \<times> Val) list \<times> (Addr \<times> Class \<times> (Field \<times> Val) list) list \<Rightarrow> Val list \<times> (Var \<times> Val) list \<times> (Addr \<times> Class \<times> (Field \<times> Val) list) list \<Rightarrow> bool) \<times> ((Var \<times> Val) list \<times> (Addr \<times> Class \<times> (Field \<times> Val) list) list \<Rightarrow> Val list \<times> (Var \<times> Val) list \<times> (Addr \<times> Class \<times> (Field \<times> Val) list) list \<Rightarrow> (Addr \<times> Class \<times> (Field \<times> Val) list) list \<times> Val \<Rightarrow> bool) \<times> ((Var \<times> Val) list \<times> (Addr \<times> Class \<times> (Field \<times> Val) list) list \<Rightarrow> Val list \<times> (Var \<times> Val) list \<times> (Addr \<times> Class \<times> (Field \<times> Val) list) list \<Rightarrow> (Addr \<times> Class \<times> (Field \<times> Val) list) list \<Rightarrow> bool)) list"   and x3 :: "Class"   and x4 :: "Method"   and x5 :: "int"   and x6 :: "(Var \<times> Val) list \<times> (Addr \<times> Class \<times> (Field \<times> Val) list) list \<Rightarrow> Val list \<times> (Var \<times> Val) list \<times> (Addr \<times> Class \<times> (Field \<times> Val) list) list \<Rightarrow> bool"   and x7 :: "(Var \<times> Val) list \<times> (Addr \<times> Class \<times> (Field \<times> Val) list) list \<Rightarrow> Val list \<times> (Var \<times> Val) list \<times> (Addr \<times> Class \<times> (Field \<times> Val) list) list \<Rightarrow> (Addr \<times> Class \<times> (Field \<times> Val) list) list \<times> Val \<Rightarrow> bool"   and x8 :: "(Var \<times> Val) list \<times> (Addr \<times> Class \<times> (Field \<times> Val) list) list \<Rightarrow> Val list \<times> (Var \<times> Val) list \<times> (Addr \<times> Class \<times> (Field \<times> Val) list) list \<Rightarrow> (Addr \<times> Class \<times> (Field \<times> Val) list) list \<Rightarrow> bool"   and P :: "bool \<Rightarrow> ((Class \<times> Method \<times> int) \<times> ((Var \<times> Val) list \<times> (Addr \<times> Class \<times> (Field \<times> Val) list) list \<Rightarrow> Val list \<times> (Var \<times> Val) list \<times> (Addr \<times> Class \<times> (Field \<times> Val) list) list \<Rightarrow> bool) \<times> ((Var \<times> Val) list \<times> (Addr \<times> Class \<times> (Field \<times> Val) list) list \<Rightarrow> Val list \<times> (Var \<times> Val) list \<times> (Addr \<times> Class \<times> (Field \<times> Val) list) list \<Rightarrow> (Addr \<times> Class \<times> (Field \<times> Val) list) list \<times> Val \<Rightarrow> bool) \<times> ((Var \<times> Val) list \<times> (Addr \<times> Class \<times> (Field \<times> Val) list) list \<Rightarrow> Val list \<times> (Var \<times> Val) list \<times> (Addr \<times> Class \<times> (Field \<times> Val) list) list \<Rightarrow> (Addr \<times> Class \<times> (Field \<times> Val) list) list \<Rightarrow> bool)) list \<Rightarrow> Class \<Rightarrow> Method \<Rightarrow> int \<Rightarrow> ((Var \<times> Val) list \<times> (Addr \<times> Class \<times> (Field \<times> Val) list) list \<Rightarrow> Val list \<times> (Var \<times> Val) list \<times> (Addr \<times> Class \<times> (Field \<times> Val) list) list \<Rightarrow> bool) \<Rightarrow> ((Var \<times> Val) list \<times> (Addr \<times> Class \<times> (Field \<times> Val) list) list \<Rightarrow> Val list \<times> (Var \<times> Val) list \<times> (Addr \<times> Class \<times> (Field \<times> Val) list) list \<Rightarrow> (Addr \<times> Class \<times> (Field \<times> Val) list) list \<times> Val \<Rightarrow> bool) \<Rightarrow> ((Var \<times> Val) list \<times> (Addr \<times> Class \<times> (Field \<times> Val) list) list \<Rightarrow> Val list \<times> (Var \<times> Val) list \<times> (Addr \<times> Class \<times> (Field \<times> Val) list) list \<Rightarrow> (Addr \<times> Class \<times> (Field \<times> Val) list) list \<Rightarrow> bool) \<Rightarrow> bool" assumes "(x1, x2, x3, x4, x5, x6, x7, x8) \<in> SP_Judgement"   and "\<And>C m M l ins Mspec Minv Anno A I c x f g d F G B. \<lbrakk>mbody_is C m M; get_ins M l = Some ins; MST\<down>(C, m) = Some (Mspec, Minv, Anno); \<forall>Q. Anno\<down>l = Some Q \<longrightarrow> (\<forall>s0 s. A s0 s \<longrightarrow> Q s0 s); \<forall>s0 s. A s0 s \<longrightarrow> I s0 s (heap s); ins \<in> {const c, dup, pop, swap, load x, store x, binop f, unop g, new d, getfield d F, putfield d F, checkcast d}; G \<rhd> \<langle> SP_pre M l A \<rangle> C,m,(l + 1) \<langle> SP_post M l B \<rangle> SP_inv M l I; P True G C m (l + 1) (SP_pre M l A) (SP_post M l B) (SP_inv M l I)\<rbrakk> \<Longrightarrow> P False G C m l A B I"   and "\<And>C m M l pc Mspec Minv Anno A I G B. \<lbrakk>mbody_is C m M; get_ins M l = Some (goto pc); MST\<down>(C, m) = Some (Mspec, Minv, Anno); \<forall>Q. Anno\<down>l = Some Q \<longrightarrow> (\<forall>s0 s. A s0 s \<longrightarrow> Q s0 s); \<forall>s0 s. A s0 s \<longrightarrow> I s0 s (heap s); G \<rhd> \<langle> SP_pre M l A \<rangle> C,m,pc \<langle> SP_post M l B \<rangle> SP_inv M l I; P True G C m pc (SP_pre M l A) (SP_post M l B) (SP_inv M l I)\<rbrakk> \<Longrightarrow> P False G C m l A B I"   and "\<And>C m M l pc Mspec Minv Anno A I G B. \<lbrakk>mbody_is C m M; get_ins M l = Some (iftrue pc); MST\<down>(C, m) = Some (Mspec, Minv, Anno); \<forall>Q. Anno\<down>l = Some Q \<longrightarrow> (\<forall>s0 s. A s0 s \<longrightarrow> Q s0 s); \<forall>s0 s. A s0 s \<longrightarrow> I s0 s (heap s); G \<rhd> \<langle> SP_pre M l (\<lambda>s0 s. \<forall>ops S k. s = (TRUE # ops, S, k) \<longrightarrow> A s0 s) \<rangle> C,m,pc \<langle> SP_post M l (\<lambda>s0 s t. \<forall>ops S k. s = (TRUE # ops, S, k) \<longrightarrow> B s0 s t) \<rangle> SP_inv M l (\<lambda>s0 s t. \<forall>ops S k. s = (TRUE # ops, S, k) \<longrightarrow> I s0 s t); P True G C m pc (SP_pre M l (\<lambda>s0 s. \<forall>ops S k. s = (TRUE # ops, S, k) \<longrightarrow> A s0 s)) (SP_post M l (\<lambda>s0 s t. \<forall>ops S k. s = (TRUE # ops, S, k) \<longrightarrow> B s0 s t)) (SP_inv M l (\<lambda>s0 s t. \<forall>ops S k. s = (TRUE # ops, S, k) \<longrightarrow> I s0 s t)); G \<rhd> \<langle> SP_pre M l (\<lambda>s0 s. \<forall>ops S k v. s = (v # ops, S, k) \<longrightarrow> v \<noteq> TRUE \<longrightarrow> A s0 s) \<rangle> C,m,(l + 1) \<langle> SP_post M l (\<lambda>s0 s t. \<forall>ops S k v. s = (v # ops, S, k) \<longrightarrow> v \<noteq> TRUE \<longrightarrow> B s0 s t) \<rangle> SP_inv M l (\<lambda>s0 s t. \<forall>ops S k v. s = (v # ops, S, k) \<longrightarrow> v \<noteq> TRUE \<longrightarrow> I s0 s t); P True G C m (l + 1) (SP_pre M l (\<lambda>s0 s. \<forall>ops S k v. s = (v # ops, S, k) \<longrightarrow> v \<noteq> TRUE \<longrightarrow> A s0 s)) (SP_post M l (\<lambda>s0 s t. \<forall>ops S k v. s = (v # ops, S, k) \<longrightarrow> v \<noteq> TRUE \<longrightarrow> B s0 s t)) (SP_inv M l (\<lambda>s0 s t. \<forall>ops S k v. s = (v # ops, S, k) \<longrightarrow> v \<noteq> TRUE \<longrightarrow> I s0 s t))\<rbrakk> \<Longrightarrow> P False G C m l A B I"   and "\<And>C m M l Mspec Minv Anno A I B G. \<lbrakk>mbody_is C m M; get_ins M l = Some vreturn; MST\<down>(C, m) = Some (Mspec, Minv, Anno); \<forall>Q. Anno\<down>l = Some Q \<longrightarrow> (\<forall>s0 s. A s0 s \<longrightarrow> Q s0 s); \<forall>s0 s. A s0 s \<longrightarrow> I s0 s (heap s); \<forall>s0 s. A s0 s \<longrightarrow> (\<forall>v ops S h. s = (v # ops, S, h) \<longrightarrow> B s0 s (h, v))\<rbrakk> \<Longrightarrow> P False G C m l A B I"   and "\<And>C m M l D m' Mspec Minv Anno T MI Anno2 par code l0 A I G B. \<lbrakk>mbody_is C m M; get_ins M l = Some (invokeS D m'); MST\<down>(C, m) = Some (Mspec, Minv, Anno); MST\<down>(D, m') = Some (T, MI, Anno2); mbody_is D m' (par, code, l0); \<forall>Q. Anno\<down>l = Some Q \<longrightarrow> (\<forall>s0 s. A s0 s \<longrightarrow> Q s0 s); \<forall>s0 s. A s0 s \<longrightarrow> I s0 s (heap s); \<forall>s0 ops1 ops2 S R k t. (ops1, par, R, ops2) \<in> Frame \<longrightarrow> A s0 (ops1, S, k) \<longrightarrow> MI (R, k) t \<longrightarrow> I s0 (ops1, S, k) t; G \<rhd> \<langle> SINV_pre par T A \<rangle> C,m,(l + 1) \<langle> SINV_post par T B \<rangle> SINV_inv par T I; P True G C m (l + 1) (SINV_pre par T A) (SINV_post par T B) (SINV_inv par T I)\<rbrakk> \<Longrightarrow> P False G C m l A B I"   and "\<And>b G C m l AA BB II A B I. \<lbrakk>(b, G, C, m, l, AA, BB, II) \<in> SP_Judgement; P b G C m l AA BB II; \<forall>s0 s. A s0 s \<longrightarrow> AA s0 s; \<forall>s0 s t. BB s0 s t \<longrightarrow> B s0 s t; \<forall>s0 s k. II s0 s k \<longrightarrow> I s0 s k\<rbrakk> \<Longrightarrow> P b G C m l A B I"   and "\<And>G A C m l B I. \<lbrakk>G \<rhd> \<lbrace> A \<rbrace> C,m,l \<lbrace> B \<rbrace> I; P False G C m l A B I\<rbrakk> \<Longrightarrow> P True G C m l A B I"   and "\<And>G C m l A B I Mspec Minv Anno. \<lbrakk>G\<down>(C, m, l) = Some (A, B, I); MST\<down>(C, m) = Some (Mspec, Minv, Anno); \<forall>Q. Anno\<down>l = Some Q \<longrightarrow> (\<forall>s0 s. A s0 s \<longrightarrow> Q s0 s); \<forall>s0 s. A s0 s \<longrightarrow> I s0 s (heap s)\<rbrakk> \<Longrightarrow> P True G C m l A B I" shows "P x1 x2 x3 x4 x5 x6 x7 x8"