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