| # 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, copy(ar1, m0, mkarray(m1), 0, m1), n0, ar0, n2, n
| ⊦ 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, mkarray(m1), m0, copy(ar0, n0, ar1, m0 + n1, n2), m1, n
| ⊦ 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, ar1, n0, ar0, n2, n + m0
| ⊦ 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.