| inv(buf .data:= (buf .data)[i→n((buf .first + buf .len) % buf .size), a] .len:= (1 + buf .len)), 0 ≤ (buf .first + buf .len) % buf .size, (buf .first + buf .len) % buf .size < n→i(# buf .data), 0 < buf .size, 0 ≤ buf .len, inv(buf), buf .len < buf .size ⊦ # buf .data = 0, abs(buf .data:= (buf .data)[i→n((buf .first + buf .len) % buf .size), a] .len:= (1 + buf .len), tolist(buf, i→n(buf .len)) + a ') |
⊦ abs(buf, x) ↔ buf .len = n→i(# x) ∧ x = tolist(buf, i→n(buf .len))
inv(buf .data:= (buf .data)[i→n((buf .first + buf .len) % buf .size), a] .len:= (1 + buf .len)), 0 ≤ (buf .first + buf .len) % buf .size, (buf .first + buf .len) % buf .size < n→i(# buf .data), 0 < buf .size, 0 ≤ buf .len, inv(buf), buf .len < buf .size ⊦ # buf .data = 0, (buf .data:= (buf .data)[i→n((buf .first + buf .len) % buf .size), a] .len:= (1 + buf .len)) .len = n→i(# (tolist(buf, i→n(buf .len)) + a ')) ∧ tolist(buf, i→n(buf .len)) + a ' = tolist (buf .data:= (buf .data)[i→n((buf .first + buf .len) % buf .size), a] .len:= (1 + buf .len), i→n((buf .data:= (buf .data)[i→n((buf .first + buf .len) % buf .size), a] .len:= (1 + buf .len)) .len))
[[CONCRETESIMPRULES : ()], [EXTRATERMS : (tolist(buf, i→n(buf .len)) + a ', buf .data:= (buf .data)[i→n ( (buf .first + buf .len) % buf .size), a] .len:= (1 + buf .len))]]