| # buf1 = n2 + n1 + m, n1 + m ≤ # buf1, n0 + m ≤ # buf0 ⊦ ⌜copy(buf0, n0, buf1, n1, m)⌝ = (⌜buf1⌝ to n1) + ((⌜buf0⌝ from n0) to m) + (⌜buf1⌝ from n1 + m) |
⊦ σ = σ2 ↔ # σ = # σ2 ∧ (∀ n. ⌜n⌝ < # σ → σ[n] = σ2[n])
# buf1 = n2 + n1 + m, n0 + m ≤ # buf0, n1 + m ≤ # buf1 ⊦ # ⌜copy(buf0, n0, buf1, n1, m)⌝ = #((⌜buf1⌝ to n1) + ((⌜buf0⌝ from n0) to m) + (⌜buf1⌝ from n1 + m)) ∧ (∀ n. ⌜n⌝ < # ⌜copy(buf0, n0, buf1, n1, m)⌝ → ⌜copy(buf0, n0, buf1, n1, m)⌝ [n] = ((⌜buf1⌝ to n1) + ((⌜buf0⌝ from n0) to m) + (⌜buf1⌝ from n1 + m))[n])
Used terms: (⌜buf1⌝ to n1) + ((⌜buf0⌝ from n0) to m) + (⌜buf1⌝ from n1 + m), ⌜copy(buf0, n0, buf1, n1, m)⌝