| # pebs = # apebs, apebs[n] = mkpeb(aehdr, avhdr, buf, m0, false), pebs[n] = mkpeb(buf0, m1, false), aehdr.valid?, avhdr.valid?, n < # apebs, ∀ n0. n0 < # apebs → (pebs[n0].bad ↔ apebs[n0].bad) ∧ ( ¬ pebs[n0].bad → pebs[n0].fill = (apebs[n0].echdr = empty ⊃ 0;(apebs[n0].vidhdr = empty ⊃ EB_PAGE_SIZE;apebs[n0].fill + 2 * EB_PAGE_SIZE)) ∧ (apebs[n0].echdr = empty → subarray(pebs[n0].data, 0, EB_PAGE_SIZE) = emptypage) ∧ (apebs[n0].echdr.valid? → is-encoded(echdr(apebs[n0].echdr.ec), subarray(pebs[n0].data, 0, EB_PAGE_SIZE))) ∧ (apebs[n0].echdr = garbage → is-garbage-ec(subarray(pebs[n0].data, 0, EB_PAGE_SIZE)) ∧ subarray(pebs[n0].data, 0, EB_PAGE_SIZE) ≠ emptypage) ∧ (apebs[n0].vidhdr = empty → subarray(pebs[n0].data, EB_PAGE_SIZE, EB_PAGE_SIZE) = emptypage) ∧ ( apebs[n0].vidhdr.valid? → is-encoded (vidhdr(apebs[n0].vidhdr.vol, apebs[n0].vidhdr.leb, apebs[n0].vidhdr.sqn, apebs[n0].vidhdr.size, apebs[n0].vidhdr.checksum), subarray(pebs[n0].data, EB_PAGE_SIZE, EB_PAGE_SIZE))) ∧ ( apebs[n0].vidhdr = garbage → is-garbage-vid(subarray(pebs[n0].data, EB_PAGE_SIZE, EB_PAGE_SIZE)) ∧ subarray(pebs[n0].data, EB_PAGE_SIZE, EB_PAGE_SIZE) ≠ emptypage) ∧ subarray(pebs[n0].data, 2 * EB_PAGE_SIZE, LEB_SIZE) = apebs[n0].data) ⊦ m1 = 2 * EB_PAGE_SIZE + m0 |
Used simplifier rules: ⊦ mkpeb(buf, m, boolvar).bad ↔ boolvar; (s)% ⊦ mkpeb(aehdr, avhdr, buf, m, boolvar).bad ↔ boolvar; (s)% ⊦ mkpeb(buf, m, boolvar).fill = m; (s)% ⊦ mkpeb(aehdr, avhdr, buf, m, boolvar).echdr = aehdr; (s)% ⊦ mkpeb(aehdr, avhdr, buf, m, boolvar).vidhdr = avhdr; (s)% ⊦ mkpeb(aehdr, avhdr, buf, m, boolvar).fill = m; (s)% ⊦ mkpeb(buf, m, boolvar).data = buf; (s)% ⊦ mkpeb(aehdr, avhdr, buf, m, boolvar).data = buf; (s)% ⊦ ¬ empty.valid?; (s)%# buf = n ⊦ subarray(buf, 0, n) = buf; (s)% ⊦ empty ≠ garbage; (s)% ⊦ ¬ garbage.valid?; (s)% ⊦ empty ≠ garbage; (s)% ⊦ is-encoded(vhdr, buf) → ¬ is-garbage-vid(buf); (s)% ⊦ ¬ empty.valid?; (s)%c: ⊦ m + n = n + m; from specification nat-basic Used terms: n