| # buf1 = n2 + n1 + m, ⌜# buf1⌝ = ⌜n1⌝ + #((⌜buf0⌝ from n0) to m) + #(⌜buf1⌝ from n1 + m), n < # buf1, n0 + m ≤ # buf0, n1 + m ≤ # buf1 ⊦ ⌜copy(buf0, n0, buf1, n1, m)⌝ [n] = ((⌜buf1⌝ to n1) + ((⌜buf0⌝ from n0) to m) + (⌜buf1⌝ from n1 + m))[n] |
⊦ n < # buf → ⌜buf⌝ [n] = buf[n]
# 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]
Used simplifier rules: ⊦ # copy(buf, m, buf0, m0, n) = # buf0; (s)% ⊦ m < n ↔ ¬ n ≤ m; (ss)% ⊦ m < n → (n ≤ m ↔ false); (s) Used terms: n, copy(buf0, n0, buf1, n1, m)