| ∀ r, ty, st. addarray(r, ty, mklist(initial_value(ty), m), st) = (addarray(r, initial_value(ty), n→i(m), st)[r -- _type, typeval(mkarraytype(ty))][r -- _length, intval(n→i(m))]) ⊦ addarray(r, ty, mklist(initial_value(ty), m + 1), st) = (addarray(r, initial_value(ty), n→i(m) + 1, st)[r -- _type, typeval(mkarraytype(ty))][r -- _length, intval(n→i(m) + 1)]) |
⊦ vals ≠ [] → addarray(r, ty, vals, st) = (addarray(r, ty, vals .butlast, st)[r -- n→i((# vals) -1) ', vals .last][r -- _length, intval(n→i(# vals))])
mklist(initial_value(ty), m + 1) ≠ [], ∀ r, ty, st. addarray(r, ty, mklist(initial_value(ty), m), st) = (addarray(r, initial_value(ty), n→i(m), st)[r -- _type, typeval(mkarraytype(ty))][r -- _length, intval(n→i(m))]) ⊦ (addarray(r, ty, mklist(initial_value(ty), m + 1) .butlast, st) [r -- n→i((# mklist(initial_value(ty), m + 1)) -1) ', mklist(initial_value(ty), m + 1) .last ] [r -- _length, intval(n→i(# mklist(initial_value(ty), m + 1))) ] ) = (addarray(r, initial_value(ty), n→i(m) + 1, st)[r -- _type, typeval(mkarraytype(ty))][r -- _length, intval(n→i(m) + 1)])
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ mklist(val, m) = [] ↔ m = 0], [CSIMPSEQ : ⊦ m + 1 ≠ 0], [CSIMPSEQ : ⊦ (m + n0) + n1 = m + n0 + n1], [CSIMPSEQ : ⊦ m + n = n + m])], [EXTRATERMS : (st, mklist(initial_value(ty), m + 1), ty, r)]]