| # buf1 = n2 + n1 + m, ⌜# buf1⌝ = ⌜n1⌝ + #((⌜buf0⌝ from n0) to m) + #(⌜buf1⌝ from n1 + m), n < # buf1, n < # copy(buf0, n0, buf1, n1, m), n1 + m ≤ # buf1, n0 + m ≤ # buf0 ⊦ copy(buf0, n0, buf1, n1, m)[n] = ((⌜buf1⌝ to n1) + ((⌜buf0⌝ from n0) to m) + (⌜buf1⌝ from n1 + m))[n] |
# buf1 = n2 + n1 + m, ⌜# buf1⌝ = ⌜n1⌝ + #((⌜buf0⌝ from n0) to m) + #(⌜buf1⌝ from n1 + m), n < # buf1, n0 + m ≤ # buf0, n1 + m ≤ # buf1 ⊦ (n < n1 ∨ n1 + m ≤ n ⊃ buf1[n];buf0[n + n0 - n1]) = ((⌜buf1⌝ to n1) + ((⌜buf0⌝ from n0) to m) + (⌜buf1⌝ from n1 + m))[n]
Used simplifier rules: ⊦ # copy(buf, m, buf0, m0, n) = # buf0; (s)%⊦ m0 < # buf → copy(buf0, n, buf, n0, m)[m0] = (m0 < n0 ∨ n0 + m ≤ m0 ⊃ buf[m0];buf0[m0 + n - n0]); (s)