| # apebs = # wlar, apebs[m] = mkpeb(aehdr, avhdr, buf, m2, false), valid-sqns(v, n, apebs, m) = ∅, m < # wlar, valid-peb(v, n, mkpeb(aehdr, avhdr, buf, m2, false)), ∀ n0. n0 < m → (wlar[n0].status = erroneous ↔ apebs[n0].bad) ∧ (wlar[n0].status = free → apebs[n0].vidhdr = empty) ∧ (wlar[n0].status ≠ erroneous ∧ wlar[n0].status ≠ erasing → apebs[n0].echdr = aechdr(wlar[n0].ec)) ∧ (wlar[n0].status = used → (∃ v0, m1. valid-peb(v0, m1, apebs[n0]) ∧ apebs[n0].vidhdr.sqn = valid-sqns(v0, m1, apebs, m).max)) ⊦ aehdr = aechdr(aehdr.ec) |
⊦ valid-peb(v, m, apeb) ↔ ¬ apeb.bad ∧ apeb.echdr.valid? ∧ (∃ m0, m1, m2. apeb.vidhdr = avidhdr(v, m, m0, m1, m2) ∧ (m1 ≠ 0 → m1 ≤ datasize(apeb.data) ∧ m2 = checksum(apeb.data, m1)))
# apebs = # wlar, apebs[m] = mkpeb(aehdr, avhdr, buf, m2, false), valid-sqns(v, n, apebs, m) = ∅, mkpeb(aehdr, avhdr, buf, m2, false).echdr.valid?, m < # wlar, ∀ n0. n0 < m → (wlar[n0].status = erroneous ↔ apebs[n0].bad) ∧ (wlar[n0].status = free → apebs[n0].vidhdr = empty) ∧ (wlar[n0].status ≠ erroneous ∧ wlar[n0].status ≠ erasing → apebs[n0].echdr = aechdr(wlar[n0].ec)) ∧ (wlar[n0].status = used → (∃ v0, m1. valid-peb(v0, m1, apebs[n0]) ∧ apebs[n0].vidhdr.sqn = valid-sqns(v0, m1, apebs, m).max)), ∃ m0, m1, m3. mkpeb(aehdr, avhdr, buf, m2, false).vidhdr = avidhdr(v, n, m0, m1, m3) ∧ (m1 ≠ 0 → m1 ≤ datasize(mkpeb(aehdr, avhdr, buf, m2, false).data) ∧ m3 = checksum(mkpeb(aehdr, avhdr, buf, m2, false).data, m1)) ⊦ aehdr = aechdr(aehdr.ec), mkpeb(aehdr, avhdr, buf, m2, false).bad
Used terms: mkpeb(aehdr, avhdr, buf, m2, false), n, v