| 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, m1 + n2 ≤ LEB_SIZE, n1 ≤ LEB_SIZE, m1 + n2 ≤ #(subarray(buf0, 0, n1) + mkempbuf(n0)), n3 + n2 ≤ # buf2 ⊦ copy(buf0, m1, buf2, n3, n2) = subarray(buf2, 0, n3) + subarray(subarray(buf0, 0, n1) + mkempbuf(n0), m1, n2) + subarray(buf2, n3 + n2, # buf2 - n3 - n2) |
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, n1 ≤ LEB_SIZE, n3 + n2 ≤ # buf2, m1 + n2 ≤ LEB_SIZE ⊦ copy(buf0, m1, buf2, n3, n2) = subarray(buf2, 0, n3) + subarray(subarray(buf0, 0, n1) + mkempbuf(n0), m1, n2) + subarray(buf2, n3 + n2, # buf2 - n3 - n2)
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic%append-a: ⊦ (buf + buf0) + buf1 = buf + buf0 + buf1; from specification array-splice[buffer]% ⊦ # mkempbuf(n) = n; (s)% ⊦ # subarray(buf, m, n) = n; (s)% ⊦ #(buf + buf0) = # buf + # buf0; (s)