| buf = mk(mkarray(2)[0, a][1, b], 2, 0, 2), a2 = a1 ∧ ar0 = buf .data ∧ i0 = buf .first ⊦ ⟪if 0 ≤ i0 ∧ i0 < n→i(# ar0) then a2 := ar0[i→n(i0)] else abort⟫ ⟪buf0 := buf .first:= ((buf .first + 1) % buf .size) ; buf0 := buf0 .len:= (buf0 .len - 1)⟫ ⟪assert#(a2 = a) ; push#(c; buf0) ; pop#(; buf0, a2) ; assert#(a2 = b) ; pop#(; buf0, a2) ; assert#(a2 = c)⟫ true |
buf = mk(mkarray(2)[0, a][1, b], 2, 0, 2), a2 = a1 ∧ ar0 = buf .data ∧ i0 = buf .first ⊦ ⟪a2 := ar0[i→n(i0)]⟫ ⟪buf0 := buf .first:= ((buf .first + 1) % buf .size) ; buf0 := buf0 .len:= (buf0 .len - 1)⟫ ⟪assert#(a2 = a) ; push#(c; buf0) ; pop#(; buf0, a2) ; assert#(a2 = b) ; pop#(; buf0, a2) ; assert#(a2 = c)⟫ true
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ mk(ar, i, i0, i1) .first = i0], [CSIMPSEQ : ⊦ mk(ar, i, i0, i1) .data = ar], [CSIMPSEQ : ⊦ # (ar[n, a]) = # ar], [CSIMPSEQ : ⊦ # mkarray(n) = n])]]