| ubi-cons(apebs, vols, wlar, q, bflipset, vtblpnum, sqnum), vtblpnum0 = EB_PAGE_SIZE, ubi-io-inv(apebs), n0 ≤ LEB_SIZE, n0 ≤ # buf, v ∈ vols, vtblpnum1 < # vols[v], is-aligned(n0, EB_PAGE_SIZE), vols0 = vols, apebs0 = apebs, q0 = q ⊦ ⟪ubi_change#(v, vtblpnum1, n0, buf, vtblpnum0; vols, wlar, q, bflipset, vtblpnum, sqnum, apebs; err)⟫ ( ubi-cons(apebs, vols, wlar, q, bflipset, vtblpnum, sqnum) ∧ ubi-io-inv(apebs) ∧ (err = ESUCCESS ∨ ⌊err⌋ ) ∧ (err ≠ ESUCCESS → vols = vols0 ∧ id(apebs, apebs0, mapped-pebs(vols)) ∧ q.lebrefs ⊆ q0.lebrefs) ∧ ( err = ESUCCESS → v ∈ vols0 ∧ vtblpnum1 < # vols0[v] ∧ q.lebrefs ⊆ q0.lebrefs ++ (v × vtblpnum1) ∧ (vols0[v][vtblpnum1] ≠ unmapped → id(apebs, apebs0, mapped-pebs(vols0) -- vols0[v][vtblpnum1].pnum)) ∧ (vols0[v][vtblpnum1] = unmapped → id(apebs, apebs0, mapped-pebs(vols0))) ∧ (∃ n. vols = vols0[v, vols0[v][vtblpnum1, ⌜n⌝ ]] ∧ apebs[n].data = subarray(buf, 0, n0) + mkempbuf(LEB_SIZE - n0) ∧ apebs[n].fill = align↑(datasize(buf, n0), EB_PAGE_SIZE)))) |