| ∀ r0, r, j, st. vals0 = [] ∨ (newref(r0, addarray(r, vals0, j, st)) ↔ r ≠ r0 ∧ newref(r0, st)) ⊦ val + vals0 = [], newref(r0, addarray(r, val + vals0, j, st)) ↔ r ≠ r0 ∧ newref(r0, st) |
⊦ addarray(r, val ' + vals, i, st) = (addarray(r, vals, i + 1, st)[r -- i ', val])
⊦ addarray(r, [], i, st) = st
∀ r0, r, j, st. newref(r0, addarray(r, vals0, j, st)) ↔ r ≠ r0 ∧ newref(r0, st) ⊦ r0 ≠ r ∧ newref(r0, addarray(r, vals0, j + 1, st)) ↔ r ≠ r0 ∧ newref(r0, st), vals0 = []
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ newref(r, st[r0 -- sk, val]) ↔ r ≠ r0 ∧ newref(r, st)], [CSIMPSEQ : ⊦ (vals + vals0) + vals1 = vals + vals0 + vals1], [CSIMPSEQ : ⊦ val ' + vals ≠ []], [CSIMPSEQ : ⊦ val + vals = val ' + vals])]]