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