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