| 3 = countrefs(2 ' + 2 ') ⊦ addmultiarrays(r ' + r0 ' + r1 ', 2, [], ty, 2 ' + 2 ', st) = addarray(r, mkarraytype(ty), refval(r0) ' + refval(r1) ', addarray(r0, ty, 2, addarray(r1, ty, 2, st))) |
⊦ i > 0 ∧ # ints > 1 → addmultiarrays(refs, i, acc, ty, ints, st) = addmultiarrays (firstn(# refs - i→n(countrefs(ints .rest)), refs), i - 1, lastn(i→n(countrefs(ints .rest)), refs) .first + acc, ty, ints, addmultiarrays(lastn(i→n(countrefs(ints .rest)), refs), ints .rest .first, [], ty, ints .rest, st))
2 > 0 ∧ # (2 ' + 2 ') > 1, 3 = countrefs(2 ' + 2 ') ⊦ addmultiarrays (firstn(# (r ' + r0 ' + r1 ') - i→n(countrefs((2 ' + 2 ') .rest)), r ' + r0 ' + r1 '), 2 - 1, lastn(i→n(countrefs((2 ' + 2 ') .rest)), r ' + r0 ' + r1 ') .first + [], ty, 2 ' + 2 ', addmultiarrays(lastn(i→n(countrefs((2 ' + 2 ') .rest)), r ' + r0 ' + r1 '), (2 ' + 2 ') .rest .first, [], ty, (2 ' + 2 ') .rest, st)) = addarray(r, mkarraytype(ty), refval(r0) ' + refval(r1) ', addarray(r0, ty, 2, addarray(r1, ty, 2, st)))
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ # (ints + ints0) = # ints + # ints0], [CSIMPSEQ : ⊦ # i ' = 0 +1], [CSIMPSEQ : ⊦ (ints + ints0) + ints1 = ints + ints0 + ints1])], [EXTRATERMS : (st, 2 ' + 2 ', ty, [], 2, r ' + r0 ' + r1 ')]]