| a ' + x = tolist(mk(ar, i, i0, n→i(# x) + 1), 1 + # x), 0 ≤ i0, inv(mk(ar, i, (i0 + 1) % i, n→i(# x))), inv(mk(ar, i, i0, n→i(# x) + 1)), i0 < n→i(# ar) ⊦ # x = # tolist(mk(ar, i, (i0 + 1) % i, n→i(# x)), # x) ∧ (∀ n. n < # x → x[n] = (tolist(mk(ar, i, (i0 + 1) % i, n→i(# x)), # x)[n])), # ar = 0 |
⊦ inv(buf) → # tolist(buf, n) = n
m < n ⊦ inv(buf) → (tolist(buf, n)[m]) = (buf .data)[(i→n(buf .first) + m) % i→n(buf .size)]
a ' + x = tolist(mk(ar, i, i0, n→i(# x) + 1), 1 + # x), 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 = []
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ # x0 = 0 ↔ x0 = []], [CSIMPFORWARD : ⊦ m < n → n ≠ 0], [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 : ⊦ ¬ m < n ↔ n ≤ m], [CSIMPSEQ : ⊦ m < n → (n ≤ m ↔ false)], [CSIMPSEQ : ⊦ i + j = j + i])]]