| ⊦ # copy(ar, m, ar0, m0, n)[m0 + n, ar[m + n]] = # copy(ar, m + 1, ar0, m0 + 1, n)[m0, ar[m]] ∧ (∀ n0. n0 < # copy(ar, m, ar0, m0, n)[m0 + n, ar[m + n]] → copy(ar, m, ar0, m0, n)[m0 + n, ar[m + n]][n0] = copy(ar, m + 1, ar0, m0 + 1, n)[m0, ar[m]][n0]) |
n0 < # ar0 ⊦ copy(ar, m, ar0, m0, n)[m0 + n, ar[m + n]][n0] = copy(ar, m + 1, ar0, m0 + 1, n)[m0, ar[m]][n0], # ar0 = 0
Used simplifier rules: size-copy: ⊦ # copy(ar, m, ar0, m0, n) = # ar0;%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic1%Size-put: ⊦ # ar[n, a] = # ar; from specification array