| ¬ ( unchanged(str, r, st, st0) ∧ path∃(str, r, r, st) ∧ r ≠ jvmref ∧ (is_classtype(st[r -- _type] .type) → sk ∈ instfields(st[r -- _type] .type .class)) ∧ (is_arraytype(st[r -- _type] .type) → sk = _length ∨ is_indexkey(sk) ∧ 0 ≤ sk .index ∧ sk .index < st[r -- _length] .intval)), unchanged(str, r, st, st0), fits(r, sk ', st0), fits(r, sk ', st) ⊦ st[r -- sk] = st0[r -- sk], junkref(str, r, st), junkref(str, r, st0) |
⊦ fits(jvmref, sks, st) ↔ sks = []
unchanged(str, r, st, st0), fits(r, sk ', st0), fits(r, sk ', st), is_valid_ref(str, r, st) ⊦ st[r -- sk] = st0[r -- sk], r = jvmref, junkref(str, r, st), junkref(str, r, st0), (is_classtype(st[r -- _type] .type) → sk ∈ instfields(st[r -- _type] .type .class)) ∧ (is_arraytype(st[r -- _type] .type) → sk = _length ∨ ¬ is_fskey(sk) ∧ ¬ sk .index < 0 ∧ ¬ st[r -- _length] .intval ≤ sk .index)
[[CONCRETESIMPRULES : ([CSIMPNAMEDSEQ : junkrefs, , junkref-not-valid-01, ⊦ ¬ is_valid_ref(str, r, st) ∧ r ≠ jvmref → junkref(str, r, st)], [CSIMPNAMEDSEQ : list, storekeys, e, ⊦ sk ' ≠ []], [CSIMPNAMEDSEQ : int-abs, , lels, ⊦ ¬ i < j ↔ j ≤ i], [CSIMPNAMEDSEQ : int-abs, , lels-01, ⊦ ¬ i ≤ j ↔ j < i], [CSIMPNAMEDSEQ : storekey, , test, ⊦ ¬ is_indexkey(sk) ↔ is_fskey(sk)], [CSIMPNAMEDSEQ : cyclic, , pathex-one, ⊦ path∃(str, r, r, st) ↔ r = jvmref ∨ r ≠ jvmref ∧ is_valid_ref(str, r, st)])]]