| # buf1 = n2 + n1 + m, ⌜# buf1⌝ = ⌜n1⌝ + ⌜m⌝ + #(⌜buf1⌝ from n1 + m), ⌜n3⌝ < ⌜m⌝ , n3 < n2 + m, n1 < # buf1, n0 + m ≤ # buf0, n1 + m ≤ # buf1 ⊦ (m ≤ n3 ⊃ buf1[n3 + n1];buf0[n3 + n0]) = ((⌜buf0⌝ from n0) to m)[n3], #(⌜buf0⌝ from n0) < ⌜m⌝ |
# buf1 = n2 + n1 + m, ⌜# buf1⌝ = ⌜n1⌝ + ⌜m⌝ + #(⌜buf1⌝ from n1 + m), n3 < m, n3 < n2 + m, n1 < # buf1, n0 + m ≤ # buf0, n1 + m ≤ # buf1 ⊦ buf0[n3 + n0] = (⌜buf0⌝ from n0)[n3], #(⌜buf0⌝ from n0) < ⌜m⌝
Used simplifier rules: ⊦ m < n → n ≠ 0; (s)%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic%m < n, ¬ # σ0 < ⌜n⌝ ⊦ (σ0 to n)[m] = σ0[m]; (s)% ⊦ m < n → (n ≤ m ↔ false); (s)% ⊦ m < n ↔ ¬ n ≤ m; (ss)% ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s)