| inv(buf), abs(buf, x), buf .len < buf .size ⊦ 〈push#(a; buf)〉 (inv(buf) ∧ abs(buf, push(x, a))) |
⊦ abs(buf, x) ↔ buf .len = n→i(# x) ∧ x = tolist(buf, i→n(buf .len))
⊦ inv(buf) → # tolist(buf, n) = n
x = tolist(buf, i→n(buf .len)), buf .len < buf .size, inv(buf), 0 ≤ buf .len, 0 < buf .size ⊦ 〈push#(a; buf)〉 (inv(buf) ∧ abs(buf, x + a '))
[[CONCRETESIMPRULES : ([CSIMPFORWARD : ⊦ i ≤ j ∧ 0 ≤ i → 0 ≤ j], [CSIMPFORWARD : ⊦ i ≤ j ∧ j < j0 → i < j0], [CSIMPSEQ : ⊦ push(x0, a) = x0 + a '], [CSIMPSEQ : ⊦ abs(i) = i ↔ 0 ≤ i], [CSIMPSEQ : ⊦ n→i(i→n(i)) = abs(i)])]]