| ⊦ x0 < a + x ↔ x0 = x ∨ x0 < x |
¬(x0 < a + x ↔ x0 = x ∨ x0 < x) ⊦
| ¬(x0 < a + x ↔ x0 = x ∨ x0 < x) ⊦ |
⊦ a + ar = copy(ar, 0, mkarray(# ar + 1), 1, # ar)[0 := a]
¬(x0 < copy(x, 0, mkarray(# x + 1), 1, # x)[0 := a] ↔ x0 = x ∨ x0 < x) ⊦
Used terms: a, x
| ⊦ a + ar = copy(ar, 0, mkarray(# ar + 1), 1, # ar)[0 := a] |
| ¬(x0 < copy(x, 0, mkarray(# x + 1), 1, # x)[0 := a] ↔ x0 = x ∨ x0 < x) ⊦ |
x0 = x, ¬(x0 < copy(x, 0, mkarray(# x + 1), 1, # x)[0 := a] ↔ x0 = x ∨ x0 < x) ⊦
¬(x0 < copy(x, 0, mkarray(# x + 1), 1, # x)[0 := a] ↔ x0 = x ∨ x0 < x), x0 ≠ x ⊦
Used formulas: x0 = x
| x0 = x, ¬(x0 < copy(x, 0, mkarray(# x + 1), 1, # x)[0 := a] ↔ x0 = x ∨ x0 < x) ⊦ |
¬ x < copy(x, 0, mkarray(# x + 1), 1, # x)[0 := a] ⊦
| ¬ x < copy(x, 0, mkarray(# x + 1), 1, # x)[0 := a] ⊦ |
⊦ ar0 < ar1 ↔ # ar0 < # ar1 ∧ ar0 = subarray(ar1, # ar1 - # ar0, # ar0)
Used simplifier rules: ⊦ m < n + 1 ↔ ¬ n < m; (s) ⊦ # ar[n := a] = # ar; (s) ⊦ # copy(ar, m, ar0, m0, n) = # ar0; (s) ⊦ m + n - m = n; (s) n < n0 ⊦ subarray(ar[n := a], n0, n1) = subarray(ar, n0, n1); (s) ⊦ # mkarray(n) = n; (s) ⊦ m + n ≤ m + n0 ↔ n ≤ n0; (s) ⊦ m ≤ n ↔ ¬ n < m; (ss) ⊦ ¬ n < n; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic m1 + n ≤ # ar1 ⊦ subarray(copy(ar0, m0, ar1, m1, n), m1, n) = subarray(ar0, m0, n); (s) # ar = n ⊦ subarray(ar, 0, n) = ar; (s) Used terms: x, copy(x, 0, mkarray(# x + 1), 1, # x)[0 := a]
| ⊦ ar0 < ar1 ↔ # ar0 < # ar1 ∧ ar0 = subarray(ar1, # ar1 - # ar0, # ar0) |
| ¬(x0 < copy(x, 0, mkarray(# x + 1), 1, # x)[0 := a] ↔ x0 = x ∨ x0 < x), x0 ≠ x ⊦ |
¬(x0 < copy(x, 0, mkarray(# x + 1), 1, # x)[0 := a] ↔ x0 < x), x0 ≠ x ⊦
| ¬(x0 < copy(x, 0, mkarray(# x + 1), 1, # x)[0 := a] ↔ x0 < x), x0 ≠ x ⊦ |
⊦ ar0 < ar1 ↔ # ar0 < # ar1 ∧ ar0 = subarray(ar1, # ar1 - # ar0, # ar0)
¬ ( # x0 < # copy(x, 0, mkarray(# x + 1), 1, # x)[0 := a] ∧ x0 = subarray(copy(x, 0, mkarray(# x + 1), 1, # x)[0 := a], # copy(x, 0, mkarray(# x + 1), 1, # x)[0 := a] - # x0, # x0) ↔ x0 < x), x0 ≠ x ⊦
Used terms: x0, copy(x, 0, mkarray(# x + 1), 1, # x)[0 := a]
| ⊦ ar0 < ar1 ↔ # ar0 < # ar1 ∧ ar0 = subarray(ar1, # ar1 - # ar0, # ar0) |
| ¬ ( # x0 < # copy(x, 0, mkarray(# x + 1), 1, # x)[0 := a] ∧ x0 = subarray(copy(x, 0, mkarray(# x + 1), 1, # x)[0 := a], # copy(x, 0, mkarray(# x + 1), 1, # x)[0 := a] - # x0, # x0) ↔ x0 < x), x0 ≠ x ⊦ |
¬(¬ # x < # x0 ∧ x0 = subarray(copy(x, 0, mkarray(# x + 1), 1, # x), # x + 1 - # x0, # x0) ↔ x0 < x), x0 ≠ x ⊦
Used simplifier rules: n < n0 ⊦ subarray(ar[n := a], n0, n1) = subarray(ar, n0, n1); (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 = 0 ↔ n = m); (s) ⊦ m + n = 0 ↔ m = 0 ∧ n = 0; (ws) ⊦ n ≤ m → m + n0 - n = (m - n) + n0; (s) ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ 0 < m ↔ m ≠ 0; (s) ⊦ # mkarray(n) = n; (s) ⊦ # copy(ar, m, ar0, m0, n) = # ar0; (s) ⊦ # ar[n := a] = # ar; (s) ⊦ m < n + 1 ↔ ¬ n < m; (s)
| ¬(¬ # x < # x0 ∧ x0 = subarray(copy(x, 0, mkarray(# x + 1), 1, # x), # x + 1 - # x0, # x0) ↔ x0 < x), x0 ≠ x ⊦ |
⊦ ar0 < ar1 ↔ # ar0 < # ar1 ∧ ar0 = subarray(ar1, # ar1 - # ar0, # ar0)
¬ ( ¬ # x < # x0 ∧ x0 = subarray(copy(x, 0, mkarray(# x + 1), 1, # x), # x + 1 - # x0, # x0) ↔ # x0 < # x ∧ x0 = subarray(x, # x - # x0, # x0)), x0 ≠ x ⊦
Used terms: x0, x
| ⊦ ar0 < ar1 ↔ # ar0 < # ar1 ∧ ar0 = subarray(ar1, # ar1 - # ar0, # ar0) |
| ¬ ( ¬ # x < # x0 ∧ x0 = subarray(copy(x, 0, mkarray(# x + 1), 1, # x), # x + 1 - # x0, # x0) ↔ # x0 < # x ∧ x0 = subarray(x, # x - # x0, # x0)), x0 ≠ x ⊦ |
# x = n0 + # x0, ¬ ( ¬ # x < # x0 ∧ x0 = subarray(copy(x, 0, mkarray(# x + 1), 1, # x), # x + 1 - # x0, # x0) ↔ # x0 < # x ∧ x0 = subarray(x, n0, # x0)), x0 ≠ x, # x0 ≤ # x ⊦
Used simplifier rules: ⊦ ¬ m < n → ¬ m + m0 < n; (s) n ≤ m ⊦ (m - n) + m0 ≤ n0 ↔ m + m0 ≤ n0 + n; (s) ⊦ m + n ≤ m + n0 ↔ n ≤ n0; (s) ⊦ m + m0 ≤ m ↔ m0 = 0; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ # mkarray(n) = n; (s) ⊦ m < n ↔ ¬ n ≤ m; (ss) m0 + m1 ≤ n1, m0 + m1 ≤ # ar ⊦ subarray(copy(ar0, n0, ar, n1, n2), m0, m1) = subarray(ar, m0, m1); (s) ⊦ m ≤ n ↔ ¬ n < m; (ss) ⊦ m < n → ¬ n < m; (s) n ≤ m ⊦ n0 = m - n ↔ m = n0 + n; (elim) Used terms: # x, # x0, n0
| # x = n0 + # x0, ¬ ( ¬ # x < # x0 ∧ x0 = subarray(copy(x, 0, mkarray(# x + 1), 1, # x), # x + 1 - # x0, # x0) ↔ # x0 < # x ∧ x0 = subarray(x, n0, # x0)), x0 ≠ x, # x0 ≤ # x ⊦ |
# x = n0 + # x0, ¬ ( x0 = subarray(copy(x, 0, mkarray(# x + 1), 1, # x), (# x - # x0) + 1, # x0) ↔ # x0 < # x ∧ x0 = subarray(x, n0, # x0)), x0 ≠ x, # x0 ≤ # x ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ n ≤ m → m + n0 - n = (m - n) + n0; (s) ⊦ m ≤ n → (n < m ↔ false); (s)
| # x = n0 + # x0, ¬ ( x0 = subarray(copy(x, 0, mkarray(# x + 1), 1, # x), (# x - # x0) + 1, # x0) ↔ # x0 < # x ∧ x0 = subarray(x, n0, # x0)), x0 ≠ x, # x0 ≤ # x ⊦ |
# x = n0 + # x0, # x = n1 + # x0, ¬(x0 = subarray(copy(x, 0, mkarray(# x + 1), 1, # x), n1 + 1, # x0) ↔ # x0 < # x ∧ x0 = subarray(x, n0, # x0)), x0 ≠ x, # x0 ≤ # x ⊦
Used simplifier rules: n ≤ m ⊦ n0 = m - n ↔ m = n0 + n; (elim) Used terms: # x, # x0, n
| # x = n0 + # x0, # x = n1 + # x0, ¬(x0 = subarray(copy(x, 0, mkarray(# x + 1), 1, # x), n1 + 1, # x0) ↔ # x0 < # x ∧ x0 = subarray(x, n0, # x0)), x0 ≠ x, # x0 ≤ # x ⊦ |
# x = n1 + # x0, ¬(x0 = subarray(copy(x, 0, mkarray(# x + 1), 1, # x), n1 + 1, # x0) ↔ # x0 < # x ∧ x0 = subarray(x, n1, # x0)), x0 ≠ x, # x0 ≤ # x ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic eqs: ⊦ m = n + n0 ∧ m = n + n1 → n0 = n1; (forward) from specification nat-basic
| # x = n1 + # x0, ¬(x0 = subarray(copy(x, 0, mkarray(# x + 1), 1, # x), n1 + 1, # x0) ↔ # x0 < # x ∧ x0 = subarray(x, n1, # x0)), x0 ≠ x, # x0 ≤ # x ⊦ |
# x = n1 + # x0, ¬(x0 = subarray(copy(x, 0, mkarray(# x + 1), 1, # x), n1 + 1, # x0) ↔ # x0 < # x ∧ x0 = subarray(x, n1, # x0)), x0 ≠ x, # x0 < # x, # x0 ≤ # x ⊦
Used simplifier rules: ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ m ≤ n → (n ≤ m ↔ m = n); (s) ⊦ # subarray(ar, m, n) = n; (s) ⊦ m = m + n ↔ n = 0; (s) ⊦ m ≤ m; (s) ⊦ # mkarray(n) = n; (s) ⊦ m + n ≤ m + n0 ↔ n ≤ n0; (s) ⊦ m ≤ n ↔ ¬ n < m; (ss) ⊦ ¬ n < n; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic m1 + n ≤ # ar1 ⊦ subarray(copy(ar0, m0, ar1, m1, n), m1, n) = subarray(ar0, m0, n); (s) # ar = n ⊦ subarray(ar, 0, n) = ar; (s) Used formulas: # x0 < # x
| # x = n1 + # x0, ¬(x0 = subarray(copy(x, 0, mkarray(# x + 1), 1, # x), n1 + 1, # x0) ↔ # x0 < # x ∧ x0 = subarray(x, n1, # x0)), x0 ≠ x, # x0 < # x, # x0 ≤ # x ⊦ |
# x = n1 + # x0, ¬(x0 = subarray(copy(x, 0, mkarray(# x + 1), 1, # x), n1 + 1, # x0) ↔ x0 = subarray(x, n1, # x0)), n1 ≠ 0, x0 ≠ x, # x0 < # x ⊦
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 → 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 ⊦ m < n → m ≤ n; (s)
| # x = n1 + # x0, ¬(x0 = subarray(copy(x, 0, mkarray(# x + 1), 1, # x), n1 + 1, # x0) ↔ x0 = subarray(x, n1, # x0)), n1 ≠ 0, x0 ≠ x, # x0 < # x ⊦ |
⊦ ar1 = ar2 ↔ # ar1 = # ar2 ∧ (∀ n. n < # ar1 → ar1[n] = ar2[n])
# x = n1 + # x0, n1 ≠ 0, x0 ≠ x, # x0 < # x ⊦ # x0 = # subarray(copy(x, 0, mkarray(# x + 1), 1, # x), n1 + 1, # x0) ∧ (∀ n. n < # x0 → x0[n] = subarray(copy(x, 0, mkarray(# x + 1), 1, # x), n1 + 1, # x0)[n]) ↔ x0 = subarray(x, n1, # x0)
Used terms: x0, subarray(copy(x, 0, mkarray(# x + 1), 1, # x), n1 + 1, # x0)
| ⊦ ar1 = ar2 ↔ # ar1 = # ar2 ∧ (∀ n. n < # ar1 → ar1[n] = ar2[n]) |
| # x = n1 + # x0, n1 ≠ 0, x0 ≠ x, # x0 < # x ⊦ # x0 = # subarray(copy(x, 0, mkarray(# x + 1), 1, # x), n1 + 1, # x0) ∧ (∀ n. n < # x0 → x0[n] = subarray(copy(x, 0, mkarray(# x + 1), 1, # x), n1 + 1, # x0)[n]) ↔ x0 = subarray(x, n1, # x0) |
# x = n1 + # x0, n1 ≠ 0, x0 ≠ x, # x0 < # x ⊦ (∀ n. n < # x0 → x0[n] = copy(x, 0, mkarray(# x + 1), 1, # x)[(n1 + 1) + n]) ↔ x0 = subarray(x, n1, # x0)
Used simplifier rules: ⊦ n0 < n → subarray(ar, m, n)[n0] = ar[m + n0]; (s) ⊦ # subarray(ar, m, n) = n; (s)
| # x = n1 + # x0, n1 ≠ 0, x0 ≠ x, # x0 < # x ⊦ (∀ n. n < # x0 → x0[n] = copy(x, 0, mkarray(# x + 1), 1, # x)[(n1 + 1) + n]) ↔ x0 = subarray(x, n1, # x0) |
⊦ ar1 = ar2 ↔ # ar1 = # ar2 ∧ (∀ n. n < # ar1 → ar1[n] = ar2[n])
# x = n1 + # x0, n1 ≠ 0, x0 ≠ x, # x0 < # x ⊦ (∀ n. n < # x0 → x0[n] = copy(x, 0, mkarray(# x + 1), 1, # x)[(n1 + 1) + n]) ↔ # x0 = # subarray(x, n1, # x0) ∧ (∀ n. n < # x0 → x0[n] = subarray(x, n1, # x0)[n])
Used terms: x0, subarray(x, n1, # x0)
| ⊦ ar1 = ar2 ↔ # ar1 = # ar2 ∧ (∀ n. n < # ar1 → ar1[n] = ar2[n]) |
| # x = n1 + # x0, n1 ≠ 0, x0 ≠ x, # x0 < # x ⊦ (∀ n. n < # x0 → x0[n] = copy(x, 0, mkarray(# x + 1), 1, # x)[(n1 + 1) + n]) ↔ # x0 = # subarray(x, n1, # x0) ∧ (∀ n. n < # x0 → x0[n] = subarray(x, n1, # x0)[n]) |
# x = n1 + # x0, n1 ≠ 0, x0 ≠ x, # x0 < # x ⊦ (∀ n. n < # x0 → x0[n] = copy(x, 0, mkarray(# x + 1), 1, # x)[(n1 + 1) + n]) ↔ (∀ n. n < # x0 → x0[n] = x[n1 + n])
Used simplifier rules: ⊦ n0 < n → subarray(ar, m, n)[n0] = ar[m + n0]; (s) ⊦ # subarray(ar, m, n) = n; (s)
| # x = n1 + # x0, n1 ≠ 0, x0 ≠ x, # x0 < # x ⊦ (∀ n. n < # x0 → x0[n] = copy(x, 0, mkarray(# x + 1), 1, # x)[(n1 + 1) + n]) ↔ (∀ n. n < # x0 → x0[n] = x[n1 + n]) |
# x = n1 + # x0, n1 ≠ 0, x0 ≠ x, # x0 < # x, ∀ n. n < # x0 → x0[n] = copy(x, 0, mkarray(# x + 1), 1, # x)[(n1 + 1) + n] ⊦ ∀ n. n < # x0 → x0[n] = x[n1 + n]
# x = n1 + # x0, n1 ≠ 0, x0 ≠ x, # x0 < # x, ∀ n. n < # x0 → x0[n] = x[n1 + n] ⊦ ∀ n. n < # x0 → x0[n] = copy(x, 0, mkarray(# x + 1), 1, # x)[(n1 + 1) + n]
| # x = n1 + # x0, n1 ≠ 0, x0 ≠ x, # x0 < # x, ∀ n. n < # x0 → x0[n] = copy(x, 0, mkarray(# x + 1), 1, # x)[(n1 + 1) + n] ⊦ ∀ n. n < # x0 → x0[n] = x[n1 + n] |
# x = n1 + # x0, x0[n] ≠ x[n1 + n], n1 ≠ 0, x0 ≠ x, n + 1 < # x, n < # x0, # x0 < # x, n < # x, ∀ n. n < # x0 → x0[n] = copy(x, 0, mkarray(# x + 1), 1, # x)[(n1 + 1) + n] ⊦
Used simplifier rules: lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic ⊦ m +1 = m + 1; (s) ⊦ m < n → n ≠ 0; (s) trans-nat: ⊦ n < n0 ∧ n0 < n1 → n < n1; (forward) from specification nat-basic lf: ⊦ m < n ∧ n < n0 → m +1 < n0; (forward) from specification nat-basic f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| # x = n1 + # x0, x0[n] ≠ x[n1 + n], n1 ≠ 0, x0 ≠ x, n + 1 < # x, n < # x0, # x0 < # x, n < # x, ∀ n. n < # x0 → x0[n] = copy(x, 0, mkarray(# x + 1), 1, # x)[(n1 + 1) + n] ⊦ |
# x = n1 + # x0, x0[n] ≠ x[n1 + n], n1 ≠ 0, x0 ≠ x, n < # x, # x0 < # x, n < # x0, n + 1 < # x, n < # x0 → x0[n] = copy(x, 0, mkarray(# x + 1), 1, # x)[(n1 + 1) + n], ∀ n. n < # x0 → x0[n] = copy(x, 0, mkarray(# x + 1), 1, # x)[(n1 + 1) + n] ⊦
Used terms: n
| # x = n1 + # x0, x0[n] ≠ x[n1 + n], n1 ≠ 0, x0 ≠ x, n < # x, # x0 < # x, n < # x0, n + 1 < # x, n < # x0 → x0[n] = copy(x, 0, mkarray(# x + 1), 1, # x)[(n1 + 1) + n], ∀ n. n < # x0 → x0[n] = copy(x, 0, mkarray(# x + 1), 1, # x)[(n1 + 1) + n] ⊦ |
# x = n1 + # x0, x0[n] = copy(x, 0, mkarray(# x + 1), 1, # x)[(n1 + 1) + n], x0[n] ≠ x[n1 + n], n1 ≠ 0, x0 ≠ x, n + 1 < # x, n < # x0, # x0 < # x, n < # x, ∀ n. n < # x0 → x0[n] = copy(x, 0, mkarray(# x + 1), 1, # x)[(n1 + 1) + n] ⊦
| # x = n1 + # x0, x0[n] = copy(x, 0, mkarray(# x + 1), 1, # x)[(n1 + 1) + n], x0[n] ≠ x[n1 + n], n1 ≠ 0, x0 ≠ x, n + 1 < # x, n < # x0, # x0 < # x, n < # x, ∀ n. n < # x0 → x0[n] = copy(x, 0, mkarray(# x + 1), 1, # x)[(n1 + 1) + n] ⊦ |
⊦ m0 < # ar1 → copy(ar0, n, ar1, n0, m)[m0] = (m0 < n0 ∨ n0 + m ≤ m0 ⊃ ar1[m0];ar0[m0 + n - n0])
# x = n1 + # x0, x0[n] = ((n1 + 1) + n < 1 ∨ 1 + # x ≤ (n1 + 1) + n ⊃ mkarray(# x + 1)[(n1 + 1) + n];x[((n1 + 1) + n) + 0 - 1]), x0[n] ≠ x[n1 + n], n1 ≠ 0, x0 ≠ x, n < # x, # x0 < # x, n < # x0, n + 1 < # x, (n1 + 1) + n < # mkarray(# x + 1), ∀ n. n < # x0 → x0[n] = copy(x, 0, mkarray(# x + 1), 1, # x)[(n1 + 1) + n] ⊦
Used simplifier rules: ⊦ # mkarray(n) = n; (s) ⊦ m + n < m + n0 ↔ n < n0; (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: 1, 0, mkarray(# x + 1), # x, (n1 + 1) + n, x
| ⊦ m0 < # ar1 → copy(ar0, n, ar1, n0, m)[m0] = (m0 < n0 ∨ n0 + m ≤ m0 ⊃ ar1[m0];ar0[m0 + n - n0]) |
| # x = n1 + # x0, x0[n] = ((n1 + 1) + n < 1 ∨ 1 + # x ≤ (n1 + 1) + n ⊃ mkarray(# x + 1)[(n1 + 1) + n];x[((n1 + 1) + n) + 0 - 1]), x0[n] ≠ x[n1 + n], n1 ≠ 0, x0 ≠ x, n < # x, # x0 < # x, n < # x0, n + 1 < # x, (n1 + 1) + n < # mkarray(# x + 1), ∀ n. n < # x0 → x0[n] = copy(x, 0, mkarray(# x + 1), 1, # x)[(n1 + 1) + n] ⊦ |
# x = n1 + # x0, x0[n] = (# x ≤ n1 + n ⊃ mkarray(# x + 1)[(n1 + 1) + n];x[n1 + n]), x0[n] ≠ x[n1 + n], n1 ≠ 0, x0 ≠ x, n + 1 < # x, n < # x0, # x0 < # x, n < # x, ∀ n. n < # x0 → x0[n] = copy(x, 0, mkarray(# x + 1), 1, # x)[(n1 + 1) + n] ⊦
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 < m + n0 ↔ n < n0; (s) ⊦ # mkarray(n) = n; (s) ⊦ n + 0 = n; (s) ⊦ n ≤ m → m + n0 - n = (m - n) + n0; (s) ⊦ m + n ≤ m + n0 ↔ n ≤ n0; (s) ⊦ ¬ m < n → ¬ m + m0 < n; (s)
| # x = n1 + # x0, x0[n] = (# x ≤ n1 + n ⊃ mkarray(# x + 1)[(n1 + 1) + n];x[n1 + n]), x0[n] ≠ x[n1 + n], n1 ≠ 0, x0 ≠ x, n + 1 < # x, n < # x0, # x0 < # x, n < # x, ∀ n. n < # x0 → x0[n] = copy(x, 0, mkarray(# x + 1), 1, # x)[(n1 + 1) + n] ⊦ |
# x = n1 + # x0, x0[n] = (# x ≤ n1 + n ⊃ mkarray(# x + 1)[(n1 + 1) + n];x[n1 + n]), x0[n] ≠ x[n1 + n], n1 ≠ 0, x0 ≠ x, n < # x, # x0 < # x, n < # x0, n + 1 < # x, # x ≤ n1 + n, ∀ n. n < # x0 → x0[n] = copy(x, 0, mkarray(# x + 1), 1, # x)[(n1 + 1) + n] ⊦
Used formulas: # x ≤ n1 + n
| # x = n1 + # x0, x0[n] = (# x ≤ n1 + n ⊃ mkarray(# x + 1)[(n1 + 1) + n];x[n1 + n]), x0[n] ≠ x[n1 + n], n1 ≠ 0, x0 ≠ x, n < # x, # x0 < # x, n < # x0, n + 1 < # x, # x ≤ n1 + n, ∀ n. n < # x0 → x0[n] = copy(x, 0, mkarray(# x + 1), 1, # x)[(n1 + 1) + n] ⊦ |
# x = n1 + # x0, x0[n] = mkarray(# x + 1)[(n1 + 1) + n], x0[n] ≠ x[n1 + n], n1 ≠ 1, n1 ≠ 0, x0 ≠ x, # x0 < n1 + n, n + 1 < # x, n < # x0, # x0 < # x, n < # x, # x ≤ n1 + n, ∀ n. n < # x0 → x0[n] = copy(x, 0, mkarray(# x + 1), 1, # x)[(n1 + 1) + n] ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ 1 < m ↔ ¬(m = 0 ∨ m = 1); (s) ⊦ m + n < m + n0 ↔ n < n0; (s) ⊦ m +1 = m + 1; (s) ⊦ m < n → n ≠ 0; (s) lf: ⊦ m < n ∧ n < n0 → m +1 < n0; (forward) from specification nat-basic f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ m < m + n ↔ n ≠ 0; (s) fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat
| # x = n1 + # x0, x0[n] = mkarray(# x + 1)[(n1 + 1) + n], x0[n] ≠ x[n1 + n], n1 ≠ 1, n1 ≠ 0, x0 ≠ x, # x0 < n1 + n, n + 1 < # x, n < # x0, # x0 < # x, n < # x, # x ≤ n1 + n, ∀ n. n < # x0 → x0[n] = copy(x, 0, mkarray(# x + 1), 1, # x)[(n1 + 1) + n] ⊦ |
Used simplifier rules: ⊦ m + n ≤ m + n0 ↔ n ≤ n0; (s) ⊦ m < n → (n ≤ m ↔ false); (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic
| # x = n1 + # x0, n1 ≠ 0, x0 ≠ x, # x0 < # x, ∀ n. n < # x0 → x0[n] = x[n1 + n] ⊦ ∀ n. n < # x0 → x0[n] = copy(x, 0, mkarray(# x + 1), 1, # x)[(n1 + 1) + n] |
# x = n1 + # x0, x0[n] ≠ copy(x, 0, mkarray(# x + 1), 1, # x)[(n1 + 1) + n], n1 ≠ 0, x0 ≠ x, n + 1 < # x, n < # x0, # x0 < # x, n < # x, ∀ n. n < # x0 → x0[n] = x[n1 + n] ⊦
Used simplifier rules: lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic ⊦ m +1 = m + 1; (s) ⊦ m < n → n ≠ 0; (s) trans-nat: ⊦ n < n0 ∧ n0 < n1 → n < n1; (forward) from specification nat-basic lf: ⊦ m < n ∧ n < n0 → m +1 < n0; (forward) from specification nat-basic f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| # x = n1 + # x0, x0[n] ≠ copy(x, 0, mkarray(# x + 1), 1, # x)[(n1 + 1) + n], n1 ≠ 0, x0 ≠ x, n + 1 < # x, n < # x0, # x0 < # x, n < # x, ∀ n. n < # x0 → x0[n] = x[n1 + n] ⊦ |
⊦ m0 < # ar1 → copy(ar0, n, ar1, n0, m)[m0] = (m0 < n0 ∨ n0 + m ≤ m0 ⊃ ar1[m0];ar0[m0 + n - n0])
# x = n1 + # x0, x0[n] ≠ ((n1 + 1) + n < 1 ∨ 1 + # x ≤ (n1 + 1) + n ⊃ mkarray(# x + 1)[(n1 + 1) + n];x[((n1 + 1) + n) + 0 - 1]), n1 ≠ 0, x0 ≠ x, n < # x, # x0 < # x, n < # x0, n + 1 < # x, (n1 + 1) + n < # mkarray(# x + 1), ∀ n. n < # x0 → x0[n] = x[n1 + n] ⊦
Used simplifier rules: ⊦ # mkarray(n) = n; (s) ⊦ m + n < m + n0 ↔ n < n0; (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: 1, 0, mkarray(# x + 1), # x, (n1 + 1) + n, x
| ⊦ m0 < # ar1 → copy(ar0, n, ar1, n0, m)[m0] = (m0 < n0 ∨ n0 + m ≤ m0 ⊃ ar1[m0];ar0[m0 + n - n0]) |
| # x = n1 + # x0, x0[n] ≠ ((n1 + 1) + n < 1 ∨ 1 + # x ≤ (n1 + 1) + n ⊃ mkarray(# x + 1)[(n1 + 1) + n];x[((n1 + 1) + n) + 0 - 1]), n1 ≠ 0, x0 ≠ x, n < # x, # x0 < # x, n < # x0, n + 1 < # x, (n1 + 1) + n < # mkarray(# x + 1), ∀ n. n < # x0 → x0[n] = x[n1 + n] ⊦ |
# x = n1 + # x0, x0[n] ≠ (# x ≤ n1 + n ⊃ mkarray(# x + 1)[(n1 + 1) + n];x[n1 + n]), n1 ≠ 0, x0 ≠ x, n + 1 < # x, n < # x0, # x0 < # x, n < # x, ∀ n. n < # x0 → x0[n] = x[n1 + n] ⊦
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 < m + n0 ↔ n < n0; (s) ⊦ # mkarray(n) = n; (s) ⊦ n + 0 = n; (s) ⊦ n ≤ m → m + n0 - n = (m - n) + n0; (s) ⊦ m + n ≤ m + n0 ↔ n ≤ n0; (s) ⊦ ¬ m < n → ¬ m + m0 < n; (s)
| # x = n1 + # x0, x0[n] ≠ (# x ≤ n1 + n ⊃ mkarray(# x + 1)[(n1 + 1) + n];x[n1 + n]), n1 ≠ 0, x0 ≠ x, n + 1 < # x, n < # x0, # x0 < # x, n < # x, ∀ n. n < # x0 → x0[n] = x[n1 + n] ⊦ |
# x = n1 + # x0, x0[n] ≠ mkarray(# x + 1)[(n1 + 1) + n], n1 ≠ 0, x0 ≠ x, n < # x, # x0 < # x, n < # x0, n + 1 < # x, # x ≤ n1 + n, ∀ n. n < # x0 → x0[n] = x[n1 + n] ⊦
# x = n1 + # x0, x0[n] ≠ x[n1 + n], n1 ≠ 0, x0 ≠ x, n < # x, # x0 < # x, n < # x0, n + 1 < # x, ¬ # x ≤ n1 + n, ∀ n. n < # x0 → x0[n] = x[n1 + n] ⊦
| # x = n1 + # x0, x0[n] ≠ mkarray(# x + 1)[(n1 + 1) + n], n1 ≠ 0, x0 ≠ x, n < # x, # x0 < # x, n < # x0, n + 1 < # x, # x ≤ n1 + n, ∀ n. n < # x0 → x0[n] = x[n1 + n] ⊦ |
# x = n1 + # x0, x0[n] ≠ mkarray(# x + 1)[(n1 + 1) + n], n1 ≠ 1, n1 ≠ 0, x0 ≠ x, # x0 < n1 + n, n + 1 < # x, n < # x0, # x0 < # x, n < # x, # x ≤ n1 + n, ∀ n. n < # x0 → x0[n] = x[n1 + n] ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ 1 < m ↔ ¬(m = 0 ∨ m = 1); (s) ⊦ m + n < m + n0 ↔ n < n0; (s) ⊦ m +1 = m + 1; (s) ⊦ m < n → n ≠ 0; (s) lf: ⊦ m < n ∧ n < n0 → m +1 < n0; (forward) from specification nat-basic f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ m < m + n ↔ n ≠ 0; (s) fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat
| # x = n1 + # x0, x0[n] ≠ mkarray(# x + 1)[(n1 + 1) + n], n1 ≠ 1, n1 ≠ 0, x0 ≠ x, # x0 < n1 + n, n + 1 < # x, n < # x0, # x0 < # x, n < # x, # x ≤ n1 + n, ∀ n. n < # x0 → x0[n] = x[n1 + n] ⊦ |
Used simplifier rules: ⊦ m + n ≤ m + n0 ↔ n ≤ n0; (s) ⊦ m < n → (n ≤ m ↔ false); (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic
| # x = n1 + # x0, x0[n] ≠ x[n1 + n], n1 ≠ 0, x0 ≠ x, n < # x, # x0 < # x, n < # x0, n + 1 < # x, ¬ # x ≤ n1 + n, ∀ n. n < # x0 → x0[n] = x[n1 + n] ⊦ |
# x = n1 + # x0, x0[n] ≠ x[n1 + n], n1 ≠ 0, x0 ≠ x, n + 1 < # x, n < # x0, # x0 < # x, n < # x, ∀ n. n < # x0 → x0[n] = x[n1 + n] ⊦
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 < m; (ss)
| # x = n1 + # x0, x0[n] ≠ x[n1 + n], n1 ≠ 0, x0 ≠ x, n + 1 < # x, n < # x0, # x0 < # x, n < # x, ∀ n. n < # x0 → x0[n] = x[n1 + n] ⊦ |
Used terms: n
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.