| # apebs0 = # wlar, LEB_SIZE = n2 + n0, apebs0[n1] = mkpeb(aehdr, empty, mkempbuf(LEB_SIZE), 0, false), wlar[n1] = wl-entry(m1, free), aehdr.valid?, n1 < # wlar, bflipset-cons(bflipset, wlar), is-aligned(n0, EB_PAGE_SIZE), ubi-io-inv(apebs0[n1, mkpeb(aehdr, avidhdr(v, m0, sqnum, datasize(buf, n0), checksum(buf, datasize(buf, n0))), mkempbuf(LEB_SIZE), 0, false)]), ubi-io-inv(apebs0), unique-sqns(apebs0), valid-ebatbl(apebs0, wlar, vols, vtblpnum1), valid-eraseq(apebs0, q), valid-eraseq(wlar, q), valid-eraseq(q), valid-global-sqn(apebs0, sqnum), valid-vtbl(apebs0, vols, wlar, vtblpnum1), valid-wl(apebs0, wlar), n0 ≤ LEB_SIZE, n0 ≤ # buf, v ∈ vols ∧ m0 < # vols[v] ∨ v = VTBL_VOLID ∧ m0 = VTBL_LNUM ⊦ vtblpnum1 = n1, VTBL_VOLID ∈ vols, vtblpnum1 ∈ q, ∃ buf0. buf = mkempbuf(n0) + buf0, align↑(datasize(buf, n0), EB_PAGE_SIZE) ≤ LEB_SIZE ∧ align↑(datasize(buf, n0), EB_PAGE_SIZE) ≤ # buf |
Used simplifier rules: ls-datasize-zero: n ≤ # buf ⊦ datasize(buf, n) = 0 ↔ (∃ buf0. buf = mkempbuf(n) + buf0);%ls-array-append-length0: # buf0 = 0 ⊦ buf + buf0 = buf;% ⊦ m ≤ n ↔ ¬ n < m; (ss)%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic%fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat% ⊦ m < n → n ≠ 0; (s)% ⊦ EB_PAGE_SIZE ≠ 0; (s)%n ≠ 0, is-aligned(m, n) ⊦ m < align↑(m0, n) ↔ m < m0; (s)% ⊦ ¬ n < datasize(buf, n); (s)% ⊦ is-aligned(LEB_SIZE, EB_PAGE_SIZE); (ss)%lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic%append-a: ⊦ (buf + buf0) + buf1 = buf + buf0 + buf1; from specification array-splice[buffer]% ⊦ m ≤ n → (n < m ↔ false); (s)