| # wlar = # apebs0, apebs0[vtblpnum2] = mkpeb(aehdr, avhdr, buf0, m, false), avhdr0 = avidhdr(VTBL_VOLID, VTBL_LNUM, 0, 0, 0), n0 = vtblpnum2, vtblpnum2 < # apebs0, ubi-io-initial(apebs0), ubi-io-inv(apebs0), ubi-io-write-vidhdr-pre(vtblpnum2, avidhdr(VTBL_VOLID, VTBL_LNUM, 0, 0, 0), apebs0), ∀ n3. n3 < # apebs0 → (apebs0[n3].bad → wlar[n3] = wl-entry(0, erroneous)) ∧ (¬ apebs0[n3].bad → apebs0[n3].echdr.valid? ∧ wlar[n3] = wl-entry(apebs0[n3].echdr.ec, free) ∧ apebs0[n3].vidhdr = empty) ⊦ [aubi_io_write_vidhdr#(vtblpnum2, avidhdr(VTBL_VOLID, VTBL_LNUM, 0, 0, 0); apebs0; err0)] ( ubi-io-inv(apebs0) → ⟪vtblpnum1 := LEB_SIZE; if err0 = ESUCCESS then if vtblpnum1 < ENCODED_NAT_SIZE then err0 := ENOSPC else let buf = mkbuf(vtblpnum1), vtbl = ∅ in {encode_vtbl#(; vtbl, buf; err0); if err0 = ESUCCESS then aubi_io_write_data#(vtblpnum2, 0, 0, vtblpnum1, buf; apebs0; err0)}; vols := ∅; wlar[vtblpnum2] := wl-entry(wlar[vtblpnum2].ec, used); q := []; sqnum := 1; bflipset := ∅⟫ ( ( err0 = ESUCCESS → # apebs0 = # wlar ∧ unique-sqns(apebs0) ∧ valid-global-sqn(apebs0, sqnum) ∧ valid-wl(apebs0, wlar) ∧ valid-eraseq(q) ∧ valid-eraseq(wlar, q) ∧ valid-eraseq(apebs0, q) ∧ ¬ VTBL_VOLID ∈ vols ∧ bflipset-cons(bflipset, wlar) ∧ valid-ebatbl(apebs0, wlar, vols, vtblpnum2) ∧ valid-vtbl(apebs0, vols, wlar, vtblpnum2) ∧ vtblpnum1 = LEB_SIZE ∧ ubi-io-inv(apebs0)) ∧ (err0 = ESUCCESS ∨ ⌊err0⌋ ) ∧ (err0 = ESUCCESS → vols = ∅))), vtblpnum2 = # apebs0 |
# wlar = # apebs0, apebs0[vtblpnum2] = mkpeb(aehdr, empty, buf0, m, false), vtblpnum2 ≠ # apebs0, aehdr.valid?, vtblpnum2 < # apebs0, ubi-io-initial(apebs0), ∀ n3. n3 < # apebs0 → (apebs0[n3].bad → wlar[n3] = wl-entry(0, erroneous)) ∧ (¬ apebs0[n3].bad → apebs0[n3].echdr.valid? ∧ wlar[n3] = wl-entry(apebs0[n3].echdr.ec, free) ∧ apebs0[n3].vidhdr = empty) ⊦ [aubi_io_write_vidhdr#(vtblpnum2, avidhdr(VTBL_VOLID, VTBL_LNUM, 0, 0, 0); apebs0; err0)] ( ubi-io-inv(apebs0) → ⟪vtblpnum1 := LEB_SIZE; if err0 = ESUCCESS then if vtblpnum1 < ENCODED_NAT_SIZE then err0 := ENOSPC else let buf = mkbuf(vtblpnum1), vtbl = ∅ in {encode_vtbl#(; vtbl, buf; err0); if err0 = ESUCCESS then aubi_io_write_data#(vtblpnum2, 0, 0, vtblpnum1, buf; apebs0; err0)}; vols := ∅; wlar[vtblpnum2] := wl-entry(wlar[vtblpnum2].ec, used); q := []; sqnum := 1; bflipset := ∅⟫ ( ( err0 = ESUCCESS → # apebs0 = # wlar ∧ unique-sqns(apebs0) ∧ valid-global-sqn(apebs0, sqnum) ∧ valid-wl(apebs0, wlar) ∧ valid-eraseq(q) ∧ valid-eraseq(wlar, q) ∧ valid-eraseq(apebs0, q) ∧ ¬ VTBL_VOLID ∈ vols ∧ bflipset-cons(bflipset, wlar) ∧ valid-ebatbl(apebs0, wlar, vols, vtblpnum2) ∧ valid-vtbl(apebs0, vols, wlar, vtblpnum2) ∧ vtblpnum1 = LEB_SIZE ∧ ubi-io-inv(apebs0)) ∧ (err0 = ESUCCESS ∨ ⌊err0⌋ ) ∧ (err0 = ESUCCESS → vols = ∅)))
Used simplifier rules: ⊦ mkpeb(aehdr, avhdr, buf, m, boolvar).bad ↔ boolvar; (s)% ⊦ mkpeb(aehdr, avhdr, buf, m, boolvar).echdr = aehdr; (s)% ⊦ mkpeb(aehdr, avhdr, buf, m, boolvar).vidhdr = avhdr; (s)% ⊦ ubi-io-initial(apebs) → ubi-io-inv(apebs); (s)% ⊦ avidhdr(v, m, m0, m1, m2).valid?; (s)%⊦ ubi-io-write-vidhdr-pre(n, avhdr, apebs) ↔ n < # apebs ∧ ¬ apebs[n].bad ∧ avhdr.valid? ∧ apebs[n].echdr.valid? ∧ apebs[n].vidhdr = empty; (s)