| 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), emptypage = subarray(buf1, 0, EB_PAGE_SIZE), m2 < # pebs, m2 < # apebs, abs(pebs, apebs), abs-echdr(emptypage, aehdr1), 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), mtd-cons(pebs), ubi-io-inv(apebs), EB_PAGE_SIZE ≤ PEB_SIZE ⊦ empty = aehdr1 |
⊦ abs-echdr(buf, aehdr) ↔ (aehdr = empty → buf = emptypage) ∧ (aehdr.valid? → is-encoded(echdr(aehdr.ec), buf)) ∧ (aehdr = garbage → is-garbage-ec(buf) ∧ buf ≠ emptypage)
Used simplifier rules: ⊦ ¬ is-encoded(ehdr, emptypage); (s)% ⊦ m < n ↔ ¬ n ≤ m; (ss)% ⊦ m < n → (n ≤ m ↔ false); (s)%n < # pebs ⊦ pebs[n] = mkpeb(buf, m, boolvar) ∧ mtd-cons(pebs) → # buf = PEB_SIZE; (s)% ⊦ m ≠ n → (m ≤ n ↔ m < n); (s)% ⊦ aehdr ≠ garbage → (aehdr.valid? ↔ aehdr ≠ empty); (ss)%# buf = n ⊦ subarray(buf, 0, n) = buf; (s) Used terms: aehdr1, emptypage