| # apebs = # wlar, apebs[vtblpnum2] = mkpeb(aehdr0, avhdr0, buf1, m2, false), apebs[vtblpnum1] = mkpeb(aehdr, empty, mkempbuf(LEB_SIZE), 0, false), wlar[vtblpnum2] = wl-entry(m1, used), wlar[vtblpnum1] = wl-entry(m0, free), buf0 = mkbuf(LEB_SIZE), err = err0, n = LEB_SIZE, n0 = 0, aehdr.valid?, vtblpnum2 < # wlar, vtblpnum1 < # wlar, bflipset-cons(bflipset, wlar), bflipset-cons(bflipset0, wlar), ubi-io-inv(apebs), ubi-io-peb-inv(mkpeb(aehdr0, avhdr0, buf1, m2, false)), unique-sqns(apebs), valid-ebatbl(apebs, wlar, vols, vtblpnum4), valid-eraseq(q), valid-eraseq(wlar, q), valid-eraseq(apebs, q), valid-global-sqn(apebs, sqnum), valid-peb(mkpeb(aehdr0, avhdr0, buf1, m2, false)), valid-vtbl(apebs, vols, wlar, vtblpnum4), valid-wl(apebs, wlar), bflipset = ∅ → m1 + WL_THRESHOLD ≤ m0, ⌊err0⌋ ∨ err0 = ESUCCESS ⊦ err = ESUCCESS, vtblpnum4 = vtblpnum1, VTBL_VOLID ∈ vols, vtblpnum4 ∈ q, vtblpnum2 ∈ q, ∀ buf. # buf = # buf0 → range=(buf, 0, buf0, 0, n0) → # buf0 ≥ n0 + n |
Used simplifier rules: ⊦ ¬ n < n; (s)% ⊦ m ≤ n ↔ ¬ n < m; (ss)% ⊦ n ≥ m ↔ m ≤ n; (s)%c: ⊦ m + n = n + m; from specification nat-basic%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic% ⊦ n + 0 = n; (s)% ⊦ 0 ≤ m; (s)% ⊦ range=(buf, n0, buf0, n1, 0) ↔ n0 ≤ # buf ∧ n1 ≤ # buf0; (s)% ⊦ # mkbuf(n) = n; (s)