| 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 |
apebs[m2] = mkpeb(aehdr1, avhdr, subarray(buf1, 2 * EB_PAGE_SIZE, LEB_SIZE), m1, false), pebs[m2] = mkpeb(buf1, (avhdr = empty ⊃ EB_PAGE_SIZE;m1 + 2 * EB_PAGE_SIZE), false), aehdr1.valid?, m2 < # pebs, m2 < # apebs, abs(pebs, apebs), abs-peb (mkpeb(buf1, (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(aehdr1.ec), subarray(buf1, 0, EB_PAGE_SIZE)), mtd-cons(pebs), ubi-io-inv(apebs), EB_PAGE_SIZE ≤ PEB_SIZE ⊦ aechdr(aehdr1.ec) = aehdr1, aehdr1 = garbage, aehdr1 = empty, subarray(buf1, 0, EB_PAGE_SIZE) = emptypage
Used simplifier rules: ⊦ aehdr ≠ garbage → (aehdr.valid? ↔ aehdr ≠ empty); (ss)%abs-fwd: ⊦ n < # pebs ∧ pebs[n] = peb ∧ abs(pebs, apebs) → n < # apebs ∧ abs-peb(peb, apebs[n]); (forward) from specification ubi-io-abs% ⊦ echdr(m) = echdr(m0) ↔ m = m0; (s)% ⊦ is-encoded(ehdr, buf) → (is-encoded(ehdr0, buf) ↔ ehdr = ehdr0); (s)% ⊦ is-encoded(ehdr, buf) → ¬ is-garbage-ec(buf); (s)