| # wlar = # apebs1, # buf1 = LEB_SIZE, apebs1[vtblpnum2] = mkpeb(aehdr, empty, buf0, 0, false), aehdr.valid?, vtblpnum2 < # apebs1, is-aligned(LEB_SIZE, EB_PAGE_SIZE), is-encoded(∅, buf1), ubi-io-initial(apebs1), ubi-io-inv(apebs1[vtblpnum2, mkpeb(aehdr, avidhdr(VTBL_VOLID, VTBL_LNUM, 0, 0, 0), buf0, 0, false)]), ubi-io-inv(apebs1[vtblpnum2, mkpeb(aehdr, avidhdr(VTBL_VOLID, VTBL_LNUM, 0, 0, 0), buf1, LEB_SIZE, false)]), ENCODED_NAT_SIZE ≤ LEB_SIZE, ∀ n3. n3 < # apebs1 → (apebs1[n3].bad → wlar[n3] = wl-entry(0, erroneous)) ∧ (¬ apebs1[n3].bad → apebs1[n3].echdr.valid? ∧ wlar[n3] = wl-entry(apebs1[n3].echdr.ec, free) ∧ apebs1[n3].vidhdr = empty) ⊦ vtblpnum2 = # apebs1, unique-sqns(apebs1[vtblpnum2, mkpeb(aehdr, avidhdr(VTBL_VOLID, VTBL_LNUM, 0, 0, 0), buf1, LEB_SIZE, false)]) ∧ valid-global-sqn(apebs1[vtblpnum2, mkpeb(aehdr, avidhdr(VTBL_VOLID, VTBL_LNUM, 0, 0, 0), buf1, LEB_SIZE, false)], 1) ∧ valid-wl (apebs1[vtblpnum2, mkpeb(aehdr, avidhdr(VTBL_VOLID, VTBL_LNUM, 0, 0, 0), buf1, LEB_SIZE, false)], wlar[vtblpnum2, wl-entry(wlar[vtblpnum2].ec, used)]) ∧ valid-eraseq(wlar[vtblpnum2, wl-entry(wlar[vtblpnum2].ec, used)], []) ∧ valid-ebatbl (apebs1[vtblpnum2, mkpeb(aehdr, avidhdr(VTBL_VOLID, VTBL_LNUM, 0, 0, 0), buf1, LEB_SIZE, false)], wlar[vtblpnum2, wl-entry(wlar[vtblpnum2].ec, used)], ∅, vtblpnum2) ∧ valid-vtbl (apebs1[vtblpnum2, mkpeb(aehdr, avidhdr(VTBL_VOLID, VTBL_LNUM, 0, 0, 0), buf1, LEB_SIZE, false)], ∅, wlar[vtblpnum2, wl-entry(wlar[vtblpnum2].ec, used)], vtblpnum2) |
# buf1 = LEB_SIZE, # wlar = # apebs1, apebs1[vtblpnum2] = mkpeb(aehdr, empty, buf0, 0, false), wlar[vtblpnum2] = wl-entry(m, stat), aehdr.valid?, vtblpnum2 < # apebs1, is-aligned(LEB_SIZE, EB_PAGE_SIZE), is-encoded(∅, buf1), ubi-io-initial(apebs1), ubi-io-inv(apebs1[vtblpnum2, mkpeb(aehdr, avidhdr(VTBL_VOLID, VTBL_LNUM, 0, 0, 0), buf1, LEB_SIZE, false)]), ubi-io-inv(apebs1[vtblpnum2, mkpeb(aehdr, avidhdr(VTBL_VOLID, VTBL_LNUM, 0, 0, 0), buf0, 0, false)]), ENCODED_NAT_SIZE ≤ LEB_SIZE, ∀ n3. n3 < # apebs1 → (apebs1[n3].bad → wlar[n3] = wl-entry(0, erroneous)) ∧ (¬ apebs1[n3].bad → apebs1[n3].echdr.valid? ∧ wlar[n3] = wl-entry(apebs1[n3].echdr.ec, free) ∧ apebs1[n3].vidhdr = empty) ⊦ vtblpnum2 = # apebs1, unique-sqns(apebs1[vtblpnum2, mkpeb(aehdr, avidhdr(VTBL_VOLID, VTBL_LNUM, 0, 0, 0), buf1, LEB_SIZE, false)]) ∧ valid-global-sqn(apebs1[vtblpnum2, mkpeb(aehdr, avidhdr(VTBL_VOLID, VTBL_LNUM, 0, 0, 0), buf1, LEB_SIZE, false)], 1) ∧ valid-wl(apebs1[vtblpnum2, mkpeb(aehdr, avidhdr(VTBL_VOLID, VTBL_LNUM, 0, 0, 0), buf1, LEB_SIZE, false)], wlar[vtblpnum2, wl-entry(m, used)]) ∧ valid-eraseq(wlar[vtblpnum2, wl-entry(m, used)], []) ∧ valid-ebatbl (apebs1[vtblpnum2, mkpeb(aehdr, avidhdr(VTBL_VOLID, VTBL_LNUM, 0, 0, 0), buf1, LEB_SIZE, false)], wlar[vtblpnum2, wl-entry(m, used)], ∅, vtblpnum2) ∧ valid-vtbl (apebs1[vtblpnum2, mkpeb(aehdr, avidhdr(VTBL_VOLID, VTBL_LNUM, 0, 0, 0), buf1, LEB_SIZE, false)], ∅, wlar[vtblpnum2, wl-entry(m, used)], vtblpnum2)
Used simplifier rules: ⊦ m = wle.ec ∧ stat = wle.status ↔ wle = wl-entry(m, stat); (elim) Used terms: wlar[vtblpnum2], m, stat