| apebs[m2] = mkpeb(aehdr, avhdr1, subarray(buf1, 2 * EB_PAGE_SIZE, LEB_SIZE), m1, false), pebs[m2] = mkpeb(buf1, (aehdr = empty ⊃ 0;m1 + 2 * EB_PAGE_SIZE), false), emptypage = subarray(buf1, EB_PAGE_SIZE, EB_PAGE_SIZE), m2 < # pebs, m2 < # apebs, abs(pebs, apebs), abs-echdr(subarray(buf1, 0, EB_PAGE_SIZE), aehdr), abs-peb(mkpeb(buf1, (aehdr = empty ⊃ 0;m1 + 2 * EB_PAGE_SIZE), false), mkpeb(aehdr, avhdr1, subarray(buf1, 2 * EB_PAGE_SIZE, LEB_SIZE), m1, false)), abs-vidhdr(emptypage, avhdr1), mtd-cons(pebs), ubi-io-inv(apebs), 2 * EB_PAGE_SIZE ≤ PEB_SIZE ⊦ empty = avhdr1 |
⊦ abs-vidhdr(buf, avhdr) ↔ (avhdr = empty → buf = emptypage) ∧ (avhdr.valid? → is-encoded(vidhdr(avhdr.vol, avhdr.leb, avhdr.sqn, avhdr.size, avhdr.checksum), buf)) ∧ (avhdr = garbage → is-garbage-vid(buf) ∧ buf ≠ emptypage)
Used simplifier rules: ⊦ ¬ is-encoded(vhdr, 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)% ⊦ avhdr ≠ garbage → (avhdr.valid? ↔ avhdr ≠ empty); (ss)%# buf = n ⊦ subarray(buf, 0, n) = buf; (s) Used terms: avhdr1, emptypage