| # ar1 ≥ m0 + m1 ⊦ copy(ar0, n0, subarray(ar1, m0, m1), n1, n2) = subarray(copy(ar0, n0, ar1, m0 + n1, n2), m0, m1) |
copy(ar0, n0, subarray(ar1, m0, m1), n1, n2) ≠ subarray(copy(ar0, n0, ar1, m0 + n1, n2), m0, m1), # ar1 ≥ m0 + m1 ⊦
| copy(ar0, n0, subarray(ar1, m0, m1), n1, n2) ≠ subarray(copy(ar0, n0, ar1, m0 + n1, n2), m0, m1), # ar1 ≥ m0 + m1 ⊦ |
copy(ar0, n0, copy(ar1, m0, mkarray(m1), 0, m1), n1, n2) ≠ copy(copy(ar0, n0, ar1, m0 + n1, n2), m0, mkarray(m1), 0, m1), m0 + m1 ≤ # ar1 ⊦
Used simplifier rules: Subarray: ⊦ subarray(ar, m, n) = copy(ar, m, mkarray(n), 0, n); ⊦ n ≥ m ↔ m ≤ n; (s)
| copy(ar0, n0, copy(ar1, m0, mkarray(m1), 0, m1), n1, n2) ≠ copy(copy(ar0, n0, ar1, m0 + n1, n2), m0, mkarray(m1), 0, m1), m0 + m1 ≤ # ar1 ⊦ |
⊦ ar1 = ar2 ↔ # ar1 = # ar2 ∧ (∀ n. n < # ar1 → ar1[n] = ar2[n])
m0 + m1 ≤ # ar1, # copy(ar0, n0, copy(ar1, m0, mkarray(m1), 0, m1), n1, n2) ≠ # copy(copy(ar0, n0, ar1, m0 + n1, n2), m0, mkarray(m1), 0, m1) ∨ (∃ n. ¬ ( n < # copy(ar0, n0, copy(ar1, m0, mkarray(m1), 0, m1), n1, n2) → copy(ar0, n0, copy(ar1, m0, mkarray(m1), 0, m1), n1, n2)[n] = copy(copy(ar0, n0, ar1, m0 + n1, n2), m0, mkarray(m1), 0, m1)[n])) ⊦
Used terms: copy(copy(ar0, n0, ar1, m0 + n1, n2), m0, mkarray(m1), 0, m1), copy(ar0, n0, copy(ar1, m0, mkarray(m1), 0, m1), n1, n2)
| ⊦ ar1 = ar2 ↔ # ar1 = # ar2 ∧ (∀ n. n < # ar1 → ar1[n] = ar2[n]) |
| m0 + m1 ≤ # ar1, # copy(ar0, n0, copy(ar1, m0, mkarray(m1), 0, m1), n1, n2) ≠ # copy(copy(ar0, n0, ar1, m0 + n1, n2), m0, mkarray(m1), 0, m1) ∨ (∃ n. ¬ ( n < # copy(ar0, n0, copy(ar1, m0, mkarray(m1), 0, m1), n1, n2) → copy(ar0, n0, copy(ar1, m0, mkarray(m1), 0, m1), n1, n2)[n] = copy(copy(ar0, n0, ar1, m0 + n1, n2), m0, mkarray(m1), 0, m1)[n])) ⊦ |
copy(ar0, n0, copy(ar1, m0, mkarray(m1), 0, m1), n1, n2)[n] ≠ copy(copy(ar0, n0, ar1, m0 + n1, n2), m0, mkarray(m1), 0, m1)[n], n < m1, m0 + m1 ≤ # ar1 ⊦
Used simplifier rules: size-copy: ⊦ # copy(ar, m, ar0, m0, n) = # ar0; ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ # mkarray(n) = n; (s)
| copy(ar0, n0, copy(ar1, m0, mkarray(m1), 0, m1), n1, n2)[n] ≠ copy(copy(ar0, n0, ar1, m0 + n1, n2), m0, mkarray(m1), 0, m1)[n], n < m1, m0 + m1 ≤ # ar1 ⊦ |
⊦ m0 < # ar1 → copy(ar0, n, ar1, n0, m)[m0] = (m0 < n0 ∨ n0 + m ≤ m0 ⊃ ar1[m0];ar0[m0 + n - n0])
(n < n1 ∨ n1 + n2 ≤ n ⊃ copy(ar1, m0, mkarray(m1), 0, m1)[n];ar0[n + n0 - n1]) ≠ copy(copy(ar0, n0, ar1, m0 + n1, n2), m0, mkarray(m1), 0, m1)[n], n < m1, n < # copy(ar1, m0, mkarray(m1), 0, m1), m0 + m1 ≤ # ar1 ⊦
Used simplifier rules: size-copy: ⊦ # copy(ar, m, ar0, m0, n) = # ar0; ⊦ # mkarray(n) = n; (s) ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ m < n → (n ≤ m ↔ false); (s) Used terms: n1, n0, copy(ar1, m0, mkarray(m1), 0, m1), n2, n, ar0
| ⊦ m0 < # ar1 → copy(ar0, n, ar1, n0, m)[m0] = (m0 < n0 ∨ n0 + m ≤ m0 ⊃ ar1[m0];ar0[m0 + n - n0]) |
| (n < n1 ∨ n1 + n2 ≤ n ⊃ copy(ar1, m0, mkarray(m1), 0, m1)[n];ar0[n + n0 - n1]) ≠ copy(copy(ar0, n0, ar1, m0 + n1, n2), m0, mkarray(m1), 0, m1)[n], n < m1, n < # copy(ar1, m0, mkarray(m1), 0, m1), m0 + m1 ≤ # ar1 ⊦ |
(n < n1 ∨ n1 + n2 ≤ n ⊃ copy(ar1, m0, mkarray(m1), 0, m1)[n];ar0[n + n0 - n1]) ≠ copy(copy(ar0, n0, ar1, m0 + n1, n2), m0, mkarray(m1), 0, m1)[n], n < m1, m0 + m1 ≤ # ar1 ⊦
Used simplifier rules: size-copy: ⊦ # copy(ar, m, ar0, m0, n) = # ar0; ⊦ # mkarray(n) = n; (s)
| (n < n1 ∨ n1 + n2 ≤ n ⊃ copy(ar1, m0, mkarray(m1), 0, m1)[n];ar0[n + n0 - n1]) ≠ copy(copy(ar0, n0, ar1, m0 + n1, n2), m0, mkarray(m1), 0, m1)[n], n < m1, m0 + m1 ≤ # ar1 ⊦ |
⊦ m0 < # ar1 → copy(ar0, n, ar1, n0, m)[m0] = (m0 < n0 ∨ n0 + m ≤ m0 ⊃ ar1[m0];ar0[m0 + n - n0])
(n < n1 ∨ n1 + n2 ≤ n ⊃ copy(ar1, m0, mkarray(m1), 0, m1)[n];ar0[n + n0 - n1]) ≠ (n < 0 ∨ 0 + m1 ≤ n ⊃ mkarray(m1)[n];copy(ar0, n0, ar1, m0 + n1, n2)[n + m0 - 0]), n < m1, n < # mkarray(m1), m0 + m1 ≤ # ar1 ⊦
Used simplifier rules: ⊦ # mkarray(n) = n; (s) ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ m < n → (n ≤ m ↔ false); (s) Used terms: 0, m0, mkarray(m1), m1, n, copy(ar0, n0, ar1, m0 + n1, n2)
| ⊦ m0 < # ar1 → copy(ar0, n, ar1, n0, m)[m0] = (m0 < n0 ∨ n0 + m ≤ m0 ⊃ ar1[m0];ar0[m0 + n - n0]) |
| (n < n1 ∨ n1 + n2 ≤ n ⊃ copy(ar1, m0, mkarray(m1), 0, m1)[n];ar0[n + n0 - n1]) ≠ (n < 0 ∨ 0 + m1 ≤ n ⊃ mkarray(m1)[n];copy(ar0, n0, ar1, m0 + n1, n2)[n + m0 - 0]), n < m1, n < # mkarray(m1), m0 + m1 ≤ # ar1 ⊦ |
(n < n1 ∨ n1 + n2 ≤ n ⊃ ar1[n + m0];ar0[n + n0 - n1]) ≠ copy(ar0, n0, ar1, m0 + n1, n2)[n + m0], n < m1, m0 + m1 ≤ # ar1 ⊦
Used simplifier rules: at-copy: ⊦ m0 < # ar1 → copy(ar0, n, ar1, n0, m)[m0] = (m0 < n0 ∨ n0 + m ≤ m0 ⊃ ar1[m0];ar0[m0 + n - n0]); ⊦ # mkarray(n) = n; (s) ⊦ m - 0 = m; (s) ⊦ m < n → (n ≤ m ↔ false); (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ n + 0 = n; (s) ⊦ ¬ n < 0; (s)
| (n < n1 ∨ n1 + n2 ≤ n ⊃ ar1[n + m0];ar0[n + n0 - n1]) ≠ copy(ar0, n0, ar1, m0 + n1, n2)[n + m0], n < m1, m0 + m1 ≤ # ar1 ⊦ |
⊦ m0 < # ar1 → copy(ar0, n, ar1, n0, m)[m0] = (m0 < n0 ∨ n0 + m ≤ m0 ⊃ ar1[m0];ar0[m0 + n - n0])
Used simplifier rules: ⊦ m + n < m + n0 ↔ n < n0; (s) ⊦ m + n ≤ m + n0 ↔ n ≤ n0; (s) ⊦ m + n - n + n1 = m - n1; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ m < n ↔ ¬ n ≤ m; (ss) let: ⊦ n ≤ n0 ∧ n0 ≤ n1 → n ≤ n1; (forward) from specification nat ⊦ m < n → (n ≤ m ↔ false); (s) Used terms: m0 + n1, n0, ar1, n2, n + m0, ar0
| ⊦ m0 < # ar1 → copy(ar0, n, ar1, n0, m)[m0] = (m0 < n0 ∨ n0 + m ≤ m0 ⊃ ar1[m0];ar0[m0 + n - n0]) |
The following image shows the proof tree of sequent calculus. The proved goal is at the bottom. You can click on the nodes to view additional rules. See here for details on colors in a proof tree.