| # wlar = # apebs1, # buf1 = LEB_SIZE, wlar[n] = wl-entry(m3, stat0), apebs1[n] = mkpeb(aehdr1, avhdr0, buf2, m2, boolvar0), wlar[vtblpnum2] = wl-entry(m, stat), apebs1[vtblpnum2] = mkpeb(aehdr, empty, buf0, 0, false), aehdr.valid?, n < # apebs1, 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)]), ubi-io-peb-inv(mkpeb(aehdr1, avhdr0, buf2, m2, boolvar0)), ENCODED_NAT_SIZE ≤ LEB_SIZE, boolvar0 → wl-entry(m3, stat0) = wl-entry(0, erroneous), ¬ boolvar0 → aehdr1.valid? ∧ wl-entry(m3, stat0) = wl-entry(aehdr1.ec, free) ∧ avhdr0 = empty ⊦ aehdr1 = aechdr(m3), n = vtblpnum2, stat0 = erasing, stat0 = erroneous, vtblpnum2 = # apebs1 |
# wlar = # apebs1, # buf1 = LEB_SIZE, wlar[n] = wl-entry(aehdr1.ec, free), apebs1[n] = mkpeb(aehdr1, empty, mkempbuf(LEB_SIZE), 0, false), wlar[vtblpnum2] = wl-entry(m, stat), apebs1[vtblpnum2] = mkpeb(aehdr, empty, buf0, 0, false), aehdr1.valid?, aehdr.valid?, n < # apebs1, 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 ⊦ aehdr1 = aechdr(aehdr1.ec), n = vtblpnum2, vtblpnum2 = # apebs1, wl-entry(aehdr1.ec, free) = wl-entry(0, erroneous)
Used simplifier rules: ⊦ aehdr.valid? → ( ubi-io-peb-inv(mkpeb(aehdr, empty, buf, n, false)) ↔ buf = mkempbuf(LEB_SIZE) ∧ n = 0); (s)% ⊦ free ≠ erasing; (s)% ⊦ free ≠ erroneous; (s)% ⊦ wl-entry(m, stat) = wl-entry(m0, stat0) ↔ m = m0 ∧ stat = stat0; (ws)