| n0 + m1 ≤ # ar1 ⊦ # copy(ar0 + ar1, n0 + # ar0, ar2, m0, m1) = # copy(ar1, n0, ar2, m0, m1) ∧ (∀ n. n < # copy(ar0 + ar1, n0 + # ar0, ar2, m0, m1) → copy(ar0 + ar1, n0 + # ar0, ar2, m0, m1)[n] = copy(ar1, n0, ar2, m0, m1)[n]) |
n < # ar2, n0 + m1 ≤ # ar1 ⊦ (n < m0 ∨ m0 + m1 ≤ n ⊃ ar2[n];(ar0 + ar1)[n + n0 + # ar0 - m0]) = (n < m0 ∨ m0 + m1 ≤ n ⊃ ar2[n];ar1[n + n0 - m0])
Used simplifier rules: ⊦ m < n → n ≠ 0; (s)%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic%⊦ m0 < # ar1 → copy(ar0, n, ar1, n0, m)[m0] = (m0 < n0 ∨ n0 + m ≤ m0 ⊃ ar1[m0];ar0[m0 + n - n0]); (s)% ⊦ # copy(ar, m, ar0, m0, n) = # ar0; (s)