cases: fixes a1 :: "Var list \<times> (int \<times> Instr) list \<times> int"   and a2 :: "int"   and a3 :: "Val list \<times> (Var \<times> Val) list \<times> (Addr \<times> Class \<times> (Field \<times> Val) list) list"   and a4 :: "nat"   and a5 :: "int"   and a6 :: "Val list \<times> (Var \<times> Val) list \<times> (Addr \<times> Class \<times> (Field \<times> Val) list) list" assumes "(a1, a2, a3, a4, a5, a6) \<in> Step" obtains M :: "Var list \<times> (int \<times> Instr) list \<times> int" and l :: "int" and v :: "Val" and NEXT :: "Val list \<times> (Var \<times> Val) list \<times> (Addr \<times> Class \<times> (Field \<times> Val) list) list" and os :: "Val list" and s :: "(Var \<times> Val) list" and h :: "(Addr \<times> Class \<times> (Field \<times> Val) list) list" and ll :: "int" where "a1 = Ma__" and "a2 = la__" and "a3 = (os__, sa__, ha__)" and "a4 = 1" and "a5 = ll__" and "a6 = NEXT__" and "get_ins Ma__ la__ = Some (const va__)" and "NEXT__ = (va__ # os__, sa__, ha__)" and "ll__ = la__ + 1"   | M :: "Var list \<times> (int \<times> Instr) list \<times> int" and l :: "int" and NEXT :: "Val list \<times> (Var \<times> Val) list \<times> (Addr \<times> Class \<times> (Field \<times> Val) list) list" and v :: "Val" and os :: "Val list" and s :: "(Var \<times> Val) list" and h :: "(Addr \<times> Class \<times> (Field \<times> Val) list) list" and ll :: "int" where "a1 = Mb__" and "a2 = lb__" and "a3 = (vb__ # osa__, sb__, hb__)" and "a4 = 1" and "a5 = lla__" and "a6 = NEXTa__" and "get_ins Mb__ lb__ = Some dup" and "NEXTa__ = (vb__ # vb__ # osa__, sb__, hb__)" and "lla__ = lb__ + 1"   | M :: "Var list \<times> (int \<times> Instr) list \<times> int" and l :: "int" and NEXT :: "Val list \<times> (Var \<times> Val) list \<times> (Addr \<times> Class \<times> (Field \<times> Val) list) list" and os :: "Val list" and s :: "(Var \<times> Val) list" and h :: "(Addr \<times> Class \<times> (Field \<times> Val) list) list" and ll :: "int" and v :: "Val" where "a1 = Mc__" and "a2 = lc__" and "a3 = (vc__ # osb__, sc__, hc__)" and "a4 = 1" and "a5 = llb__" and "a6 = NEXTb__" and "get_ins Mc__ lc__ = Some pop" and "NEXTb__ = (osb__, sc__, hc__)" and "llb__ = lc__ + 1"   | M :: "Var list \<times> (int \<times> Instr) list \<times> int" and l :: "int" and NEXT :: "Val list \<times> (Var \<times> Val) list \<times> (Addr \<times> Class \<times> (Field \<times> Val) list) list" and w :: "Val" and v :: "Val" and os :: "Val list" and s :: "(Var \<times> Val) list" and h :: "(Addr \<times> Class \<times> (Field \<times> Val) list) list" and ll :: "int" where "a1 = Md__" and "a2 = ld__" and "a3 = (vd__ # wa__ # osc__, sd__, hd__)" and "a4 = 1" and "a5 = llc__" and "a6 = NEXTc__" and "get_ins Md__ ld__ = Some swap" and "NEXTc__ = (wa__ # vd__ # osc__, sd__, hd__)" and "llc__ = ld__ + 1"   | M :: "Var list \<times> (int \<times> Instr) list \<times> int" and l :: "int" and x :: "Var" and s :: "(Var \<times> Val) list" and v :: "Val" and NEXT :: "Val list \<times> (Var \<times> Val) list \<times> (Addr \<times> Class \<times> (Field \<times> Val) list) list" and os :: "Val list" and h :: "(Addr \<times> Class \<times> (Field \<times> Val) list) list" and ll :: "int" where "a1 = Me__" and "a2 = le__" and "a3 = (osd__, se__, he__)" and "a4 = 1" and "a5 = lld__" and "a6 = NEXTd__" and "get_ins Me__ le__ = Some (load x__)" and "se__\<down>x__ = Some ve__" and "NEXTd__ = (ve__ # osd__, se__, he__)" and "lld__ = le__ + 1"   | M :: "Var list \<times> (int \<times> Instr) list \<times> int" and l :: "int" and x :: "Var" and NEXT :: "Val list \<times> (Var \<times> Val) list \<times> (Addr \<times> Class \<times> (Field \<times> Val) list) list" and os :: "Val list" and s :: "(Var \<times> Val) list" and v :: "Val" and h :: "(Addr \<times> Class \<times> (Field \<times> Val) list) list" and ll :: "int" where "a1 = Mf__" and "a2 = lf__" and "a3 = (vf__ # ose__, sf__, hf__)" and "a4 = 1" and "a5 = lle__" and "a6 = NEXTe__" and "get_ins Mf__ lf__ = Some (store x)" and "NEXTe__ = (ose__, sf__[x\<mapsto>vf__], hf__)" and "lle__ = lf__ + 1"   | M :: "Var list \<times> (int \<times> Instr) list \<times> int" and l :: "int" and f :: "Val \<Rightarrow> Val \<Rightarrow> Val" and NEXT :: "Val list \<times> (Var \<times> Val) list \<times> (Addr \<times> Class \<times> (Field \<times> Val) list) list" and v :: "Val" and w :: "Val" and os :: "Val list" and s :: "(Var \<times> Val) list" and h :: "(Addr \<times> Class \<times> (Field \<times> Val) list) list" and ll :: "int" where "a1 = Mg__" and "a2 = lg__" and "a3 = (vg__ # w # osf__, sg__, hg__)" and "a4 = 1" and "a5 = llf__" and "a6 = NEXTf__" and "get_ins Mg__ lg__ = Some (binop f__)" and "NEXTf__ = (f__ vg__ w # osf__, sg__, hg__)" and "llf__ = lg__ + 1"   | M :: "Var list \<times> (int \<times> Instr) list \<times> int" and l :: "int" and f :: "Val \<Rightarrow> Val" and NEXT :: "Val list \<times> (Var \<times> Val) list \<times> (Addr \<times> Class \<times> (Field \<times> Val) list) list" and v :: "Val" and os :: "Val list" and s :: "(Var \<times> Val) list" and h :: "(Addr \<times> Class \<times> (Field \<times> Val) list) list" and ll :: "int" where "a1 = Mh__" and "a2 = lh__" and "a3 = (vh__ # osg__, sh__, hh__)" and "a4 = 1" and "a5 = llg__" and "a6 = NEXTg__" and "get_ins Mh__ lh__ = Some (unop f)" and "NEXTg__ = (f vh__ # osg__, sh__, hh__)" and "llg__ = lh__ + 1"   | M :: "Var list \<times> (int \<times> Instr) list \<times> int" and l :: "int" and d :: "Class" and newobj :: "Class \<times> (Field \<times> Val) list" and a :: "Addr" and h :: "(Addr \<times> Class \<times> (Field \<times> Val) list) list" and NEXT :: "Val list \<times> (Var \<times> Val) list \<times> (Addr \<times> Class \<times> (Field \<times> Val) list) list" and os :: "Val list" and s :: "(Var \<times> Val) list" and ll :: "int" where "a1 = Mi__" and "a2 = li__" and "a3 = (osh__, si__, hi__)" and "a4 = 1" and "a5 = llh__" and "a6 = NEXTh__" and "get_ins Mi__ li__ = Some (new d__)" and "newobj__ = (d__, emp)" and "a__ = nextLoc hi__" and "NEXTh__ = (RVal (Loc a__) # osh__, si__, hi__[a__\<mapsto>newobj__])" and "llh__ = li__ + 1"   | M :: "Var list \<times> (int \<times> Instr) list \<times> int" and l :: "int" and d :: "Class" and F :: "Field" and h :: "(Addr \<times> Class \<times> (Field \<times> Val) list) list" and a :: "Addr" and Flds :: "(Field \<times> Val) list" and v :: "Val" and NEXT :: "Val list \<times> (Var \<times> Val) list \<times> (Addr \<times> Class \<times> (Field \<times> Val) list) list" and os :: "Val list" and s :: "(Var \<times> Val) list" and ll :: "int" where "a1 = Mj__" and "a2 = lj__" and "a3 = (RVal (Loc aa__) # osi__, sj__, hj__)" and "a4 = 1" and "a5 = lli__" and "a6 = NEXTi__" and "get_ins Mj__ lj__ = Some (getfield da__ F__)" and "hj__\<down>aa__ = Some (da__, Flds__)" and "Flds__\<down>F__ = Some vi__" and "NEXTi__ = (vi__ # osi__, sj__, hj__)" and "lli__ = lj__ + 1"   | M :: "Var list \<times> (int \<times> Instr) list \<times> int" and l :: "int" and d :: "Class" and F :: "Field" and h :: "(Addr \<times> Class \<times> (Field \<times> Val) list) list" and a :: "Addr" and Flds :: "(Field \<times> Val) list" and newobj :: "Class \<times> (Field \<times> Val) list" and v :: "Val" and NEXT :: "Val list \<times> (Var \<times> Val) list \<times> (Addr \<times> Class \<times> (Field \<times> Val) list) list" and os :: "Val list" and s :: "(Var \<times> Val) list" and ll :: "int" where "a1 = Mk__" and "a2 = lk__" and "a3 = (vj__ # RVal (Loc ab__) # osj__, sk__, hk__)" and "a4 = 1" and "a5 = llj__" and "a6 = NEXTj__" and "get_ins Mk__ lk__ = Some (putfield db__ F)" and "hk__\<down>ab__ = Some (db__, Fldsa__)" and "newobj = (db__, Fldsa__[F\<mapsto>vj__])" and "NEXTj__ = (osj__, sk__, hk__[ab__\<mapsto>newobj])" and "llj__ = lk__ + 1"   | M :: "Var list \<times> (int \<times> Instr) list \<times> int" and l :: "int" and d :: "Class" and h :: "(Addr \<times> Class \<times> (Field \<times> Val) list) list" and a :: "Addr" and Flds :: "(Field \<times> Val) list" and NEXT :: "Val list \<times> (Var \<times> Val) list \<times> (Addr \<times> Class \<times> (Field \<times> Val) list) list" and os :: "Val list" and s :: "(Var \<times> Val) list" and ll :: "int" where "a1 = Ml__" and "a2 = lm__" and "a3 = (RVal (Loc a) # osk__, sl__, hl__)" and "a4 = 1" and "a5 = llk__" and "a6 = NEXTk__" and "get_ins Ml__ lm__ = Some (checkcast d)" and "hl__\<down>a = Some (d, Flds)" and "NEXTk__ = (RVal (Loc a) # osk__, sl__, hl__)" and "llk__ = lm__ + 1"   | M :: "Var list \<times> (int \<times> Instr) list \<times> int" and l :: "int" and pc :: "int" and S :: "Val list \<times> (Var \<times> Val) list \<times> (Addr \<times> Class \<times> (Field \<times> Val) list) list" where "a1 = Mm__" and "a2 = ln__" and "a3 = S__" and "a4 = 1" and "a5 = pc__" and "a6 = S__" and "get_ins Mm__ ln__ = Some (goto pc__)"   | M :: "Var list \<times> (int \<times> Instr) list \<times> int" and l :: "int" and pc :: "int" and NEXT :: "Val list \<times> (Var \<times> Val) list \<times> (Addr \<times> Class \<times> (Field \<times> Val) list) list" and os :: "Val list" and s :: "(Var \<times> Val) list" and h :: "(Addr \<times> Class \<times> (Field \<times> Val) list) list" where "a1 = Mn__" and "a2 = lo__" and "a3 = (TRUE # osl__, sm__, hm__)" and "a4 = 1" and "a5 = pca__" and "a6 = NEXTl__" and "get_ins Mn__ lo__ = Some (iftrue pca__)" and "NEXTl__ = (osl__, sm__, hm__)"   | M :: "Var list \<times> (int \<times> Instr) list \<times> int" and l :: "int" and pc :: "int" and v :: "Val" and NEXT :: "Val list \<times> (Var \<times> Val) list \<times> (Addr \<times> Class \<times> (Field \<times> Val) list) list" and os :: "Val list" and s :: "(Var \<times> Val) list" and h :: "(Addr \<times> Class \<times> (Field \<times> Val) list) list" and ll :: "int" where "a1 = Mo__" and "a2 = lp__" and "a3 = (vk__ # osm__, sn__, hn__)" and "a4 = 1" and "a5 = lll__" and "a6 = NEXTm__" and "get_ins Mo__ lp__ = Some (iftrue pc)" and "vk__ \<noteq> TRUE" and "NEXTm__ = (osm__, sn__, hn__)" and "lll__ = lp__ + 1"   | M :: "Var list \<times> (int \<times> Instr) list \<times> int" and l :: "int" and C :: "Class" and m :: "Method" and par :: "Var list" and code :: "(int \<times> Instr) list" and l0 :: "int" and S :: "(Var \<times> Val) list" and h :: "(Addr \<times> Class \<times> (Field \<times> Val) list) list" and n :: "nat" and hh :: "(Addr \<times> Class \<times> (Field \<times> Val) list) list" and v :: "Val" and ops :: "Val list" and os :: "Val list" and NEXT :: "Val list \<times> (Var \<times> Val) list \<times> (Addr \<times> Class \<times> (Field \<times> Val) list) list" and s :: "(Var \<times> Val) list" and ll :: "int" where "a1 = M" and "a2 = l" and "a3 = (ops, s, h)" and "a4 = Suc n" and "a5 = ll" and "a6 = NEXT" and "get_ins M l = Some (invokeS C m)" and "mbody_is C m (par, code, l0)" and "((par, code, l0), l0, ([], S, h), n, hh, v) \<in> Exec" and "(ops, par, S, os) \<in> Frame" and "NEXT = (v # os, s, hh)" and "ll = l + 1"