| m0 + 1 = # pebs, pebs[m0] = mkpeb(buf, m, false), abs(subarray(pebs, 0, m0), apebs), mtd-valid-peb(mkpeb(buf, m, false)), ubi-io-initial(pebs), ubi-io-initial(apebs), ¬ mkpeb(buf, m, false).bad → mkpeb(buf, m, false).fill = EB_PAGE_SIZE ∧ (∃ n. is-encoded(echdr(n), subarray(mkpeb(buf, m, false).data, 0, EB_PAGE_SIZE))) ⊦ ∃ apebs. abs(pebs, apebs) ∧ ubi-io-initial(apebs) |
# buf = PEB_SIZE, m0 + 1 = # pebs, pebs[m0] = mkpeb(buf, EB_PAGE_SIZE, false), abs(subarray(pebs, 0, m0), apebs), is-encoded(echdr(n), subarray(buf, 0, EB_PAGE_SIZE)), range=(buf, EB_PAGE_SIZE, emptypeb, EB_PAGE_SIZE, PEB_SIZE - EB_PAGE_SIZE), ubi-io-initial(pebs), ubi-io-initial(apebs), EB_PAGE_SIZE ≤ PEB_SIZE ⊦ ∃ apebs. abs(pebs, apebs) ∧ ubi-io-initial(apebs)
Used simplifier rules: n ≠ 0 ⊦ is-aligned(n, n); (s)% ⊦ EB_PAGE_SIZE ≠ 0; (s)% ⊦ # subarray(buf, m, n) = n; (s)%is-encoded-size: ⊦ is-encoded(ehdr, buf) → # buf = EB_PAGE_SIZE; (forward) from specification encoding-page-size-nonempty[encoding-echeader]% ⊦ mkpeb(buf, m, boolvar).fill = m; (s)% ⊦ mkpeb(buf, m, boolvar).bad ↔ boolvar; (s)% ⊦ mkpeb(buf, m, boolvar).data = buf; (s)%⊦ mtd-valid-peb(peb) ↔ # peb.data = PEB_SIZE ∧ ( ¬ peb.bad → peb.fill ≤ PEB_SIZE ∧ is-aligned(peb.fill, EB_PAGE_SIZE) ∧ range= (peb.data, peb.fill, emptypeb, peb.fill, PEB_SIZE - peb.fill)); (s)