| ¬ countrefs2(ints2) < 0, # refs0 < i→n(countrefs2(ints2)) + i→n(i1 * (countrefs2(ints2) + 1)), 0 < i1, 0 ≤ i1, i→n((i1 + 1) * (countrefs2(ints2) + 1)) ≤ 1 + # refs0, (i1 + 1) * abs(countrefs2(ints2) + 1) ≤ countrefs2(ints2) + i1 * abs(countrefs2(ints2) + 1), ∀ 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) ⊦ (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 ] ) = st[r0 -- sk], ints2 = [], r = r0, r0 = r1, r0 ∈ refs0 |
⊦ ¬ countrefs2(ints) < 0
# refs0 < i→n(countrefs2(ints2)) + i→n(i1 * (countrefs2(ints2) + 1)), 0 < i1, 0 ≤ i1, i→n((i1 + 1) * (countrefs2(ints2) + 1)) ≤ 1 + # refs0, (i1 + 1) * abs(countrefs2(ints2) + 1) ≤ countrefs2(ints2) + i1 * abs(countrefs2(ints2) + 1), ∀ 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) ⊦ (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 ] ) = st[r0 -- sk], ints2 = [], r = r0, r0 = r1, r0 ∈ refs0
[[CONCRETESIMPRULES : ()]]