| ⊦ id○(ar0, ar1, n, m) ↔ # ar0 = # ar1 ∧ n + m ≤ # ar0 ∧ subarray(ar0, 0, n) = subarray(ar1, 0, n) ∧ subarray(ar0, n + m, # ar0 - n + m) = subarray(ar1, n + m, # ar0 - n + m) |
¬ ( id○(ar0, ar1, n, m) ↔ # ar0 = # ar1 ∧ n + m ≤ # ar0 ∧ subarray(ar0, 0, n) = subarray(ar1, 0, n) ∧ subarray(ar0, n + m, # ar0 - n + m) = subarray(ar1, n + m, # ar0 - n + m)) ⊦
| ¬ ( id○(ar0, ar1, n, m) ↔ # ar0 = # ar1 ∧ n + m ≤ # ar0 ∧ subarray(ar0, 0, n) = subarray(ar1, 0, n) ∧ subarray(ar0, n + m, # ar0 - n + m) = subarray(ar1, n + m, # ar0 - n + m)) ⊦ |
# ar0 = # ar1, n + m ≤ # ar1 ⊦ (∀ m0. (m0 < n ∨ n + m ≤ m0) ∧ m0 < # ar1 → ar0[m0] = ar1[m0]) ↔ copy(ar0, 0, mkarray(n), 0, n) = copy(ar1, 0, mkarray(n), 0, n) ∧ copy(ar0, n + m, mkarray(# ar1 - n + m), 0, # ar1 - n + m) = copy(ar1, n + m, mkarray(# ar1 - n + m), 0, # ar1 - n + m)
Used simplifier rules: Idexcept-n: ⊦ id○(ar0, ar1, m, n) ↔ # ar0 = # ar1 ∧ m + n ≤ # ar0 ∧ (∀ m0. (m0 < m ∨ m + n ≤ m0) ∧ m0 < # ar0 → ar0[m0] = ar1[m0]); Subarray: ⊦ subarray(ar, m, n) = copy(ar, m, mkarray(n), 0, n);
| # ar0 = # ar1, n + m ≤ # ar1 ⊦ (∀ m0. (m0 < n ∨ n + m ≤ m0) ∧ m0 < # ar1 → ar0[m0] = ar1[m0]) ↔ copy(ar0, 0, mkarray(n), 0, n) = copy(ar1, 0, mkarray(n), 0, n) ∧ copy(ar0, n + m, mkarray(# ar1 - n + m), 0, # ar1 - n + m) = copy(ar1, n + m, mkarray(# ar1 - n + m), 0, # ar1 - n + m) |
# ar0 = # ar1, # ar1 = n0 + n + m, n + m ≤ # ar1 ⊦ (∀ m0. (m0 < n ∨ n + m ≤ m0) ∧ m0 < # ar1 → ar0[m0] = ar1[m0]) ↔ copy(ar0, 0, mkarray(n), 0, n) = copy(ar1, 0, mkarray(n), 0, n) ∧ copy(ar0, n + m, mkarray(n0), 0, n0) = copy(ar1, n + m, mkarray(n0), 0, n0)
Used simplifier rules: n ≤ m ⊦ n0 = m - n ↔ m = n0 + n; (elim) Used terms: # ar1, n + m, n0
| # ar0 = # ar1, # ar1 = n0 + n + m, n + m ≤ # ar1 ⊦ (∀ m0. (m0 < n ∨ n + m ≤ m0) ∧ m0 < # ar1 → ar0[m0] = ar1[m0]) ↔ copy(ar0, 0, mkarray(n), 0, n) = copy(ar1, 0, mkarray(n), 0, n) ∧ copy(ar0, n + m, mkarray(n0), 0, n0) = copy(ar1, n + m, mkarray(n0), 0, n0) |
# ar1 = n0 + n + m, # ar0 = # ar1, n + m ≤ # ar1, ∀ m0. (m0 < n ∨ n + m ≤ m0) ∧ m0 < # ar1 → ar0[m0] = ar1[m0] ⊦ copy(ar0, 0, mkarray(n), 0, n) = copy(ar1, 0, mkarray(n), 0, n) ∧ copy(ar0, n + m, mkarray(n0), 0, n0) = copy(ar1, n + m, mkarray(n0), 0, n0)
# ar1 = n0 + n + m, # ar0 = # ar1, copy(ar0, 0, mkarray(n), 0, n) = copy(ar1, 0, mkarray(n), 0, n), copy(ar0, n + m, mkarray(n0), 0, n0) = copy(ar1, n + m, mkarray(n0), 0, n0), n + m ≤ # ar1 ⊦ ∀ m0. (m0 < n ∨ n + m ≤ m0) ∧ m0 < # ar1 → ar0[m0] = ar1[m0]
| # ar1 = n0 + n + m, # ar0 = # ar1, n + m ≤ # ar1, ∀ m0. (m0 < n ∨ n + m ≤ m0) ∧ m0 < # ar1 → ar0[m0] = ar1[m0] ⊦ copy(ar0, 0, mkarray(n), 0, n) = copy(ar1, 0, mkarray(n), 0, n) ∧ copy(ar0, n + m, mkarray(n0), 0, n0) = copy(ar1, n + m, mkarray(n0), 0, n0) |
# ar0 = # ar1, # ar1 = n0 + n + m, copy(ar0, 0, mkarray(n), 0, n) ≠ copy(ar1, 0, mkarray(n), 0, n), n + m ≤ # ar1, ∀ m0. (m0 < n ∨ n + m ≤ m0) ∧ m0 < # ar1 → ar0[m0] = ar1[m0] ⊦
# ar0 = # ar1, # ar1 = n0 + n + m, copy(ar0, n + m, mkarray(n0), 0, n0) ≠ copy(ar1, n + m, mkarray(n0), 0, n0), n + m ≤ # ar1, ∀ m0. (m0 < n ∨ n + m ≤ m0) ∧ m0 < # ar1 → ar0[m0] = ar1[m0] ⊦
| # ar0 = # ar1, # ar1 = n0 + n + m, copy(ar0, 0, mkarray(n), 0, n) ≠ copy(ar1, 0, mkarray(n), 0, n), n + m ≤ # ar1, ∀ m0. (m0 < n ∨ n + m ≤ m0) ∧ m0 < # ar1 → ar0[m0] = ar1[m0] ⊦ |
⊦ ar1 = ar2 ↔ # ar1 = # ar2 ∧ (∀ n. n < # ar1 → ar1[n] = ar2[n])
# ar1 = n0 + n + m, # ar0 = # ar1, n + m ≤ # ar1, ∀ m0. (m0 < n ∨ n + m ≤ m0) ∧ m0 < # ar1 → ar0[m0] = ar1[m0], # copy(ar0, 0, mkarray(n), 0, n) ≠ # copy(ar1, 0, mkarray(n), 0, n) ∨ (∃ n0. ¬(n0 < # copy(ar0, 0, mkarray(n), 0, n) → copy(ar0, 0, mkarray(n), 0, n)[n0] = copy(ar1, 0, mkarray(n), 0, n)[n0])) ⊦
Used terms: copy(ar1, 0, mkarray(n), 0, n), copy(ar0, 0, mkarray(n), 0, n)
| ⊦ ar1 = ar2 ↔ # ar1 = # ar2 ∧ (∀ n. n < # ar1 → ar1[n] = ar2[n]) |
| # ar1 = n0 + n + m, # ar0 = # ar1, n + m ≤ # ar1, ∀ m0. (m0 < n ∨ n + m ≤ m0) ∧ m0 < # ar1 → ar0[m0] = ar1[m0], # copy(ar0, 0, mkarray(n), 0, n) ≠ # copy(ar1, 0, mkarray(n), 0, n) ∨ (∃ n0. ¬(n0 < # copy(ar0, 0, mkarray(n), 0, n) → copy(ar0, 0, mkarray(n), 0, n)[n0] = copy(ar1, 0, mkarray(n), 0, n)[n0])) ⊦ |
# ar1 = n0 + n + m, # ar0 = # ar1, copy(ar0, 0, mkarray(n), 0, n)[n1] ≠ copy(ar1, 0, mkarray(n), 0, n)[n1], n1 < n, n + m ≤ # ar1, ∀ m0. (m0 < n ∨ n + m ≤ m0) ∧ m0 < # ar1 → ar0[m0] = ar1[m0] ⊦
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)
| # ar1 = n0 + n + m, # ar0 = # ar1, copy(ar0, 0, mkarray(n), 0, n)[n1] ≠ copy(ar1, 0, mkarray(n), 0, n)[n1], n1 < n, n + m ≤ # ar1, ∀ m0. (m0 < n ∨ n + m ≤ m0) ∧ m0 < # ar1 → ar0[m0] = ar1[m0] ⊦ |
⊦ m0 < # ar1 → copy(ar0, n, ar1, n0, m)[m0] = (m0 < n0 ∨ n0 + m ≤ m0 ⊃ ar1[m0];ar0[m0 + n - n0])
# ar0 = # ar1, # ar1 = n0 + n + m, (n1 < 0 ∨ 0 + n ≤ n1 ⊃ mkarray(n)[n1];ar0[n1 + 0 - 0]) ≠ copy(ar1, 0, mkarray(n), 0, n)[n1], n1 < n, n1 < # mkarray(n), n + m ≤ # ar1, ∀ m0. (m0 < n ∨ n + m ≤ m0) ∧ m0 < # ar1 → ar0[m0] = ar1[m0] ⊦
Used simplifier rules: copy-exact: # ar0 = m, # ar1 = m ⊦ copy(ar0, 0, ar1, 0, m) = ar0; ⊦ # mkarray(n) = n; (s) ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ m < n → (n ≤ m ↔ false); (s) Used terms: 0, 0, n, ar0, n1, mkarray(n)
| ⊦ m0 < # ar1 → copy(ar0, n, ar1, n0, m)[m0] = (m0 < n0 ∨ n0 + m ≤ m0 ⊃ ar1[m0];ar0[m0 + n - n0]) |
| # ar0 = # ar1, # ar1 = n0 + n + m, (n1 < 0 ∨ 0 + n ≤ n1 ⊃ mkarray(n)[n1];ar0[n1 + 0 - 0]) ≠ copy(ar1, 0, mkarray(n), 0, n)[n1], n1 < n, n1 < # mkarray(n), n + m ≤ # ar1, ∀ m0. (m0 < n ∨ n + m ≤ m0) ∧ m0 < # ar1 → ar0[m0] = ar1[m0] ⊦ |
# ar1 = n0 + n + m, # ar0 = # ar1, ar0[n1] ≠ ar1[n1], n1 < n, n + m ≤ # ar1, ∀ m0. (m0 < n ∨ n + m ≤ m0) ∧ m0 < # ar1 → ar0[m0] = ar1[m0] ⊦
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) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ n + 0 = n; (s) ⊦ m < n → (n ≤ m ↔ false); (s) ⊦ ¬ n < 0; (s)
| # ar1 = n0 + n + m, # ar0 = # ar1, ar0[n1] ≠ ar1[n1], n1 < n, n + m ≤ # ar1, ∀ m0. (m0 < n ∨ n + m ≤ m0) ∧ m0 < # ar1 → ar0[m0] = ar1[m0] ⊦ |
Used simplifier rules: ⊦ m < n ↔ ¬ n ≤ m; (ss) let: ⊦ n ≤ n0 ∧ n0 ≤ n1 → n ≤ n1; (forward) from specification nat fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic ⊦ m + m0 < n → ¬ n + n0 < m; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: n1
| # ar0 = # ar1, # ar1 = n0 + n + m, copy(ar0, n + m, mkarray(n0), 0, n0) ≠ copy(ar1, n + m, mkarray(n0), 0, n0), n + m ≤ # ar1, ∀ m0. (m0 < n ∨ n + m ≤ m0) ∧ m0 < # ar1 → ar0[m0] = ar1[m0] ⊦ |
⊦ ar1 = ar2 ↔ # ar1 = # ar2 ∧ (∀ n. n < # ar1 → ar1[n] = ar2[n])
# ar1 = n0 + n + m, # ar0 = # ar1, n + m ≤ # ar1, ∀ m0. (m0 < n ∨ n + m ≤ m0) ∧ m0 < # ar1 → ar0[m0] = ar1[m0], # copy(ar0, n + m, mkarray(n0), 0, n0) ≠ # copy(ar1, n + m, mkarray(n0), 0, n0) ∨ (∃ n1. ¬(n1 < # copy(ar0, n + m, mkarray(n0), 0, n0) → copy(ar0, n + m, mkarray(n0), 0, n0)[n1] = copy(ar1, n + m, mkarray(n0), 0, n0)[n1])) ⊦
Used terms: copy(ar1, n + m, mkarray(n0), 0, n0), copy(ar0, n + m, mkarray(n0), 0, n0)
| ⊦ ar1 = ar2 ↔ # ar1 = # ar2 ∧ (∀ n. n < # ar1 → ar1[n] = ar2[n]) |
| # ar1 = n0 + n + m, # ar0 = # ar1, n + m ≤ # ar1, ∀ m0. (m0 < n ∨ n + m ≤ m0) ∧ m0 < # ar1 → ar0[m0] = ar1[m0], # copy(ar0, n + m, mkarray(n0), 0, n0) ≠ # copy(ar1, n + m, mkarray(n0), 0, n0) ∨ (∃ n1. ¬(n1 < # copy(ar0, n + m, mkarray(n0), 0, n0) → copy(ar0, n + m, mkarray(n0), 0, n0)[n1] = copy(ar1, n + m, mkarray(n0), 0, n0)[n1])) ⊦ |
# ar1 = n0 + n + m, # ar0 = # ar1, copy(ar0, n + m, mkarray(n0), 0, n0)[n1] ≠ copy(ar1, n + m, mkarray(n0), 0, n0)[n1], n1 < n0, n + m ≤ # ar1, ∀ m0. (m0 < n ∨ n + m ≤ m0) ∧ m0 < # ar1 → ar0[m0] = ar1[m0] ⊦
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)
| # ar1 = n0 + n + m, # ar0 = # ar1, copy(ar0, n + m, mkarray(n0), 0, n0)[n1] ≠ copy(ar1, n + m, mkarray(n0), 0, n0)[n1], n1 < n0, n + m ≤ # ar1, ∀ m0. (m0 < n ∨ n + m ≤ m0) ∧ m0 < # ar1 → ar0[m0] = ar1[m0] ⊦ |
⊦ m0 < # ar1 → copy(ar0, n, ar1, n0, m)[m0] = (m0 < n0 ∨ n0 + m ≤ m0 ⊃ ar1[m0];ar0[m0 + n - n0])
# ar0 = # ar1, # ar1 = n0 + n + m, (n1 < 0 ∨ 0 + n0 ≤ n1 ⊃ mkarray(n0)[n1];ar0[n1 + n + m - 0]) ≠ copy(ar1, n + m, mkarray(n0), 0, n0)[n1], n1 < n0, n1 < # mkarray(n0), n + m ≤ # ar1, ∀ m0. (m0 < n ∨ n + m ≤ m0) ∧ m0 < # ar1 → ar0[m0] = ar1[m0] ⊦
Used simplifier rules: ⊦ # mkarray(n) = n; (s) ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ m < n → (n ≤ m ↔ false); (s) Used terms: 0, n + m, n0, ar0, n1, mkarray(n0)
| ⊦ m0 < # ar1 → copy(ar0, n, ar1, n0, m)[m0] = (m0 < n0 ∨ n0 + m ≤ m0 ⊃ ar1[m0];ar0[m0 + n - n0]) |
| # ar0 = # ar1, # ar1 = n0 + n + m, (n1 < 0 ∨ 0 + n0 ≤ n1 ⊃ mkarray(n0)[n1];ar0[n1 + n + m - 0]) ≠ copy(ar1, n + m, mkarray(n0), 0, n0)[n1], n1 < n0, n1 < # mkarray(n0), n + m ≤ # ar1, ∀ m0. (m0 < n ∨ n + m ≤ m0) ∧ m0 < # ar1 → ar0[m0] = ar1[m0] ⊦ |
# ar1 = n0 + n + m, # ar0 = # ar1, ar0[n1 + n + m] ≠ ar1[n1 + n + m], n1 < n0, n + m ≤ # ar1, ∀ m0. (m0 < n ∨ n + m ≤ m0) ∧ m0 < # ar1 → ar0[m0] = ar1[m0] ⊦
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)
| # ar1 = n0 + n + m, # ar0 = # ar1, ar0[n1 + n + m] ≠ ar1[n1 + n + m], n1 < n0, n + m ≤ # ar1, ∀ m0. (m0 < n ∨ n + m ≤ m0) ∧ m0 < # ar1 → ar0[m0] = ar1[m0] ⊦ |
Used simplifier rules: ⊦ ¬ m + n < m; (s) ⊦ m + n ≤ m + n0 ↔ n ≤ n0; (s) ⊦ m ≤ m + n; (s) ⊦ m = m0 + n0 ∧ n < n0 → m0 + n < m; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: n1 + n + m
| # ar1 = n0 + n + m, # ar0 = # ar1, copy(ar0, 0, mkarray(n), 0, n) = copy(ar1, 0, mkarray(n), 0, n), copy(ar0, n + m, mkarray(n0), 0, n0) = copy(ar1, n + m, mkarray(n0), 0, n0), n + m ≤ # ar1 ⊦ ∀ m0. (m0 < n ∨ n + m ≤ m0) ∧ m0 < # ar1 → ar0[m0] = ar1[m0] |
# ar1 = n0 + n + m, # ar0 = # ar1, copy(ar0, 0, mkarray(n), 0, n) = copy(ar1, 0, mkarray(n), 0, n), copy(ar0, n + m, mkarray(n0), 0, n0) = copy(ar1, n + m, mkarray(n0), 0, n0), ar0[m0] ≠ ar1[m0], m0 < # ar1, n + m ≤ # ar1, m0 < n ∨ n + m ≤ m0 ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| # ar1 = n0 + n + m, # ar0 = # ar1, copy(ar0, 0, mkarray(n), 0, n) = copy(ar1, 0, mkarray(n), 0, n), copy(ar0, n + m, mkarray(n0), 0, n0) = copy(ar1, n + m, mkarray(n0), 0, n0), ar0[m0] ≠ ar1[m0], m0 < # ar1, n + m ≤ # ar1, m0 < n ∨ n + m ≤ m0 ⊦ |
# ar0 = # ar1, # ar1 = n0 + n + m, copy(ar0, n + m, mkarray(n0), 0, n0) = copy(ar1, n + m, mkarray(n0), 0, n0), copy(ar0, 0, mkarray(n), 0, n) = copy(ar1, 0, mkarray(n), 0, n), ar0[m0] ≠ ar1[m0], m0 < # ar1, m0 < n, n + m ≤ # ar1 ⊦
# ar0 = # ar1, # ar1 = n0 + n + m, copy(ar0, n + m, mkarray(n0), 0, n0) = copy(ar1, n + m, mkarray(n0), 0, n0), copy(ar0, 0, mkarray(n), 0, n) = copy(ar1, 0, mkarray(n), 0, n), ar0[m0] ≠ ar1[m0], m0 < # ar1, n + m ≤ # ar1, n + m ≤ m0 ⊦
| # ar0 = # ar1, # ar1 = n0 + n + m, copy(ar0, n + m, mkarray(n0), 0, n0) = copy(ar1, n + m, mkarray(n0), 0, n0), copy(ar0, 0, mkarray(n), 0, n) = copy(ar1, 0, mkarray(n), 0, n), ar0[m0] ≠ ar1[m0], m0 < # ar1, m0 < n, n + m ≤ # ar1 ⊦ |
⊦ ar1 = ar2 ↔ # ar1 = # ar2 ∧ (∀ n. n < # ar1 → ar1[n] = ar2[n])
# copy(ar0, 0, mkarray(n), 0, n) = # copy(ar1, 0, mkarray(n), 0, n), # ar1 = n0 + n + m, # ar0 = # ar1, copy(ar0, n + m, mkarray(n0), 0, n0) = copy(ar1, n + m, mkarray(n0), 0, n0), ar0[m0] ≠ ar1[m0], m0 < n, m0 < # ar1, n + m ≤ # ar1, ∀ n0. n0 < # copy(ar0, 0, mkarray(n), 0, n) → copy(ar0, 0, mkarray(n), 0, n)[n0] = copy(ar1, 0, mkarray(n), 0, n)[n0] ⊦
Used terms: copy(ar1, 0, mkarray(n), 0, n), copy(ar0, 0, mkarray(n), 0, n)
| ⊦ ar1 = ar2 ↔ # ar1 = # ar2 ∧ (∀ n. n < # ar1 → ar1[n] = ar2[n]) |
| # copy(ar0, 0, mkarray(n), 0, n) = # copy(ar1, 0, mkarray(n), 0, n), # ar1 = n0 + n + m, # ar0 = # ar1, copy(ar0, n + m, mkarray(n0), 0, n0) = copy(ar1, n + m, mkarray(n0), 0, n0), ar0[m0] ≠ ar1[m0], m0 < n, m0 < # ar1, n + m ≤ # ar1, ∀ n0. n0 < # copy(ar0, 0, mkarray(n), 0, n) → copy(ar0, 0, mkarray(n), 0, n)[n0] = copy(ar1, 0, mkarray(n), 0, n)[n0] ⊦ |
# ar1 = n0 + n + m, # ar0 = # ar1, copy(ar0, n + m, mkarray(n0), 0, n0) = copy(ar1, n + m, mkarray(n0), 0, n0), ar0[m0] ≠ ar1[m0], m0 < n, m0 < # ar1, n + m ≤ # ar1, ∀ n1. n1 < n → copy(ar0, 0, mkarray(n), 0, n)[n1] = copy(ar1, 0, mkarray(n), 0, n)[n1] ⊦
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)
| # ar1 = n0 + n + m, # ar0 = # ar1, copy(ar0, n + m, mkarray(n0), 0, n0) = copy(ar1, n + m, mkarray(n0), 0, n0), ar0[m0] ≠ ar1[m0], m0 < n, m0 < # ar1, n + m ≤ # ar1, ∀ n1. n1 < n → copy(ar0, 0, mkarray(n), 0, n)[n1] = copy(ar1, 0, mkarray(n), 0, n)[n1] ⊦ |
# ar0 = # ar1, # ar1 = n0 + n + m, copy(ar0, n + m, mkarray(n0), 0, n0) = copy(ar1, n + m, mkarray(n0), 0, n0), ar0[m0] ≠ ar1[m0], m0 < # ar1, m0 < n, n + m ≤ # ar1, m0 < n → copy(ar0, 0, mkarray(n), 0, n)[m0] = copy(ar1, 0, mkarray(n), 0, n)[m0] ⊦
Used terms: m0
| # ar0 = # ar1, # ar1 = n0 + n + m, copy(ar0, n + m, mkarray(n0), 0, n0) = copy(ar1, n + m, mkarray(n0), 0, n0), ar0[m0] ≠ ar1[m0], m0 < # ar1, m0 < n, n + m ≤ # ar1, m0 < n → copy(ar0, 0, mkarray(n), 0, n)[m0] = copy(ar1, 0, mkarray(n), 0, n)[m0] ⊦ |
# ar1 = n0 + n + m, # ar0 = # ar1, copy(ar0, 0, mkarray(n), 0, n)[m0] = copy(ar1, 0, mkarray(n), 0, n)[m0], copy(ar0, n + m, mkarray(n0), 0, n0) = copy(ar1, n + m, mkarray(n0), 0, n0), ar0[m0] ≠ ar1[m0], m0 < n, m0 < # ar1, n + m ≤ # ar1 ⊦
| # ar1 = n0 + n + m, # ar0 = # ar1, copy(ar0, 0, mkarray(n), 0, n)[m0] = copy(ar1, 0, mkarray(n), 0, n)[m0], copy(ar0, n + m, mkarray(n0), 0, n0) = copy(ar1, n + m, mkarray(n0), 0, n0), ar0[m0] ≠ ar1[m0], m0 < n, m0 < # ar1, n + m ≤ # ar1 ⊦ |
⊦ m0 < # ar1 → copy(ar0, n, ar1, n0, m)[m0] = (m0 < n0 ∨ n0 + m ≤ m0 ⊃ ar1[m0];ar0[m0 + n - n0])
Used simplifier rules: copy-exact: # ar0 = m, # ar1 = m ⊦ copy(ar0, 0, ar1, 0, m) = ar0; at-copy: ⊦ m0 < # ar1 → copy(ar0, n, ar1, n0, m)[m0] = (m0 < n0 ∨ n0 + m ≤ m0 ⊃ ar1[m0];ar0[m0 + n - n0]); ⊦ ¬ n < 0; (s) ⊦ m < n → (n ≤ m ↔ false); (s) ⊦ n + 0 = n; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ m - 0 = m; (s) ⊦ # mkarray(n) = n; (s) ⊦ m < n ↔ ¬ n ≤ m; (ss) Used terms: 0, 0, n, ar0, m0, mkarray(n)
| ⊦ m0 < # ar1 → copy(ar0, n, ar1, n0, m)[m0] = (m0 < n0 ∨ n0 + m ≤ m0 ⊃ ar1[m0];ar0[m0 + n - n0]) |
| # ar0 = # ar1, # ar1 = n0 + n + m, copy(ar0, n + m, mkarray(n0), 0, n0) = copy(ar1, n + m, mkarray(n0), 0, n0), copy(ar0, 0, mkarray(n), 0, n) = copy(ar1, 0, mkarray(n), 0, n), ar0[m0] ≠ ar1[m0], m0 < # ar1, n + m ≤ # ar1, n + m ≤ m0 ⊦ |
# ar1 = n0 + n + m, # ar0 = # ar1, copy(ar0, 0, mkarray(n), 0, n) = copy(ar1, 0, mkarray(n), 0, n), copy(ar0, n + m, mkarray(n0), 0, n0) = copy(ar1, n + m, mkarray(n0), 0, n0), ar0[m0] ≠ ar1[m0], n0 ≠ 0, m0 < # ar1, n + m < # ar1, n + m ≤ m0 ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m < m + n ↔ n ≠ 0; (s) ⊦ m + n < m + n0 ↔ n < n0; (s) lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic ⊦ m < n → m ≤ n; (s) fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat
| # ar1 = n0 + n + m, # ar0 = # ar1, copy(ar0, 0, mkarray(n), 0, n) = copy(ar1, 0, mkarray(n), 0, n), copy(ar0, n + m, mkarray(n0), 0, n0) = copy(ar1, n + m, mkarray(n0), 0, n0), ar0[m0] ≠ ar1[m0], n0 ≠ 0, m0 < # ar1, n + m < # ar1, n + m ≤ m0 ⊦ |
⊦ ar1 = ar2 ↔ # ar1 = # ar2 ∧ (∀ n. n < # ar1 → ar1[n] = ar2[n])
# copy(ar0, n + m, mkarray(n0), 0, n0) = # copy(ar1, n + m, mkarray(n0), 0, n0), # ar0 = # ar1, # ar1 = n0 + n + m, copy(ar0, 0, mkarray(n), 0, n) = copy(ar1, 0, mkarray(n), 0, n), ar0[m0] ≠ ar1[m0], n0 ≠ 0, n + m < # ar1, m0 < # ar1, n + m ≤ m0, ∀ n1. n1 < # copy(ar0, n + m, mkarray(n0), 0, n0) → copy(ar0, n + m, mkarray(n0), 0, n0)[n1] = copy(ar1, n + m, mkarray(n0), 0, n0)[n1] ⊦
Used terms: copy(ar1, n + m, mkarray(n0), 0, n0), copy(ar0, n + m, mkarray(n0), 0, n0)
| ⊦ ar1 = ar2 ↔ # ar1 = # ar2 ∧ (∀ n. n < # ar1 → ar1[n] = ar2[n]) |
| # copy(ar0, n + m, mkarray(n0), 0, n0) = # copy(ar1, n + m, mkarray(n0), 0, n0), # ar0 = # ar1, # ar1 = n0 + n + m, copy(ar0, 0, mkarray(n), 0, n) = copy(ar1, 0, mkarray(n), 0, n), ar0[m0] ≠ ar1[m0], n0 ≠ 0, n + m < # ar1, m0 < # ar1, n + m ≤ m0, ∀ n1. n1 < # copy(ar0, n + m, mkarray(n0), 0, n0) → copy(ar0, n + m, mkarray(n0), 0, n0)[n1] = copy(ar1, n + m, mkarray(n0), 0, n0)[n1] ⊦ |
# ar1 = n0 + n + m, # ar0 = # ar1, copy(ar0, 0, mkarray(n), 0, n) = copy(ar1, 0, mkarray(n), 0, n), ar0[m0] ≠ ar1[m0], n0 ≠ 0, m0 < # ar1, n + m < # ar1, n + m ≤ m0, ∀ n1. n1 < n0 → copy(ar0, n + m, mkarray(n0), 0, n0)[n1] = copy(ar1, n + m, mkarray(n0), 0, n0)[n1] ⊦
Used simplifier rules: size-copy: ⊦ # copy(ar, m, ar0, m0, n) = # ar0; ⊦ # mkarray(n) = n; (s)
| # ar1 = n0 + n + m, # ar0 = # ar1, copy(ar0, 0, mkarray(n), 0, n) = copy(ar1, 0, mkarray(n), 0, n), ar0[m0] ≠ ar1[m0], n0 ≠ 0, m0 < # ar1, n + m < # ar1, n + m ≤ m0, ∀ n1. n1 < n0 → copy(ar0, n + m, mkarray(n0), 0, n0)[n1] = copy(ar1, n + m, mkarray(n0), 0, n0)[n1] ⊦ |
# ar0 = # ar1, # ar1 = n0 + n + m, copy(ar0, 0, mkarray(n), 0, n) = copy(ar1, 0, mkarray(n), 0, n), ar0[m0] ≠ ar1[m0], n0 ≠ 0, n + m < # ar1, m0 < # ar1, n + m ≤ m0, m0 - n + m < n0 → copy(ar0, n + m, mkarray(n0), 0, n0)[m0 - n + m] = copy(ar1, n + m, mkarray(n0), 0, n0)[m0 - n + m] ⊦
Used terms: m0 - n + m
| # ar0 = # ar1, # ar1 = n0 + n + m, copy(ar0, 0, mkarray(n), 0, n) = copy(ar1, 0, mkarray(n), 0, n), ar0[m0] ≠ ar1[m0], n0 ≠ 0, n + m < # ar1, m0 < # ar1, n + m ≤ m0, m0 - n + m < n0 → copy(ar0, n + m, mkarray(n0), 0, n0)[m0 - n + m] = copy(ar1, n + m, mkarray(n0), 0, n0)[m0 - n + m] ⊦ |
# ar0 = # ar1, # ar1 = n0 + n + m, copy(ar0, n + m, mkarray(n0), 0, n0)[m0 - n + m] = copy(ar1, n + m, mkarray(n0), 0, n0)[m0 - n + m], copy(ar0, 0, mkarray(n), 0, n) = copy(ar1, 0, mkarray(n), 0, n), ar0[m0] ≠ ar1[m0], n0 ≠ 0, n + m < # ar1, m0 < # ar1, n + m ≤ m0 ⊦
Used simplifier rules: n0 ≤ n ⊦ n - n0 < m ↔ n < m + n0; (s) ⊦ m ≤ n → (n < m ↔ false); (s) ⊦ m ≤ n ↔ ¬ n < m; (ss)
| # ar0 = # ar1, # ar1 = n0 + n + m, copy(ar0, n + m, mkarray(n0), 0, n0)[m0 - n + m] = copy(ar1, n + m, mkarray(n0), 0, n0)[m0 - n + m], copy(ar0, 0, mkarray(n), 0, n) = copy(ar1, 0, mkarray(n), 0, n), ar0[m0] ≠ ar1[m0], n0 ≠ 0, n + m < # ar1, m0 < # ar1, n + m ≤ m0 ⊦ |
# ar1 = n0 + n + m, # ar0 = # ar1, copy(ar0, n + m, mkarray(n0), 0, n0)[n1] = copy(ar1, n + m, mkarray(n0), 0, n0)[n1], copy(ar0, 0, mkarray(n), 0, n) = copy(ar1, 0, mkarray(n), 0, n), m0 = n1 + n + m, ar0[m0] ≠ ar1[m0], n0 ≠ 0, m0 < # ar1, n + m < # ar1, n + m ≤ m0 ⊦
Used simplifier rules: n ≤ m ⊦ n0 = m - n ↔ m = n0 + n; (elim) Used terms: m0, n + m, n1
| # ar1 = n0 + n + m, # ar0 = # ar1, copy(ar0, n + m, mkarray(n0), 0, n0)[n1] = copy(ar1, n + m, mkarray(n0), 0, n0)[n1], copy(ar0, 0, mkarray(n), 0, n) = copy(ar1, 0, mkarray(n), 0, n), m0 = n1 + n + m, ar0[m0] ≠ ar1[m0], n0 ≠ 0, m0 < # ar1, n + m < # ar1, n + m ≤ m0 ⊦ |
# ar0 = # ar1, # ar1 = n0 + n + m, copy(ar0, n + m, mkarray(n0), 0, n0)[n1] = copy(ar1, n + m, mkarray(n0), 0, n0)[n1], copy(ar0, 0, mkarray(n), 0, n) = copy(ar1, 0, mkarray(n), 0, n), ar0[n1 + n + m] ≠ ar1[n1 + n + m], n1 < n0, n + m < # ar1 ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m = m0 + n0 ∧ n < n0 → m0 + n < m; (s) ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ m + n < m + n0 ↔ n < n0; (s) lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic ⊦ m ≤ m + n; (s) ⊦ m + n ≤ m + n0 ↔ n ≤ n0; (s)
| # ar0 = # ar1, # ar1 = n0 + n + m, copy(ar0, n + m, mkarray(n0), 0, n0)[n1] = copy(ar1, n + m, mkarray(n0), 0, n0)[n1], copy(ar0, 0, mkarray(n), 0, n) = copy(ar1, 0, mkarray(n), 0, n), ar0[n1 + n + m] ≠ ar1[n1 + n + m], n1 < n0, n + m < # ar1 ⊦ |
⊦ m0 < # ar1 → copy(ar0, n, ar1, n0, m)[m0] = (m0 < n0 ∨ n0 + m ≤ m0 ⊃ ar1[m0];ar0[m0 + n - n0])
Used simplifier rules: copy-exact: # ar0 = m, # ar1 = m ⊦ copy(ar0, 0, ar1, 0, m) = ar0; at-copy: ⊦ m0 < # ar1 → copy(ar0, n, ar1, n0, m)[m0] = (m0 < n0 ∨ n0 + m ≤ m0 ⊃ ar1[m0];ar0[m0 + n - n0]); copy-exact: # ar0 = m, # ar1 = m ⊦ copy(ar0, 0, ar1, 0, m) = ar0; ⊦ # mkarray(n) = n; (s) ⊦ ¬ n < 0; (s) ⊦ n + 0 = n; (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 ↔ false); (s) ⊦ m - 0 = m; (s) ⊦ m < n ↔ ¬ n ≤ m; (ss) Used terms: 0, n + m, n0, ar0, n1, mkarray(n0)
| ⊦ 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.