| # buf1 = LEB_SIZE, # wlar = # apebs1, apebs1[vtblpnum2] = mkpeb(aehdr, empty, buf0, 0, false), vtblpnum2 ≠ # apebs1, 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)]), 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) ⊦ [fail_or_success#(; ; err); apebs := apebs1[vtblpnum2, mkpeb(aehdr, avidhdr(VTBL_VOLID, VTBL_LNUM, 0, 0, 0), buf0, 0, false)]; if err = ESUCCESS then apebs[vtblpnum2] := mkpeb (apebs[vtblpnum2].echdr, apebs[vtblpnum2].vidhdr, subarray(apebs[vtblpnum2].data, 0, 0) + subarray(buf1, 0, LEB_SIZE) + mkempbuf(LEB_SIZE - 0 - LEB_SIZE), LEB_SIZE, apebs[vtblpnum2].bad) else {vtblpnum0 := vtblpnum2; vtblpnum := 0; n1 := 0; n0 := LEB_SIZE; choose n with (n < n0 ∨ n = 0 ∧ n0 = 0) ∧ is-aligned(n, EB_PAGE_SIZE) in if n ≠ 0 then apebs[vtblpnum0] := mkpeb (apebs[vtblpnum0].echdr, apebs[vtblpnum0].vidhdr, subarray(apebs[vtblpnum0].data, 0, vtblpnum) + subarray(buf1, n1, n) + mkempbuf(LEB_SIZE - vtblpnum - n), vtblpnum + n, apebs[vtblpnum0].bad)}] ( ubi-io-inv(apebs) → ⟪vols := ∅; 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 ∈ vols ∧ bflipset-cons(bflipset, wlar) ∧ valid-ebatbl(apebs, wlar, vols, vtblpnum2) ∧ valid-vtbl(apebs, vols, wlar, vtblpnum2)) ∧ (err = ESUCCESS ∨ ⌊err⌋ ) ∧ (err = ESUCCESS → vols = ∅))) |
# 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)]), 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) ⊦ [choose err0 with ⌊err0⌋ ∨ err0 = ESUCCESS in err := err0; apebs := apebs1[vtblpnum2, mkpeb(aehdr, avidhdr(VTBL_VOLID, VTBL_LNUM, 0, 0, 0), buf0, 0, false)]; if err = ESUCCESS then apebs[vtblpnum2] := mkpeb (apebs[vtblpnum2].echdr, apebs[vtblpnum2].vidhdr, subarray(apebs[vtblpnum2].data, 0, 0) + subarray(buf1, 0, LEB_SIZE) + mkempbuf(LEB_SIZE - 0 - LEB_SIZE), LEB_SIZE, apebs[vtblpnum2].bad) else {vtblpnum0 := vtblpnum2; vtblpnum := 0; n1 := 0; n0 := LEB_SIZE; choose n with (n < n0 ∨ n = 0 ∧ n0 = 0) ∧ is-aligned(n, EB_PAGE_SIZE) in if n ≠ 0 then apebs[vtblpnum0] := mkpeb (apebs[vtblpnum0].echdr, apebs[vtblpnum0].vidhdr, subarray(apebs[vtblpnum0].data, 0, vtblpnum) + subarray(buf1, n1, n) + mkempbuf(LEB_SIZE - vtblpnum - n), vtblpnum + n, apebs[vtblpnum0].bad)}] ( ubi-io-inv(apebs) → ⟪vols := ∅; 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 ∈ vols ∧ bflipset-cons(bflipset, wlar) ∧ valid-ebatbl(apebs, wlar, vols, vtblpnum2) ∧ valid-vtbl(apebs, vols, wlar, vtblpnum2)) ∧ (err = ESUCCESS ∨ ⌊err⌋ ) ∧ (err = ESUCCESS → vols = ∅))), vtblpnum2 = # apebs1
Used simplifier rules: fail_or_success#(; ; ERR) {choose ERR0 with ⌊ERR0⌋ ∨ ERR0 = ESUCCESS in ERR := ERR0};