| buf = mk(mkarray(2)[0, a][1, b][0, c], 2, 0, 1) ⊦ ⟪get#(buf .first, buf .data; a)⟫ ⟪buf := buf .first:= ((buf .first + 1) % buf .size) ; buf := buf .len:= (buf .len - 1)⟫ ⟪assert#(a = c)⟫ true |
buf = mk(mkarray(2)[0, a][1, b][0, c], 2, 0, 1) ⊦ ⟪a0 := a, ar := buf .data, i := buf .first⟫ ⟪if 0 ≤ i ∧ i < n→i(# ar) then a0 := ar[i→n(i)] else abort⟫ ⟪buf := buf .first:= ((buf .first + 1) % buf .size) ; buf := buf .len:= (buf .len - 1)⟫ ⟪assert#(a0 = c)⟫ true
[[CONCRETESIMPRULES : ([CSIMPDECL : get# (i, ar; a) { if 0 ≤ i ∧ i < n→i(# ar) then a := ar[i→n(i)] else abort }])]]