| (addarraymultlist (r1, ty, addarraymultlist (r, ty, st[r -- i1 ', refval(r1)][r -- _type, typeval(mktype_from_dims(ty, (1 + n→i(# ints2)) + i))][r -- _length, intval(ints0 .first)], refs0, i1 ' + ints2, ints0, i), restn(i→n(i1 * (countrefs2(ints2) + 1)), refs0), ints2, ints0 .rest, i) [r0 -- sk ] ) = (addarraymultlist (r, ty, st[r -- i1 ', refval(r1)][r -- _type, typeval(mktype_from_dims(ty, (1 + n→i(# ints2)) + i))][r -- _length, intval(ints0 .first)], refs0, i1 ' + ints2, ints0, i) [r0 -- sk ] ), i→n((i1 + 1) * (countrefs2(ints2) + 1)) ≤ 1 + # refs0, 0 ≤ i1, 0 < i1, ∀ sk, i, ints0, st, ty, r0, r, refs, ints1. ints#(ints1) < ints#((i1 + 1) + ints2) → (i→n(countrefs2(ints1)) ≤ # refs → r = r0 ∨ (addarraymultlist(r, ty, st, refs, ints1, ints0, i)[r0 -- sk]) = st[r0 -- sk] ∨ r0 ∈ refs) ⊦ r0 = r1, r = r0, ints2 = [], (addarraymultlist (r, ty, st[r -- i1 ', refval(r1)][r -- _type, typeval(mktype_from_dims(ty, (1 + n→i(# ints2)) + i))][r -- _length, intval(ints0 .first)], refs0, i1 ' + ints2, ints0, i) [r0 -- sk ] ) = st[r0 -- sk], r0 ∈ restn(i→n(i1 * (countrefs2(ints2) + 1)), refs0), r0 ∈ refs0 |
⊦ ints#(i ' + ints) = 1 + i→n(i) + ints#(ints)
⊦ ints ≠ [] ∧ 0 < i → countrefs2(i ' + ints) = i + i * countrefs2(ints)
⊦ countrefs2(ints) ≠ (~1)
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ r ≠ r0 → (st[r0 -- sk0, val][r -- sk]) = st[r -- sk]], [CSIMPSEQ : ⊦ m + n < m + n0 ↔ n < n0], [CSIMPSEQ : ⊦ 0 < i → i→n(i + 1) = i→n(i) + 1], [CSIMPSEQ : ⊦ i + ints = i ' + ints], [CSIMPSEQ : ⊦ i + j = j + i], [CSIMPSEQ : ⊦ i * j + i = i * (j + 1)], [CSIMPSEQ : ⊦ i * j * j0 = (i * j) * j0], [CSIMPSEQ : ⊦ i * j = j * i], [CSIMPSEQ : ⊦ i + j + i0 = (i + j) + i0], [CSIMPSEQ : ⊦ (ints + ints0) + ints1 = ints + ints0 + ints1], [CSIMPSEQ : ⊦ ¬ m ≤ n ↔ n < m], [CSIMPFORWARD : ⊦ m < n → n ≠ 0], [CSIMPFORWARD : ⊦ m ≤ n + 1 ∧ n < n0 → m ≤ n0], [CSIMPSEQ : ⊦ (m + n0) + n1 = m + n0 + n1], [CSIMPSEQ : ⊦ m + n = n + m], [CSIMPSEQ : ⊦ i→n(i) = 0 ↔ i = 0], [CSIMPSEQ : ⊦ i * j = 0 ↔ i = 0 ∨ j = 0], [CSIMPSEQ : ⊦ ((* j)) = i0 + ((* j0)) ↔ j - j0 = i0], [CSIMPSEQ : ⊦ i→n(i) ≤ i→n(j) ↔ abs(i) ≤ abs(j)], [CSIMPSEQ : ⊦ abs(i * j) = abs(i) * abs(j)], [CSIMPSEQ : ⊦ 0 ≤ i → abs(i + 1) = abs(i) + 1], [CSIMPSEQ : ⊦ 0 < j → abs(j) = j], [CSIMPSEQ : ⊦ i * abs(j) ≤ i0 * abs(j) ↔ ¬ ¬ (j = 0 ∨ i ≤ i0)], [CSIMPSEQ : ⊦ i + j ≤ i ↔ j ≤ 0])], [EXTRATERMS : (sk, i, ints0, st[r -- i1 ', refval(r1)] [r -- _type, typeval(mktype_from_dims(ty, (1 + n→i(# ints2)) + i)) ] [r -- _length, intval(ints0 .first) ], ty, r0, r, refs0, i1 ' + ints2)]]