| apebs[n] = mkpeb(aehdr, avhdr, buf, m, false), n < # apebs, ubi-io-erase-pre(n, apebs), ubi-io-inv(apebs) ⊦ ⟪fail_or_success#(; ; err); if err = ESUCCESS then apebs[n] := mkpeb(empty, empty, mkempbuf(LEB_SIZE), 0, false) else {choose apeb with ubi-io-peb-inv(apeb) ∧ ¬ apeb.bad ∧ ¬ apeb.vidhdr.valid? in apebs[n] := apeb or skip}⟫ ubi-io-inv(apebs) |
apebs[n] = mkpeb(aehdr, avhdr, buf, m, false), n < # apebs, ubi-io-inv(apebs) ⊦ ⟪fail_or_success#(; ; err); if err = ESUCCESS then apebs[n] := mkpeb(empty, empty, mkempbuf(LEB_SIZE), 0, false) else {choose apeb with ubi-io-peb-inv(apeb) ∧ ¬ apeb.bad ∧ ¬ apeb.vidhdr.valid? in apebs[n] := apeb or skip}⟫ ubi-io-inv(apebs)
Used simplifier rules: ⊦ mkpeb(aehdr, avhdr, buf, m, boolvar).bad ↔ boolvar; (s)% ⊦ ubi-io-erase-pre(n, apebs) ↔ n < # apebs ∧ ¬ apebs[n].bad; (s)