| ar2[n2 + n3] = copy(ar, n, resize(ar0, (n1 + n4) + m1), n1 + n4, m1)[n1 + n3], n3 < n4 + m0, n3 < m0, n3 < m1, # ar0 < (n1 + n4) + m1, # ar0 < (n1 + n4) + m0, n2 + m1 ≤ # ar2, n + m0 ≤ # ar, m1 ≤ m0 ⊦ ar2[n2 + n3] = (n3 < n4 ⊃ resize(ar0, (n1 + n4) + m0)[n1 + n3];ar[n3 + n - n4]) |
⊦ m0 < # ar1 → copy(ar0, n, ar1, n0, m)[m0] = (m0 < n0 ∨ n0 + m ≤ m0 ⊃ ar1[m0];ar0[m0 + n - n0])
⊦ # resize(ar, n) = n
ar2[n2 + n3] = (n1 + n3 < n1 + n4 ∨ (n1 + n4) + m1 ≤ n1 + n3 ⊃ resize(ar0, (n1 + n4) + m1)[n1 + n3];ar[(n1 + n3) + n - n1 + n4]), # ar0 < (n1 + n4) + m0, # ar0 < (n1 + n4) + m1, n3 < m1, n3 < m0, n3 < n4 + m0, n1 + n3 < # resize(ar0, (n1 + n4) + m1), m1 ≤ m0, n + m0 ≤ # ar, n2 + m1 ≤ # ar2 ⊦ ar2[n2 + n3] = (n3 < n4 ⊃ resize(ar0, (n1 + n4) + m0)[n1 + n3];ar[n3 + n - n4])
Used simplifier rules: resize-len: ⊦ # resize(ar, n) = n;% ⊦ m + n < m + n0 ↔ n < n0; (s)% ⊦ m < n ↔ ¬ n ≤ m; (ss)%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic%c: ⊦ m + n = n + m; from specification nat-basic%fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat% ⊦ ¬ m + n < m; (s) Used terms: n1 + n3, m1, n1 + n4, resize(ar0, (n1 + n4) + m1), n, ar