| apebs[m2] = mkpeb(aehdr1, avhdr, subarray(buf1, 2 * EB_PAGE_SIZE, LEB_SIZE), m1, false), pebs[m2] = mkpeb(buf1, (aehdr1 = empty ⊃ 0;(avhdr = empty ⊃ EB_PAGE_SIZE;m1 + 2 * EB_PAGE_SIZE)), false), m2 < # pebs, m2 < # apebs, abs(pebs, apebs), abs-echdr(subarray(buf1, 0, EB_PAGE_SIZE), aehdr1), abs-peb (mkpeb(buf1, (aehdr1 = empty ⊃ 0;(avhdr = empty ⊃ EB_PAGE_SIZE;m1 + 2 * EB_PAGE_SIZE)), false), mkpeb(aehdr1, avhdr, subarray(buf1, 2 * EB_PAGE_SIZE, LEB_SIZE), m1, false)), abs-vidhdr(subarray(buf1, EB_PAGE_SIZE, EB_PAGE_SIZE), avhdr), is-encoded(echdr(m0), subarray(buf1, 0, EB_PAGE_SIZE)), mtd-cons(pebs), ubi-io-inv(apebs), EB_PAGE_SIZE ≤ PEB_SIZE ⊦ aechdr(m0) = aehdr1, subarray(buf1, 0, EB_PAGE_SIZE) = emptypage |
⊦ abs-echdr(buf, aehdr) ↔ (aehdr = empty → buf = emptypage) ∧ (aehdr.valid? → is-encoded(echdr(aehdr.ec), buf)) ∧ (aehdr = garbage → is-garbage-ec(buf) ∧ buf ≠ emptypage)
pebs[m2] = mkpeb(buf1, (aehdr1 = empty ⊃ 0;(avhdr = empty ⊃ EB_PAGE_SIZE;m1 + 2 * EB_PAGE_SIZE)), false), apebs[m2] = mkpeb(aehdr1, avhdr, subarray(buf1, 2 * EB_PAGE_SIZE, LEB_SIZE), m1, false), m2 < # apebs, m2 < # pebs, abs(pebs, apebs), abs-peb (mkpeb(buf1, (aehdr1 = empty ⊃ 0;(avhdr = empty ⊃ EB_PAGE_SIZE;m1 + 2 * EB_PAGE_SIZE)), false), mkpeb(aehdr1, avhdr, subarray(buf1, 2 * EB_PAGE_SIZE, LEB_SIZE), m1, false)), abs-vidhdr(subarray(buf1, EB_PAGE_SIZE, EB_PAGE_SIZE), avhdr), is-encoded(echdr(m0), subarray(buf1, 0, EB_PAGE_SIZE)), mtd-cons(pebs), ubi-io-inv(apebs), EB_PAGE_SIZE ≤ PEB_SIZE, aehdr1 = empty → subarray(buf1, 0, EB_PAGE_SIZE) = emptypage, aehdr1.valid? → is-encoded(echdr(aehdr1.ec), subarray(buf1, 0, EB_PAGE_SIZE)), aehdr1 = garbage → is-garbage-ec(subarray(buf1, 0, EB_PAGE_SIZE)) ∧ subarray(buf1, 0, EB_PAGE_SIZE) ≠ emptypage ⊦ aechdr(m0) = aehdr1, subarray(buf1, 0, EB_PAGE_SIZE) = emptypage
Used terms: aehdr1, subarray(buf1, 0, EB_PAGE_SIZE)