| # buf2 = n1 + n0 + n, # buf = # buf2, pebs[m3] = mkpeb(buf1, m2, false), buf0 = buf2, err0 = EIO, m1 = m3, m5 = 0, m3 < # pebs, m1 < # pebs, mtd-cons(pebs), range=(buf, 0, buf2, 0, n0), range=(buf, n0 + n, buf2, n0 + n, # buf2 - n0 + n), n0 + n ≤ # buf2, m0 + n ≤ PEB_SIZE, n0 + n ≤ # buf, m ≤ UBI_READ_RETRIES + 1, err = ESUCCESS → subarray(buf, n0, n) = subarray(pebs[m1].data, m0, n), err = ESUCCESS ∨ ⌊err⌋ ⊦ pebs[m1].bad, # buf = # buf0 ∧ range=(buf, 0, buf0, 0, n0) ∧ range=(buf, n0 + n, buf0, n0 + n, n1) ∧ (err = ESUCCESS ∨ ⌊err⌋ ) ∧ (err = ESUCCESS → subarray(buf, n0, n) = subarray(buf1, m0, n)), err ≠ ESUCCESS ∧ m ≤ UBI_READ_RETRIES |
# buf2 = n1 + n0 + n, # buf = # buf2, pebs[m3] = mkpeb(buf1, m2, false), m3 < # pebs, mtd-cons(pebs), range=(buf, 0, buf2, 0, n0), range=(buf, n0 + n, buf2, n0 + n, # buf2 - n0 + n), m0 + n ≤ PEB_SIZE, n0 + n ≤ # buf2, m ≤ UBI_READ_RETRIES + 1, err = ESUCCESS → subarray(buf, n0, n) = subarray(buf1, m0, n), err = ESUCCESS ∨ ⌊err⌋ ⊦ range=(buf, n0 + n, buf2, n0 + n, n1), err ≠ ESUCCESS ∧ m ≤ UBI_READ_RETRIES
Used simplifier rules: ⊦ mkpeb(buf, m, boolvar).data = buf; (s)% ⊦ mkpeb(buf, m, boolvar).bad ↔ boolvar; (s)