| # apebs0 = # wlar2, # apebs = # wlar, apebs0[vtblpnum] = mkpeb(aehdr, empty, mkempbuf(LEB_SIZE), 0, false), wlar2[vtblpnum] = wl-entry(m, free), buf = mkbuf(LEB_SIZE), vtbl = to-vtbl(vols)[v, n], aehdr.valid?, vtblpnum < # wlar2, bflipset-cons(bflipset, wlar2), bflipset-cons(bflipset, wlar), id(apebs0, apebs, mapped-pebs(vols)), ubi-io-inv(apebs), ubi-io-inv(apebs0), unique-sqns(apebs0), unique-sqns(apebs), valid-ebatbl(apebs0, wlar2, vols, vtblpnum3), valid-ebatbl(apebs, wlar, vols, vtblpnum3), valid-eraseq(wlar2, []), valid-eraseq(apebs, q), valid-eraseq(wlar, q), valid-eraseq(q), valid-global-sqn(apebs0, sqnum), valid-global-sqn(apebs, sqnum), valid-vtbl(apebs0, vols, wlar2, vtblpnum3), valid-vtbl(apebs, vols, wlar, vtblpnum3), valid-wl(apebs0, wlar2), valid-wl(apebs, wlar), 2 * ENCODED_NAT_SIZE + (ENCODED_VOLID_SIZE + ENCODED_NAT_SIZE) * # vols + ENCODED_VOLID_SIZE ≤ LEB_SIZE ⊦ v = VTBL_VOLID, vtblpnum3 = vtblpnum, vtblpnum3 ∈ q, VTBL_VOLID ∈ vols, v ∈ vols, # buf ≥ # vtbl * (ENCODED_NAT_SIZE + ENCODED_VOLID_SIZE) + ENCODED_NAT_SIZE ∧ buf = buf ∧ vtbl = vtbl |
# apebs = # wlar, # apebs0 = # wlar2, wlar2[vtblpnum] = wl-entry(m, free), apebs0[vtblpnum] = mkpeb(aehdr, empty, mkempbuf(LEB_SIZE), 0, false), aehdr.valid?, # vols + 1 < # to-vtbl(vols)[v, n], vtblpnum < # wlar2, LEB_SIZE < # to-vtbl(vols)[v, n] * (ENCODED_NAT_SIZE + ENCODED_VOLID_SIZE) + ENCODED_NAT_SIZE, bflipset-cons(bflipset, wlar), bflipset-cons(bflipset, wlar2), id(apebs0, apebs, mapped-pebs(vols)), ubi-io-inv(apebs0), ubi-io-inv(apebs), unique-sqns(apebs), unique-sqns(apebs0), valid-ebatbl(apebs, wlar, vols, vtblpnum3), valid-ebatbl(apebs0, wlar2, vols, vtblpnum3), valid-eraseq(q), valid-eraseq(wlar, q), valid-eraseq(apebs, q), valid-eraseq(wlar2, []), valid-global-sqn(apebs, sqnum), valid-global-sqn(apebs0, sqnum), valid-vtbl(apebs, vols, wlar, vtblpnum3), valid-vtbl(apebs0, vols, wlar2, vtblpnum3), valid-wl(apebs, wlar), valid-wl(apebs0, wlar2), 2 * ENCODED_NAT_SIZE + (ENCODED_VOLID_SIZE + ENCODED_NAT_SIZE) * # vols + ENCODED_VOLID_SIZE ≤ LEB_SIZE ⊦ ENCODED_NAT_SIZE + ENCODED_VOLID_SIZE = 0, v = VTBL_VOLID, vtblpnum3 = vtblpnum, v ∈ vols, VTBL_VOLID ∈ vols, vtblpnum3 ∈ q
Used simplifier rules: ⊦ vtbl[v, n] ≠ ∅; (s)% ⊦ # vtbl = 0 ↔ vtbl = ∅; (s)%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic% ⊦ m * n + n < m1 * n ↔ m + 1 < m1 ∧ n ≠ 0; (s)%c: ⊦ m + n = n + m; from specification nat-basic%mult-c: ⊦ m * n = n * m; from specification nat-mult%mult-a: ⊦ m0 * m * n = (m0 * m) * n; from specification nat-mult% ⊦ m0 * 1 = m0; (s)%m2 ≠ 0 ⊦ (* m2) * m + n < m + n0 ↔ (m2 - 1) * m + n < n0; (s)% ⊦ m < n → n ≠ 0; (s)%fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic% ⊦ m ≤ n ↔ ¬ n < m; (ss)% ⊦ n ≥ m ↔ m ≤ n; (s)% ⊦ # mkbuf(n) = n; (s)