| inv(mk(ar, i, i0, n→i(# x) + 1)) ∧ n + 1 < 1 + # x, a ' + x = tolist(mk(ar, i, i0, n→i(# x) + 1), 1 + # x) ∧ (a ' + x)[n + 1] = (mk(ar, i, i0, n→i(# x) + 1) .data)[(i→n(mk(ar, i, i0, n→i(# x) + 1) .first) + n + 1) % i→n(mk(ar, i, i0, n→i(# x) + 1) .size)], n < # x, i0 < n→i(# ar), inv(mk(ar, i, i0, n→i(# x) + 1)), inv(mk(ar, i, (i0 + 1) % i, n→i(# x))), 0 ≤ i0 ⊦ x[n] = ar[(i→n((i0 + 1) % i) + n) % i→n(i)], # ar = 0, x = [] |
a ' + x = tolist(mk(ar, i, i0, n→i(# x) + 1), 1 + # x), x[n] = ar[(1 + i→n(i0) + n) % i→n(i)], i0 < n→i(# ar), inv(mk(ar, i, i0, n→i(# x) + 1)), inv(mk(ar, i, (i0 + 1) % i, n→i(# x))), 0 ≤ i0, n < # x ⊦ x[n] = ar[(i→n((i0 + 1) % i) + n) % i→n(i)], # ar = 0, x = []
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ i + j = j + i], [CSIMPSEQ : ⊦ m + n < m + n0 ↔ n < n0], [CSIMPSEQ : ⊦ mk(ar, i, i0, i1) .size = i], [CSIMPSEQ : ⊦ mk(ar, i, i0, i1) .first = i0], [CSIMPSEQ : ⊦ mk(ar, i, i0, i1) .data = ar], [CSIMPSEQ : ⊦ (x0 + x1) + x2 = x0 + x1 + x2], [CSIMPSEQ : ⊦ m + n = n + m], [CSIMPSEQ : ⊦ (m + n0) + n1 = m + n0 + n1], [CSIMPSEQ : ⊦ (a ' + x0)[n + 1] = x0[n]])]]