| st[r -- _type] .type = mkarraytype(ty), r -- sk ∈ addarray(r, ty, getarray(r, st), st), is_array(r, st), is_fskey(sk) ∧ sk ≠ _length ∧ sk ≠ _type ∨ is_indexkey(sk) ∧ (sk .index < 0 ∨ n→i(# getarray(r, st)) ≤ sk .index) ⊦ r -- sk ∈ st |
⊦ r ≠ r0 ∨ r = r0 ∧ is_fskey(sk) ∧ sk ≠ _length ∧ sk ≠ _type ∨ r = r0 ∧ is_indexkey(sk) ∧ (sk .index < 0 ∨ n→i(# vals) ≤ sk .index) → (r0 -- sk ∈ addarray(r, ty, vals, st) ↔ r0 -- sk ∈ st)
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ ¬ is_fskey(sk) ↔ is_indexkey(sk)], [CSIMPSEQ : ⊦ ¬ r -- _length ∈ st → ¬ is_array(r, st)], [CSIMPSEQ : ⊦ ¬ rk ∈ st → st[rk] = ∅[rk]], [CSIMPSEQ : ⊦ ∅[rk] = noval], [CSIMPSEQ : ⊦ ¬ r -- _type ∈ st → ¬ is_array(r, st)], [CSIMPSEQ : ⊦ is_indexkey(sk) → ¬ is_fskey(sk)], [CSIMPSEQ : ⊦ ¬ is_indexkey(sk) ↔ is_fskey(sk)])], [EXTRATERMS : (st, getarray(r, st), ty, r, sk, r)]]