| buf .len = 1 + n→i(# x), a ' + x = tolist(buf, i→n(buf .len)), inv(buf) ⊦ 〈pop#(; buf, b)〉 (inv(buf) ∧ abs(buf, x) ∧ a = b) |
buf .len = 1 + n→i(# x), a ' + x = tolist(buf, i→n(buf .len)), inv(buf) ⊦ 〈get#(buf .first, buf .data; a0)〉 〈buf0 := buf .first:= ((buf .first + 1) % buf .size) ; buf0 := buf0 .len:= (buf0 .len - 1)〉 (inv(buf0) ∧ abs(buf0, x) ∧ a = a0)
[[CONCRETESIMPRULES : ([CSIMPDECL : pop# (;buf, a) { get#(buf .first, buf .data; a) ; buf := buf .first:= ( ( buf .first + 1 ) % buf .size ) ; buf := buf .len:= (buf .len - 1) }])]]