| st[r0 -- sk] = (addarray(r, ty, vals, st0)[r0 -- sk]), newref(r, st), newref(r, st0), r0 -- sk ∈ st, r0 ∈ st, r0 -- sk ∈ addarray(r, ty, vals, st0), r0 ∈ addarray(r, ty, vals, st0), ∀ rk. rk ∈ st → rk ∈ addarray(r, ty, vals, st0) ∧ st[rk] = (addarray(r, ty, vals, st0)[rk]) ⊦ r = jvmref, r0 -- sk ∈ st0 ∧ (addarray(r, ty, vals, st0)[r0 -- sk]) = st0[r0 -- sk] |
⊦ r ≠ r0 → (r -- sk ∈ addarray(r0, ty, vals, st) ↔ r -- sk ∈ st)
⊦ r ≠ r0 → (addarray(r, ty, vals, st)[r0 -- sk]) = st[r0 -- sk]
⊦ newref(r, st) ∧ r0 ∈ st → (addarray(r, ty, vals, st)[r0 -- sk]) = st[r0 -- sk]
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ r ∈ st → ¬ newref(r, st)], [CSIMPSEQ : ⊦ newref(r, st) ∧ r0 ∈ st → r ≠ r0], [CSIMPFORWARD : ⊦ r -- sk ∈ st → r ∈ st])], [EXTRATERMS : (st0, vals, ty, r, sk, r0)]]