| # buf2 = (n4 + n2) + n3, LEB_SIZE = n0 + n1, avols[default-volid][m2] = mapped(buf0, n1), m2 < # avols[default-volid], ebm-cons(avols), ebm-vol-inv(abs(avols[default-volid])), default-volid ∈ avols, n3 ≤ # buf2, n1 ≤ LEB_SIZE, n3 + n2 ≤ # buf2, m1 + n2 ≤ LEB_SIZE, n2 + n3 ≤ # buf2 ⊦ copy(buf0, m1, buf2, n3, n2) = subarray(buf2, 0, n3) + subarray(subarray(buf0, 0, n1) + mkempbuf(n0), m1, n2) + subarray(buf2, n3 + n2, n4) |
⊦ buf = buf0 ↔ # buf = # buf0 ∧ (∀ n. n < # buf → buf[n] = buf0[n])
# buf2 = (n4 + n2) + n3, LEB_SIZE = n0 + n1, avols[default-volid][m2] = mapped(buf0, n1), m2 < # avols[default-volid], ebm-cons(avols), ebm-vol-inv(abs(avols[default-volid])), default-volid ∈ avols, n2 + n3 ≤ # buf2, m1 + n2 ≤ LEB_SIZE, n3 + n2 ≤ # buf2, n1 ≤ LEB_SIZE, n3 ≤ # buf2 ⊦ # copy(buf0, m1, buf2, n3, n2) = #(subarray(buf2, 0, n3) + subarray(subarray(buf0, 0, n1) + mkempbuf(n0), m1, n2) + subarray(buf2, n3 + n2, n4)) ∧ (∀ n. n < # copy(buf0, m1, buf2, n3, n2) → copy(buf0, m1, buf2, n3, n2)[n] = (subarray(buf2, 0, n3) + subarray(subarray(buf0, 0, n1) + mkempbuf(n0), m1, n2) + subarray(buf2, n3 + n2, n4))[n])
Used terms: subarray(buf2, 0, n3) + subarray(subarray(buf0, 0, n1) + mkempbuf(n0), m1, n2) + subarray(buf2, n3 + n2, n4), copy(buf0, m1, buf2, n3, n2)