| st[r -- _type] .type = mkarraytype(ty), is_fskey(sk), is_array(r, st) ⊦ sk ≠ _length, (r -- sk ∈ addarray(r, ty, getarray(r, st), st) → r -- sk ∈ st) ∧ (addarray(r, ty, getarray(r, st), st)[r -- sk]) = st[r -- sk] |
⊦ r -- _length ∈ addarray(r0, ty, vals, st) ↔ r = r0 ∨ r -- _length ∈ st
⊦ (addarray(r, ty, vals, st)[r -- _length]) = intval(n→i(# vals))
st[r -- _type] .type = mkarraytype(ty), is_array(r, st), r -- _length ∈ st, r ∈ st ⊦ intval(n→i(# getarray(r, st))) = st[r -- _length]
[[CONCRETESIMPRULES : ([CSIMPFORWARD : ⊦ r -- sk ∈ st → r ∈ st], [CSIMPSEQ : ⊦ ¬ r -- _length ∈ st → ¬ is_array(r, st)], [CSIMPSEQ : ⊦ is_fskey(_length)])]]