| # wlar = # apebs1, # buf1 = LEB_SIZE, apebs1[vtblpnum2] = mkpeb(aehdr, empty, buf0, 0, false), apebs = apebs1[vtblpnum2, mkpeb(aehdr, avidhdr(VTBL_VOLID, VTBL_LNUM, 0, 0, 0), buf0, 0, false)], err = err0, n = 0, n0 = LEB_SIZE, n1 = 0, vtblpnum = 0, vtblpnum0 = vtblpnum2, aehdr.valid?, vtblpnum2 < # apebs1, is-aligned(LEB_SIZE, EB_PAGE_SIZE), is-aligned(n, 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(apebs), 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), ⌊err0⌋ ∨ err0 = ESUCCESS, n < n0 ∨ n = 0 ∧ n0 = 0 ⊦ ⟪wlar[vtblpnum2] := wl-entry(wlar[vtblpnum2].ec, used); q := []; sqnum := 1; bflipset := ∅⟫ ( ( err = ESUCCESS → # apebs = # wlar ∧ unique-sqns(apebs) ∧ valid-global-sqn(apebs, sqnum) ∧ valid-wl(apebs, wlar) ∧ valid-eraseq(q) ∧ valid-eraseq(wlar, q) ∧ valid-eraseq(apebs, q) ∧ ¬ VTBL_VOLID ∈ ∅ ∧ bflipset-cons(bflipset, wlar) ∧ valid-ebatbl(apebs, wlar, ∅, vtblpnum2) ∧ valid-vtbl(apebs, ∅, wlar, vtblpnum2)) ∧ (err = ESUCCESS ∨ ⌊err⌋ ) ∧ (err = ESUCCESS → ∅ = ∅)), err = ESUCCESS, vtblpnum2 = # apebs1 |
# buf1 = LEB_SIZE, # wlar = # apebs1, apebs1[vtblpnum2] = mkpeb(aehdr, empty, buf0, 0, false), apebs = apebs1[vtblpnum2, mkpeb(aehdr, avidhdr(VTBL_VOLID, VTBL_LNUM, 0, 0, 0), buf0, 0, false)], err = err0, n = 0, n0 = LEB_SIZE, n1 = 0, vtblpnum = 0, vtblpnum0 = vtblpnum2, aehdr.valid?, vtblpnum2 < # wlar, vtblpnum2 < # apebs1, is-aligned(n, EB_PAGE_SIZE), is-aligned(LEB_SIZE, EB_PAGE_SIZE), is-encoded(∅, buf1), ubi-io-initial(apebs1), ubi-io-inv(apebs), 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), n < n0 ∨ n = 0 ∧ n0 = 0, ⌊err0⌋ ∨ err0 = ESUCCESS ⊦ ⟪q := []; sqnum := 1; bflipset := ∅⟫ ( ( err = ESUCCESS → # apebs = # wlar[vtblpnum2, wl-entry(wlar[vtblpnum2].ec, used)] ∧ unique-sqns(apebs) ∧ valid-global-sqn(apebs, sqnum) ∧ valid-wl(apebs, wlar[vtblpnum2, wl-entry(wlar[vtblpnum2].ec, used)]) ∧ valid-eraseq(q) ∧ valid-eraseq(wlar[vtblpnum2, wl-entry(wlar[vtblpnum2].ec, used)], q) ∧ valid-eraseq(apebs, q) ∧ ¬ VTBL_VOLID ∈ ∅ ∧ bflipset-cons(bflipset, wlar[vtblpnum2, wl-entry(wlar[vtblpnum2].ec, used)]) ∧ valid-ebatbl(apebs, wlar[vtblpnum2, wl-entry(wlar[vtblpnum2].ec, used)], ∅, vtblpnum2) ∧ valid-vtbl(apebs, ∅, wlar[vtblpnum2, wl-entry(wlar[vtblpnum2].ec, used)], vtblpnum2)) ∧ (err = ESUCCESS ∨ ⌊err⌋ ) ∧ (err = ESUCCESS → ∅ = ∅)), err = ESUCCESS, vtblpnum2 = # apebs1
Used simplifier rules: ⊦ EB_PAGE_SIZE ≠ 0; (s)%n ≠ 0 ⊦ is-aligned(0, n); (s)% ⊦ ⌊err⌋ → err ≠ ESUCCESS; (s)% ⊦ 0 < m ↔ m ≠ 0; (s)% ⊦ LEB_SIZE ≠ 0; (s)% ⊦ m < n ↔ ¬ n ≤ m; (ss)%fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat%fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat% ⊦ ¬ n < n; (s)