| is_fskey(sk), newref(r0, st), newref(r0, st0), sk ≠ _length ∧ sk ≠ _type ∨ is_indexkey(sk) ∧ (sk .index < 0 ∨ n→i(# vals) ≤ sk .index) ⊦ r0 = jvmref, (r0 -- sk ∈ addarray(r0, ty, vals, st ∪ st0) ↔ r0 -- sk ∈ st ∨ r0 -- sk ∈ addarray(r0, ty, vals, st0)) ∧ (st ∪ st0)[r0 -- sk] = (st ∪ addarray(r0, ty, vals, st0))[r0 -- sk], sk ≠ _type ∧ sk ≠ _length |
⊦ is_fskey(sk) ↔ (∃ fs. sk = fs ')
fs ' ≠ _type, fs ' ≠ _length ⊦ r -- fs ' ∈ addarray(r0, ty, vals, st) ↔ r -- fs ' ∈ st
fs ' ≠ _type, fs ' ≠ _length ⊦ (addarray(r0, ty, vals, st)[r -- fs ']) = st[r -- fs ']
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ ¬ is_indexkey(fs ')], [CSIMPSEQ : ⊦ rk ∈ st ∪ st0 ↔ rk ∈ st ∨ rk ∈ st0], [CSIMPSEQ : ⊦ ¬ rk ∈ st0 → (st ∪ st0)[rk] = st[rk]], [CSIMPSEQ : ⊦ ¬ rk ∈ st → st[rk] = ∅[rk]], [CSIMPSEQ : ⊦ ∅[rk] = noval], [CSIMPSEQ : ⊦ ¬ rk ∈ st → (st ∪ st0)[rk] = st0[rk]], [CSIMPFORWARD : ⊦ r -- sk ∈ st → r ∈ st], [CSIMPSEQ : ⊦ r ∈ st → ¬ newref(r, st)], [CSIMPSEQ : ⊦ rk ∈ st0 → (st ∪ st0)[rk] = st0[rk]])], [EXTRATERMS : (sk)]]