IF: fixes C :: "Class"   and m :: "Method"   and M :: "Var list \<times> (int \<times> Instr) list \<times> int"   and l :: "int"   and pc :: "int"   and Mspec :: "(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 Minv :: "(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 Anno :: "(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)) list"   and A :: "(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 I :: "(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 G :: "((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 B :: "(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" assumes "mbody_is C m M"   and "get_ins M l = Some (iftrue pc)"   and "MST\<down>(C, m) = Some (Mspec, Minv, Anno)"   and "\<forall>Q. Anno\<down>l = Some Q \<longrightarrow> (\<forall>s0 s. A s0 s \<longrightarrow> Q s0 s)"   and "\<forall>s0 s. A s0 s \<longrightarrow> I s0 s (heap s)"   and "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)"   and "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)" shows "G \<rhd> \<lbrace> A \<rbrace> C,m,l \<lbrace> B \<rbrace> I"