INVS: fixes C :: "Class"   and m :: "Method"   and M :: "Var list \<times> (int \<times> Instr) list \<times> int"   and l :: "int"   and D :: "Class"   and m' :: "Method"   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 T :: "(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 MI :: "(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 Anno2 :: "(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 par :: "Var list"   and code :: "(int \<times> Instr) list"   and l0 :: "int"   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 (invokeS D m')"   and "MST\<down>(C, m) = Some (Mspec, Minv, Anno)"   and "MST\<down>(D, m') = Some (T, MI, Anno2)"   and "mbody_is D m' (par, code, l0)"   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 "\<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"   and "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" shows "G \<rhd> \<lbrace> A \<rbrace> C,m,l \<lbrace> B \<rbrace> I"