| ⊦ 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, mkarray(n), n, n1, ar0
| ⊦ 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, mkarray(n0), n0, n1, ar0
| ⊦ 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, mkarray(n), n, m0, ar0
| ⊦ 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, mkarray(n0), n0, n1, 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.