| wlar[n1] = wl-entry(m1, stat0), wlar[n2] = wl-entry(m0, stat), apebs0[n2] = mkpeb(aehdr, empty, buf1, 0, false), align↑(datasize(buf, n0), EB_PAGE_SIZE) = align↑(datasize(buf, align↑(datasize(buf, n0), EB_PAGE_SIZE)), EB_PAGE_SIZE), apebs = apebs0[n2, mkpeb(aehdr, avidhdr(v, m2, sqnum, datasize(buf, n0), checksum(buf, datasize(buf, n0))), buf1, 0, false)], buf0 = buf, err = err0, err1 = err, n = align↑(datasize(buf, n0), EB_PAGE_SIZE), vtblpnum = n2, wlar0 = wlar, aehdr.valid?, n2 < # apebs0, n1 < # wlar, n2 < # wlar, vtblpnum < # apebs, is-aligned(# buf2, EB_PAGE_SIZE), # buf2 ≤ n, align↑(datasize(buf, n0), EB_PAGE_SIZE) ≤ LEB_SIZE, align↑(datasize(buf, n0), EB_PAGE_SIZE) ≤ # buf, LEB_SIZE ≥ # buf2, # buf2 ≤ n → is-aligned(# buf2, EB_PAGE_SIZE) → ¬ datasize(buf2, # buf2) < datasize(buf0, n) → n ≥ # buf2, datasize(buf2, # buf2) < datasize(buf0, n) ∨ checksum(buf2 + mkempbuf(n - # buf2), datasize(buf0, n)) ≠ checksum(buf0, datasize(buf0, n)), v ∈ vols ∧ m2 < # vols[v] ∧ vols[v][m2] = ⌜n1⌝ ∨ v = VTBL_VOLID ∧ m2 = VTBL_LNUM ∧ vtblpnum1 = n1, ⌊err0⌋ ∨ err0 = ESUCCESS ⊦ [ubi_wl_put_peb#(none, n2; wlar, q)] ( sum-of-differences(ecs(wlar).max, ecs(wlar)) = sum-of-differences(ecs(wlar0).max, ecs(wlar0)) ∧ ecs(wlar) = ecs(wlar0) ∧ (err1 = ESUCCESS → wlar[n2].ec = m0 ∧ wlar[n1].ec = m1)), datasize(buf, align↑(datasize(buf, n0), EB_PAGE_SIZE)) = 0, datasize(buf, n0) = 0, err = ESUCCESS, n2 = n1 |
apebs0[n2] = mkpeb(aehdr, empty, buf1, 0, false), wlar[n2] = wl-entry(m0, stat), wlar[n1] = wl-entry(m1, stat0), align↑(datasize(buf, n0), EB_PAGE_SIZE) = align↑(datasize(buf, align↑(datasize(buf, n0), EB_PAGE_SIZE)), EB_PAGE_SIZE), wlar0 = wlar, datasize(buf, n0) ≠ 0, datasize(buf, align↑(datasize(buf, n0), EB_PAGE_SIZE)) ≠ 0, n2 ≠ n1, aehdr.valid?, n2 < # wlar, n1 < # wlar, n2 < # apebs0, is-aligned(# buf2, EB_PAGE_SIZE), align↑(datasize(buf, n0), EB_PAGE_SIZE) ≤ # buf, align↑(datasize(buf, n0), EB_PAGE_SIZE) ≤ LEB_SIZE, # buf2 ≤ align↑(datasize(buf, n0), EB_PAGE_SIZE), # buf2 ≤ # buf, # buf2 ≤ LEB_SIZE, ⌊err0⌋ , v ∈ vols ∧ m2 < # vols[v] ∧ vols[v][m2] = ⌜n1⌝ ∨ v = VTBL_VOLID ∧ m2 = VTBL_LNUM ∧ vtblpnum1 = n1, datasize(buf2, # buf2) < datasize(buf, align↑(datasize(buf, n0), EB_PAGE_SIZE)) ∨ checksum(buf2 + mkempbuf(align↑(datasize(buf, n0), EB_PAGE_SIZE) - # buf2), datasize(buf, align↑(datasize(buf, n0), EB_PAGE_SIZE))) ≠ checksum(buf, datasize(buf, align↑(datasize(buf, n0), EB_PAGE_SIZE))) ⊦ [ubi_wl_put_peb#(none, n2; wlar, q)] (sum-of-differences(ecs(wlar).max, ecs(wlar)) = sum-of-differences(ecs(wlar0).max, ecs(wlar0)) ∧ ecs(wlar) = ecs(wlar0))
Used simplifier rules: let: ⊦ n ≤ n0 ∧ n0 ≤ n1 → n ≤ n1; (forward) from specification nat%n ≠ 0 ⊦ is-aligned(m0, n) ∧ m0 ≤ m → align↑(m, n) ≥ m0; (s)%n ≠ 0, m % n = 0 ⊦ align↑(m, n) = m; (s)% ⊦ m ≤ n → (n < m ↔ false); (s)% ⊦ m ≤ n ↔ ¬ n < m; (ss)% ⊦ EB_PAGE_SIZE ≠ 0; (s)% ⊦ ⌊err⌋ → err ≠ ESUCCESS; (s)% ⊦ # apebs[n, apeb] = # apebs; (s)% ⊦ n ≥ m ↔ m ≤ n; (s)