| n < n1 + n2, # ar1 < n1 + n2, n < n2 + n1, n < max(# ar1, n1 + m0), n2 ≤ m0 ⊦ splice(ar0, n0, ar1, n1, m0)[n] = (n < n1 ⊃ (# ar1 ≤ n ⊃ zero;ar1[n]);ar0[n + n0 - n1]), m0 = 0, n2 = 0, n1 + m0 ≤ # ar1 ∧ m0 ≠ 0 |
⊦ # ar1 < n1 + m ∧ m ≠ 0 → splice(ar0, n0, ar1, n1, m) = copy(ar0, n0, resize(ar1, n1 + m), n1, m)
n < n1 + m0, # ar1 < n1 + m0, n < n1 + n2, # ar1 < n1 + n2, n < n2 + n1, n2 ≤ m0 ⊦ copy(ar0, n0, resize(ar1, n1 + m0), n1, m0)[n] = (n < n1 ⊃ (# ar1 ≤ n ⊃ zero;ar1[n]);ar0[n + n0 - n1]), m0 = 0, n2 = 0
Used simplifier rules: splice-resize: ⊦ # ar1 < n1 + m ∧ m ≠ 0 → splice(ar0, n0, ar1, n1, m) = copy(ar0, n0, resize(ar1, n1 + m), n1, m);% ⊦ m < n → n ≠ 0; (s)%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic% ⊦ n < m → max(n, m) = m; (s)%c: ⊦ m + n = n + m; from specification nat-basic%a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic% ⊦ m ≤ n ↔ ¬ n < m; (ss)