| buf0[n1] = empty, buf[n1 + m] = empty, n1 < # buf0, n1 < n, m < # buf, datasize(buf, # buf) < # buf, datasize(buf, # buf) < m + n, n1 + m < # buf, datasize(copy(buf0, 0, buf, m, n), n1 + m) < datasize(buf, n1 + m), datasize(buf, # buf) ≤ m, m + n ≤ # buf, n ≤ # buf0, datasize(buf, # buf) ≤ n1 + m, ∀ buf1, buf2, m0, n0. ¬ datasize(copy(buf1, 0, buf2, m0, n0), n1 + m) < datasize(buf2, n1 + m) ∨ ¬ datasize(buf2, # buf2) ≤ m0 ∨ ¬ m0 + n0 ≤ # buf2 ∨ ¬ n0 ≤ # buf1 ∨ ¬ n1 + m ≤ # buf2 ⊦ |
buf0[n1] = empty, buf[n1 + m] = empty, n1 < # buf0, n1 < n, m < # buf, datasize(buf, # buf) < # buf, datasize(buf, # buf) < m + n, n1 + m < # buf, datasize(copy(buf0, 0, buf, m, n), n1 + m) < datasize(buf, n1 + m), datasize(buf, # buf) ≤ m, m + n ≤ # buf, n ≤ # buf0, datasize(buf, # buf) ≤ n1 + m, ∀ buf1, buf2, m0, n0. ¬ datasize(copy(buf1, 0, buf2, m0, n0), n1 + m) < datasize(buf2, n1 + m) ∨ ¬ datasize(buf2, # buf2) ≤ m0 ∨ ¬ m0 + n0 ≤ # buf2 ∨ ¬ n0 ≤ # buf1 ∨ ¬ n1 + m ≤ # buf2 ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s)%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic