| ⊦ x < x0 ∧ x0 < x1 → x < x1 |
x < x0, x0 < x1, ¬ x < x1 ⊦
| x < x0, x0 < x1, ¬ x < x1 ⊦ |
⊦ ar0 < ar1 ↔ # ar0 < # ar1 ∧ ar0 = subarray(ar1, # ar1 - # ar0, # ar0)
x0 < x1, x < x0, ¬ # x < # x1 ∨ x ≠ subarray(x1, # x1 - # x, # x) ⊦
Used terms: x, x1
| ⊦ ar0 < ar1 ↔ # ar0 < # ar1 ∧ ar0 = subarray(ar1, # ar1 - # ar0, # ar0) |
| x0 < x1, x < x0, ¬ # x < # x1 ∨ x ≠ subarray(x1, # x1 - # x, # x) ⊦ |
⊦ ar0 < ar1 ↔ # ar0 < # ar1 ∧ ar0 = subarray(ar1, # ar1 - # ar0, # ar0)
x = subarray(x0, # x0 - # x, # x), # x < # x0, x0 < x1, ¬ # x < # x1 ∨ x ≠ subarray(x1, # x1 - # x, # x) ⊦
Used terms: x, x0
| ⊦ ar0 < ar1 ↔ # ar0 < # ar1 ∧ ar0 = subarray(ar1, # ar1 - # ar0, # ar0) |
| x = subarray(x0, # x0 - # x, # x), # x < # x0, x0 < x1, ¬ # x < # x1 ∨ x ≠ subarray(x1, # x1 - # x, # x) ⊦ |
# x0 = n0 + # x, x = subarray(x0, n0, # x), x0 < x1, # x < # x0, # x ≤ # x0, ¬ # x < # x1 ∨ x ≠ subarray(x1, # x1 - # x, # x) ⊦
Used simplifier rules: ⊦ m < n → m ≤ n; (s) n ≤ m ⊦ n0 = m - n ↔ m = n0 + n; (elim) Used terms: # x0, # x, n0
| # x0 = n0 + # x, x = subarray(x0, n0, # x), x0 < x1, # x < # x0, # x ≤ # x0, ¬ # x < # x1 ∨ x ≠ subarray(x1, # x1 - # x, # x) ⊦ |
# x0 = n0 + # x, x = subarray(x0, n0, # x), n0 ≠ 0, x0 < x1, # x < # x0, ¬ # x < # x1 ∨ x ≠ subarray(x1, # x1 - # x, # 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)
| # x0 = n0 + # x, x = subarray(x0, n0, # x), n0 ≠ 0, x0 < x1, # x < # x0, ¬ # x < # x1 ∨ x ≠ subarray(x1, # x1 - # x, # x) ⊦ |
⊦ ar0 < ar1 ↔ # ar0 < # ar1 ∧ ar0 = subarray(ar1, # ar1 - # ar0, # ar0)
# x0 = n0 + # x, x = subarray(x0, n0, # x), x0 = subarray(x1, # x1 - # x0, # x0), n0 ≠ 0, # x < # x0, # x0 < # x1, ¬ # x < # x1 ∨ x ≠ subarray(x1, # x1 - # x, # x) ⊦
Used terms: x0, x1
| ⊦ ar0 < ar1 ↔ # ar0 < # ar1 ∧ ar0 = subarray(ar1, # ar1 - # ar0, # ar0) |
| # x0 = n0 + # x, x = subarray(x0, n0, # x), x0 = subarray(x1, # x1 - # x0, # x0), n0 ≠ 0, # x < # x0, # x0 < # x1, ¬ # x < # x1 ∨ x ≠ subarray(x1, # x1 - # x, # x) ⊦ |
# x0 = n0 + # x, x = subarray(x0, n0, # x), x0 = subarray(x1, # x1 - # x0, # x0), n0 ≠ 0, x ≠ subarray(x1, # x1 - # x, # x), # x < # x1, # x < # x0, # x0 < # x1, # x + 1 < # x1 ⊦
Used simplifier rules: ⊦ m.+1 = m + 1; (s) ⊦ m < n → n ≠ 0; (s) lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic 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
| # x0 = n0 + # x, x = subarray(x0, n0, # x), x0 = subarray(x1, # x1 - # x0, # x0), n0 ≠ 0, x ≠ subarray(x1, # x1 - # x, # x), # x < # x1, # x < # x0, # x0 < # x1, # x + 1 < # x1 ⊦ |
# x0 = n0 + # x, # x1 = n1 + # x0, x = subarray(x0, n0, # x), x0 = subarray(x1, n1, # x0), n0 ≠ 0, x ≠ subarray(x1, # x1 - # x, # x), # x + 1 < # x1, # x0 < # x1, # x < # x0, # x < # x1, # x0 ≤ # x1 ⊦
Used simplifier rules: ⊦ m < n → m ≤ n; (s) n ≤ m ⊦ n0 = m - n ↔ m = n0 + n; (elim) Used terms: # x1, # x0, n
| # x0 = n0 + # x, # x1 = n1 + # x0, x = subarray(x0, n0, # x), x0 = subarray(x1, n1, # x0), n0 ≠ 0, x ≠ subarray(x1, # x1 - # x, # x), # x + 1 < # x1, # x0 < # x1, # x < # x0, # x < # x1, # x0 ≤ # x1 ⊦ |
# x0 = n0 + # x, # x1 = n1 + # x0, x = subarray(x0, n0, # x), x0 = subarray(x1, n1, # x0), n0 ≠ 0, n1 ≠ 0, x ≠ subarray(x1, # x1 - # x, # x), # x0 < # x1, # x < # x0, # x < # x1, # x + 1 < # x1 ⊦
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) lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic ⊦ m < n → m ≤ n; (s)
| # x0 = n0 + # x, # x1 = n1 + # x0, x = subarray(x0, n0, # x), x0 = subarray(x1, n1, # x0), n0 ≠ 0, n1 ≠ 0, x ≠ subarray(x1, # x1 - # x, # x), # x0 < # x1, # x < # x0, # x < # x1, # x + 1 < # x1 ⊦ |
# x1 = n1 + # x0, # x0 = n0 + # x, # x1 = n2 + # x, x = subarray(x0, n0, # x), x0 = subarray(x1, n1, # x0), n0 ≠ 0, n1 ≠ 0, x ≠ subarray(x1, n2, # x), # x + 1 < # x1, # x < # x1, # x < # x0, # x0 < # x1, # x ≤ # x1 ⊦
Used simplifier rules: ⊦ m < n → m ≤ n; (s) n ≤ m ⊦ n0 = m - n ↔ m = n0 + n; (elim) Used terms: # x1, # x, n
| # x1 = n1 + # x0, # x0 = n0 + # x, # x1 = n2 + # x, x = subarray(x0, n0, # x), x0 = subarray(x1, n1, # x0), n0 ≠ 0, n1 ≠ 0, x ≠ subarray(x1, n2, # x), # x + 1 < # x1, # x < # x1, # x < # x0, # x0 < # x1, # x ≤ # x1 ⊦ |
# x1 = n1 + # x0, # x0 = n0 + # x, # x1 = n2 + # x, x = subarray(x0, n0, # x), x0 = subarray(x1, n1, # x0), n0 ≠ 0, n1 ≠ 0, n2 ≠ 1, n2 ≠ 0, x ≠ subarray(x1, n2, # x), # x + 1 < # x1, # x < # x1, # x < # x0, # x0 < # x1 ⊦
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) ⊦ 1 < m ↔ ¬(m = 0 ∨ m = 1); (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)
| # x1 = n1 + # x0, # x0 = n0 + # x, # x1 = n2 + # x, x = subarray(x0, n0, # x), x0 = subarray(x1, n1, # x0), n0 ≠ 0, n1 ≠ 0, n2 ≠ 1, n2 ≠ 0, x ≠ subarray(x1, n2, # x), # x + 1 < # x1, # x < # x1, # x < # x0, # x0 < # x1 ⊦ |
⊦ ar1 = ar2 ↔ # ar1 = # ar2 ∧ (∀ n. n < # ar1 → ar1(n) = ar2(n))
# x1 = n2 + # x, # x0 = n0 + # x, # x1 = n1 + # x0, x = subarray(x0, n0, # x), x0 = subarray(x1, n1, # x0), n0 ≠ 0, n1 ≠ 0, n2 ≠ 1, n2 ≠ 0, # x0 < # x1, # x < # x0, # x < # x1, # x + 1 < # x1, # x ≠ # subarray(x1, n2, # x) ∨ (∃ n. ¬(n < # x → x(n) = subarray(x1, n2, # x)(n))) ⊦
Used terms: x, subarray(x1, n2, # x)
| ⊦ ar1 = ar2 ↔ # ar1 = # ar2 ∧ (∀ n. n < # ar1 → ar1(n) = ar2(n)) |
| # x1 = n2 + # x, # x0 = n0 + # x, # x1 = n1 + # x0, x = subarray(x0, n0, # x), x0 = subarray(x1, n1, # x0), n0 ≠ 0, n1 ≠ 0, n2 ≠ 1, n2 ≠ 0, # x0 < # x1, # x < # x0, # x < # x1, # x + 1 < # x1, # x ≠ # subarray(x1, n2, # x) ∨ (∃ n. ¬(n < # x → x(n) = subarray(x1, n2, # x)(n))) ⊦ |
# x1 = n2 + # x, # x0 = n0 + # x, # x1 = n1 + # x0, x = subarray(x0, n0, # x), x0 = subarray(x1, n1, # x0), x(n) ≠ x1(n2 + n), n0 ≠ 0, n1 ≠ 0, n2 ≠ 0, n2 ≠ 1, 2 + n < # x1, n < # x, # x0 < # x1, # x < # x0, # x < # x1, # x + 1 < # x1, n < # x0, n < # x1, n + 1 < # x1, n + 1 < # x0 ⊦
Used simplifier rules: lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m.+1 = m + 1; (s) ⊦ m + n < m0 → m + n < m0 + n0; (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 ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ n0 < n → subarray(ar, m, n)(n0) = ar(m + n0); (s) ⊦ # subarray(ar, m, n) = n; (s)
| # x1 = n2 + # x, # x0 = n0 + # x, # x1 = n1 + # x0, x = subarray(x0, n0, # x), x0 = subarray(x1, n1, # x0), x(n) ≠ x1(n2 + n), n0 ≠ 0, n1 ≠ 0, n2 ≠ 0, n2 ≠ 1, 2 + n < # x1, n < # x, # x0 < # x1, # x < # x0, # x < # x1, # x + 1 < # x1, n < # x0, n < # x1, n + 1 < # x1, n + 1 < # x0 ⊦ |
⊦ ar1 = ar2 ↔ # ar1 = # ar2 ∧ (∀ n. n < # ar1 → ar1(n) = ar2(n))
# x = # subarray(x0, n0, # x), # x1 = n1 + # x0, # x0 = n0 + # x, # x1 = n2 + # x, x0 = subarray(x1, n1, # x0), x(n) ≠ x1(n2 + n), n0 ≠ 0, n1 ≠ 0, n2 ≠ 0, n2 ≠ 1, n + 1 < # x0, n + 1 < # x1, n < # x1, n < # x0, # x + 1 < # x1, # x < # x1, # x < # x0, # x0 < # x1, n < # x, 2 + n < # x1, ∀ n. n < # x → x(n) = subarray(x0, n0, # x)(n) ⊦
Used terms: x, subarray(x0, n0, # x)
| ⊦ ar1 = ar2 ↔ # ar1 = # ar2 ∧ (∀ n. n < # ar1 → ar1(n) = ar2(n)) |
| # x = # subarray(x0, n0, # x), # x1 = n1 + # x0, # x0 = n0 + # x, # x1 = n2 + # x, x0 = subarray(x1, n1, # x0), x(n) ≠ x1(n2 + n), n0 ≠ 0, n1 ≠ 0, n2 ≠ 0, n2 ≠ 1, n + 1 < # x0, n + 1 < # x1, n < # x1, n < # x0, # x + 1 < # x1, # x < # x1, # x < # x0, # x0 < # x1, n < # x, 2 + n < # x1, ∀ n. n < # x → x(n) = subarray(x0, n0, # x)(n) ⊦ |
# x1 = n2 + # x, # x0 = n0 + # x, # x1 = n1 + # x0, x0 = subarray(x1, n1, # x0), x(n) ≠ x1(n2 + n), n0 ≠ 0, n1 ≠ 0, n2 ≠ 0, n2 ≠ 1, 2 + n < # x1, n < # x, # x0 < # x1, # x < # x0, # x < # x1, # x + 1 < # x1, n < # x0, n < # x1, n + 1 < # x1, n + 1 < # x0, ∀ n3. n3 < # x → x(n3) = x0(n0 + n3) ⊦
Used simplifier rules: ⊦ n0 < n → subarray(ar, m, n)(n0) = ar(m + n0); (s) ⊦ # subarray(ar, m, n) = n; (s)
| # x1 = n2 + # x, # x0 = n0 + # x, # x1 = n1 + # x0, x0 = subarray(x1, n1, # x0), x(n) ≠ x1(n2 + n), n0 ≠ 0, n1 ≠ 0, n2 ≠ 0, n2 ≠ 1, 2 + n < # x1, n < # x, # x0 < # x1, # x < # x0, # x < # x1, # x + 1 < # x1, n < # x0, n < # x1, n + 1 < # x1, n + 1 < # x0, ∀ n3. n3 < # x → x(n3) = x0(n0 + n3) ⊦ |
⊦ ar1 = ar2 ↔ # ar1 = # ar2 ∧ (∀ n. n < # ar1 → ar1(n) = ar2(n))
# x0 = # subarray(x1, n1, # x0), # x1 = n1 + # x0, # x0 = n0 + # x, # x1 = n2 + # x, x(n) ≠ x1(n2 + n), n0 ≠ 0, n1 ≠ 0, n2 ≠ 0, n2 ≠ 1, n + 1 < # x0, n + 1 < # x1, n < # x1, n < # x0, # x + 1 < # x1, # x < # x1, # x < # x0, # x0 < # x1, n < # x, 2 + n < # x1, ∀ n3. n3 < # x → x(n3) = x0(n0 + n3), ∀ n. n < # x0 → x0(n) = subarray(x1, n1, # x0)(n) ⊦
Used terms: x0, subarray(x1, n1, # x0)
| ⊦ ar1 = ar2 ↔ # ar1 = # ar2 ∧ (∀ n. n < # ar1 → ar1(n) = ar2(n)) |
| # x0 = # subarray(x1, n1, # x0), # x1 = n1 + # x0, # x0 = n0 + # x, # x1 = n2 + # x, x(n) ≠ x1(n2 + n), n0 ≠ 0, n1 ≠ 0, n2 ≠ 0, n2 ≠ 1, n + 1 < # x0, n + 1 < # x1, n < # x1, n < # x0, # x + 1 < # x1, # x < # x1, # x < # x0, # x0 < # x1, n < # x, 2 + n < # x1, ∀ n3. n3 < # x → x(n3) = x0(n0 + n3), ∀ n. n < # x0 → x0(n) = subarray(x1, n1, # x0)(n) ⊦ |
# x1 = n2 + # x, # x0 = n0 + # x, # x1 = n1 + # x0, x(n) ≠ x1(n2 + n), n0 ≠ 0, n1 ≠ 0, n2 ≠ 0, n2 ≠ 1, 2 + n < # x1, n < # x, # x0 < # x1, # x < # x0, # x < # x1, # x + 1 < # x1, n < # x0, n < # x1, n + 1 < # x1, n + 1 < # x0, ∀ n3. n3 < # x → x(n3) = x0(n0 + n3), ∀ n3. n3 < # x0 → x0(n3) = x1(n1 + n3) ⊦
Used simplifier rules: ⊦ n0 < n → subarray(ar, m, n)(n0) = ar(m + n0); (s) ⊦ # subarray(ar, m, n) = n; (s)
| # x1 = n2 + # x, # x0 = n0 + # x, # x1 = n1 + # x0, x(n) ≠ x1(n2 + n), n0 ≠ 0, n1 ≠ 0, n2 ≠ 0, n2 ≠ 1, 2 + n < # x1, n < # x, # x0 < # x1, # x < # x0, # x < # x1, # x + 1 < # x1, n < # x0, n < # x1, n + 1 < # x1, n + 1 < # x0, ∀ n3. n3 < # x → x(n3) = x0(n0 + n3), ∀ n3. n3 < # x0 → x0(n3) = x1(n1 + n3) ⊦ |
# x1 = n1 + # x0, # x0 = n0 + # x, # x1 = n2 + # x, x(n) ≠ x1(n2 + n), n0 ≠ 0, n1 ≠ 0, n2 ≠ 0, n2 ≠ 1, n + 1 < # x0, n + 1 < # x1, n < # x1, n < # x0, # x + 1 < # x1, # x < # x1, # x < # x0, # x0 < # x1, n < # x, 2 + n < # x1, n < # x → x(n) = x0(n0 + n), ∀ n3. n3 < # x0 → x0(n3) = x1(n1 + n3), ∀ n3. n3 < # x → x(n3) = x0(n0 + n3) ⊦
Used terms: n
| # x1 = n1 + # x0, # x0 = n0 + # x, # x1 = n2 + # x, x(n) ≠ x1(n2 + n), n0 ≠ 0, n1 ≠ 0, n2 ≠ 0, n2 ≠ 1, n + 1 < # x0, n + 1 < # x1, n < # x1, n < # x0, # x + 1 < # x1, # x < # x1, # x < # x0, # x0 < # x1, n < # x, 2 + n < # x1, n < # x → x(n) = x0(n0 + n), ∀ n3. n3 < # x0 → x0(n3) = x1(n1 + n3), ∀ n3. n3 < # x → x(n3) = x0(n0 + n3) ⊦ |
# x1 = n2 + # x, # x0 = n0 + # x, # x1 = n1 + # x0, x(n) = x0(n0 + n), x(n) ≠ x1(n2 + n), n0 ≠ 0, n1 ≠ 0, n2 ≠ 0, n2 ≠ 1, 2 + n < # x1, n < # x, # x0 < # x1, # x < # x0, # x < # x1, # x + 1 < # x1, n < # x0, n < # x1, n + 1 < # x1, n + 1 < # x0, ∀ n3. n3 < # x → x(n3) = x0(n0 + n3), ∀ n3. n3 < # x0 → x0(n3) = x1(n1 + n3) ⊦
| # x1 = n2 + # x, # x0 = n0 + # x, # x1 = n1 + # x0, x(n) = x0(n0 + n), x(n) ≠ x1(n2 + n), n0 ≠ 0, n1 ≠ 0, n2 ≠ 0, n2 ≠ 1, 2 + n < # x1, n < # x, # x0 < # x1, # x < # x0, # x < # x1, # x + 1 < # x1, n < # x0, n < # x1, n + 1 < # x1, n + 1 < # x0, ∀ n3. n3 < # x → x(n3) = x0(n0 + n3), ∀ n3. n3 < # x0 → x0(n3) = x1(n1 + n3) ⊦ |
# x1 = n1 + # x0, # x0 = n0 + # x, # x1 = n2 + # x, x(n) = x0(n0 + n), x(n) ≠ x1(n2 + n), n0 ≠ 0, n1 ≠ 0, n2 ≠ 0, n2 ≠ 1, n + 1 < # x0, n + 1 < # x1, n < # x1, n < # x0, # x + 1 < # x1, # x < # x1, # x < # x0, # x0 < # x1, n < # x, 2 + n < # x1, n0 + n < # x0 → x0(n0 + n) = x1(n1 + n0 + n), ∀ n3. n3 < # x0 → x0(n3) = x1(n1 + n3), ∀ n3. n3 < # x → x(n3) = x0(n0 + n3) ⊦
Used terms: n0 + n
| # x1 = n1 + # x0, # x0 = n0 + # x, # x1 = n2 + # x, x(n) = x0(n0 + n), x(n) ≠ x1(n2 + n), n0 ≠ 0, n1 ≠ 0, n2 ≠ 0, n2 ≠ 1, n + 1 < # x0, n + 1 < # x1, n < # x1, n < # x0, # x + 1 < # x1, # x < # x1, # x < # x0, # x0 < # x1, n < # x, 2 + n < # x1, n0 + n < # x0 → x0(n0 + n) = x1(n1 + n0 + n), ∀ n3. n3 < # x0 → x0(n3) = x1(n1 + n3), ∀ n3. n3 < # x → x(n3) = x0(n0 + n3) ⊦ |
# x1 = n2 + # x, # x0 = n0 + # x, # x1 = n1 + # x0, x(n) = x0(n0 + n), x(n) = x1(n1 + n0 + n), x(n) ≠ x1(n2 + n), n0 ≠ 0, n1 ≠ 0, n2 ≠ 0, n2 ≠ 1, 2 + n < # x1, n < # x, # x0 < # x1, # x < # x0, # x < # x1, # x + 1 < # x1, n < # x0, n < # x1, n + 1 < # x1, n + 1 < # x0, ∀ n3. n3 < # x → x(n3) = x0(n0 + n3), ∀ n3. n3 < # x0 → x0(n3) = x1(n1 + n3) ⊦
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)
| # x1 = n2 + # x, # x0 = n0 + # x, # x1 = n1 + # x0, x(n) = x0(n0 + n), x(n) = x1(n1 + n0 + n), x(n) ≠ x1(n2 + n), n0 ≠ 0, n1 ≠ 0, n2 ≠ 0, n2 ≠ 1, 2 + n < # x1, n < # x, # x0 < # x1, # x < # x0, # x < # x1, # x + 1 < # x1, n < # x0, n < # x1, n + 1 < # x1, n + 1 < # x0, ∀ n3. n3 < # x → x(n3) = x0(n0 + n3), ∀ n3. n3 < # x0 → x0(n3) = x1(n1 + n3) ⊦ |
# x1 = n1 + # x0, # x0 = n0 + # x, # x1 = n2 + # x, x1(n1 + n0 + n) = x0(n0 + n), x1(n1 + n0 + n) ≠ x1(n2 + n), n0 ≠ 0, n1 ≠ 0, n2 ≠ 0, n2 ≠ 1, n + 1 < # x0, n + 1 < # x1, n < # x1, n < # x0, # x + 1 < # x1, # x < # x1, # x < # x0, # x0 < # x1, n < # x, 2 + n < # x1, ∀ n3. n3 < # x0 → x0(n3) = x1(n1 + n3), ∀ n3. n3 < # x → x(n3) = x0(n0 + n3) ⊦
| # x1 = n1 + # x0, # x0 = n0 + # x, # x1 = n2 + # x, x1(n1 + n0 + n) = x0(n0 + n), x1(n1 + n0 + n) ≠ x1(n2 + n), n0 ≠ 0, n1 ≠ 0, n2 ≠ 0, n2 ≠ 1, n + 1 < # x0, n + 1 < # x1, n < # x1, n < # x0, # x + 1 < # x1, # x < # x1, # x < # x0, # x0 < # x1, n < # x, 2 + n < # x1, ∀ n3. n3 < # x0 → x0(n3) = x1(n1 + n3), ∀ n3. n3 < # x → x(n3) = x0(n0 + n3) ⊦ |
# x1 = n2 + # x, # x0 = n0 + # x, # x1 = n1 + # x0, x1(n1 + n0 + n) = x0(n0 + n), x0(n0 + n) ≠ x1(n2 + n), n0 ≠ 0, n1 ≠ 0, n2 ≠ 0, n2 ≠ 1, 2 + n < # x1, n < # x, # x0 < # x1, # x < # x0, # x < # x1, # x + 1 < # x1, n < # x0, n < # x1, n + 1 < # x1, n + 1 < # x0, ∀ n3. n3 < # x → x(n3) = x0(n0 + n3), ∀ n3. n3 < # x0 → x0(n3) = x1(n1 + n3) ⊦
| # x1 = n2 + # x, # x0 = n0 + # x, # x1 = n1 + # x0, x1(n1 + n0 + n) = x0(n0 + n), x0(n0 + n) ≠ x1(n2 + n), n0 ≠ 0, n1 ≠ 0, n2 ≠ 0, n2 ≠ 1, 2 + n < # x1, n < # x, # x0 < # x1, # x < # x0, # x < # x1, # x + 1 < # x1, n < # x0, n < # x1, n + 1 < # x1, n + 1 < # x0, ∀ n3. n3 < # x → x(n3) = x0(n0 + n3), ∀ n3. n3 < # x0 → x0(n3) = x1(n1 + n3) ⊦ |
# x0 = n0 + # x, n1 + # x0 = n2 + # x, x1(n1 + n0 + n) = x0(n0 + n), x0(n0 + n) ≠ x1(n2 + n), n0 ≠ 0, n1 ≠ 0, n2 ≠ 0, n2 ≠ 1, n + 1 < # x0, n + 1 < n1 + # x0, n < n1 + # x0, n < # x0, # x + 1 < n1 + # x0, # x < n1 + # x0, # x < # x0, # x0 < n1 + # x0, n < # x, 2 + n < n1 + # x0, ∀ n3. n3 < # x0 → x0(n3) = x1(n1 + n3), ∀ n3. n3 < # x → x(n3) = x0(n0 + n3) ⊦
| # x0 = n0 + # x, n1 + # x0 = n2 + # x, x1(n1 + n0 + n) = x0(n0 + n), x0(n0 + n) ≠ x1(n2 + n), n0 ≠ 0, n1 ≠ 0, n2 ≠ 0, n2 ≠ 1, n + 1 < # x0, n + 1 < n1 + # x0, n < n1 + # x0, n < # x0, # x + 1 < n1 + # x0, # x < n1 + # x0, # x < # x0, # x0 < n1 + # x0, n < # x, 2 + n < n1 + # x0, ∀ n3. n3 < # x0 → x0(n3) = x1(n1 + n3), ∀ n3. n3 < # x → x(n3) = x0(n0 + n3) ⊦ |
# x0 = n0 + # x, n1 + # x0 = n2 + # x, x1(n1 + n0 + n) = x0(n0 + n), x0(n0 + n) ≠ x1(n2 + n), n0 ≠ 0, n1 ≠ 0, n2 ≠ 1, n2 ≠ 0, n + 1 < # x0, n < n2 + # x, n < # x0, # x < # x0, n < # x, 2 + n < n2 + # x, n + 1 < n2 + # x, ∀ n3. n3 < # x0 → x0(n3) = x1(n1 + n3), ∀ n3. n3 < # x → x(n3) = x0(n0 + n3) ⊦
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) ⊦ 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 + n < m0 → m + n < m0 + n0; (s)
| # x0 = n0 + # x, n1 + # x0 = n2 + # x, x1(n1 + n0 + n) = x0(n0 + n), x0(n0 + n) ≠ x1(n2 + n), n0 ≠ 0, n1 ≠ 0, n2 ≠ 1, n2 ≠ 0, n + 1 < # x0, n < n2 + # x, n < # x0, # x < # x0, n < # x, 2 + n < n2 + # x, n + 1 < n2 + # x, ∀ n3. n3 < # x0 → x0(n3) = x1(n1 + n3), ∀ n3. n3 < # x → x(n3) = x0(n0 + n3) ⊦ |
Used simplifier rules: ⊦ m + n = m + n0 ↔ n = n0; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic
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.