| m0 + # buf0 = LEB_SIZE, ubi-io-peb-inv(mkpeb(aehdr, avhdr, buf, m, false)), valid-peb(mkpeb(aehdr, avhdr, buf, m, false)), m ≤ m0 ⊦ valid-peb(mkpeb(aehdr, avhdr, subarray(buf, 0, m0) + buf0, m0 + m1, false)) |
m0 + # buf0 = LEB_SIZE, aehdr.valid?, ubi-io-peb-inv(mkpeb(aehdr, avidhdr(v, m2, m3, m4, m5), buf, m, false)), m ≤ m0, m4 ≠ 0 → m4 ≤ datasize(buf) ∧ m5 = checksum(buf, m4) ⊦ ∃ v0, m6, m7, m8, m9. avidhdr(v, m2, m3, m4, m5) = avidhdr(v0, m6, m7, m8, m9) ∧ (m8 ≠ 0 → m8 ≤ datasize(subarray(buf, 0, m0) + buf0) ∧ m9 = checksum(subarray(buf, 0, m0) + buf0, m8))
Used simplifier rules: valid-peb0: ⊦ valid-peb(apeb) ↔ (∃ v, m. valid-peb(v, m, apeb));%valid-peb2: ⊦ valid-peb(v, m, apeb) ↔ ¬ apeb.bad ∧ apeb.echdr.valid? ∧ (∃ m0, m1, m2. apeb.vidhdr = avidhdr(v, m, m0, m1, m2) ∧ ( m1 ≠ 0 → m1 ≤ datasize(apeb.data) ∧ m2 = checksum(apeb.data, m1)));% ⊦ mkpeb(aehdr, avhdr, buf, m, boolvar).data = buf; (s)% ⊦ mkpeb(aehdr, avhdr, buf, m, boolvar).vidhdr = avhdr; (s)% ⊦ mkpeb(aehdr, avhdr, buf, m, boolvar).echdr = aehdr; (s)% ⊦ mkpeb(aehdr, avhdr, buf, m, boolvar).bad ↔ boolvar; (s)