| st[r -- sk0] = refval(jvmref), is_valid_ref(str, r, st), fits(jvmref, sk1 ' + sks, st), is_classtype(st[r -- _type] .type) → sk0 ∈ instfields(st[r -- _type] .type .class), is_arraytype(st[r -- _type] .type) → is_indexkey(sk0) ∧ 0 ≤ sk0 .index ∧ sk0 .index < st[r -- _length] .intval, ∀ st0, r0, sk2, str0, sk3, val0. st0[r0 -- sk2] = refval(jvmref) ∧ fits(jvmref, sks, st0) ∧ is_valid_ref(str0, r0, st0) ∧ (is_classtype(st0[r0 -- _type] .type) → sk2 ∈ instfields(st0[r0 -- _type] .type .class)) ∧ (is_arraytype(st0[r0 -- _type] .type) → ¬ is_fskey(sk2) ∧ ¬ sk2 .index < 0 ∧ ¬ st0[r0 -- _length] .intval ≤ sk2 .index) ∧ (∀ r, st, sk, val, str. fits(r, sks, st) → r = jvmref ∨ (st[jvmref -- sk, val][r -- sks]) = st[r -- sks] ∨ junkref(str, r, st)) → sks = [] ∨ (st0[jvmref -- sk3, val0][jvmref -- sks]) = st0[jvmref -- sks] ∨ r0 = jvmref ∨ junkref(str0, r0, st0), ∀ r0, st0, sk2, val0, str0. fits(r0, sk1 ' + sks, st0) → r0 = jvmref ∨ (st0[jvmref -- sk2, val0][r0 -- (sk1 ' + sks)]) = st0[r0 -- (sk1 ' + sks)] ∨ junkref(str0, r0, st0) ⊦ r = jvmref, (st[jvmref -- sk, val][jvmref -- (sk1 ' + sks)]) = st[jvmref -- (sk1 ' + sks)], junkref(str, r, st) |
⊦ fits(r, sk ' + sks, st) ↔ r ≠ jvmref ∧ is_referencevalue(st[r -- sk]) ∧ (is_classtype(st[r -- _type] .type) → sk ∈ instfields(st[r -- _type] .type .class)) ∧ (is_arraytype(st[r -- _type] .type) → is_indexkey(sk) ∧ 0 ≤ sk .index ∧ sk .index < st[r -- _length] .intval) ∧ fits(st[r -- sk] .refval, sks, st)
[[CONCRETESIMPRULES : ()], [EXTRATERMS : (st, sks, sk1, jvmref)]]