| 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, 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 .len)) + ((buf .data)[i→n((buf .first + buf .len) % buf .size), a][(i→n(buf .first) + i→n(buf .len)) % i→n(buf .size)]) ' |
buf = mk(ar, i, i0, i1), inv(buf .data:= ar[i→n((i0 + i1) % i), a] .len:= (1 + i1)), 0 ≤ (i0 + i1) % i, (i0 + i1) % i < n→i(# ar), 0 < i, 0 ≤ i1, inv(buf), i1 < i ⊦ # ar = 0, tolist(buf, i→n(i1)) + a ' = tolist(buf .data:= ar[i→n((i0 + i1) % i), a] .len:= (1 + i1), i→n(i1)) + (ar[i→n((i0 + i1) % i), a][(i→n(i0) + i→n(i1)) % i→n(i)]) '
[[CONCRETESIMPRULES : ([CSIMPELIM : ⊦ ar = buf .data ∧ i = buf .size ∧ i0 = buf .first ∧ i1 = buf .len ↔ buf = mk(ar, i, i0, i1)])], [EXTRATERMS : (buf, ar, i, i0, i1)]]