| ⊦ 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: ⊦ 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: ⊦ 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] ⊦ |
# x0 = n0 + # x, # x1 = n2 + # x, n2 + # x = n1 + # x0, x[n] = x1[n1 + n0 + n], x[n] = x0[n0 + n], x[n] ≠ x1[n2 + n], n0 ≠ 0, n1 ≠ 0, n2 ≠ 0, n2 ≠ 1, n + 1 < # x0, n + 1 < n2 + # x, n < n2 + # x, n < # x0, # x + 1 < n2 + # x, # x < n2 + # x, # x < # x0, # x0 < n2 + # x, n < # x, 2 + n < n2 + # x, ∀ n3. n3 < # x0 → x0[n3] = x1[n1 + n3], ∀ n3. n3 < # x → x[n3] = x0[n0 + n3] ⊦
| # x0 = n0 + # x, # x1 = n2 + # x, n2 + # x = n1 + # x0, x[n] = x1[n1 + n0 + n], x[n] = x0[n0 + n], x[n] ≠ x1[n2 + n], n0 ≠ 0, n1 ≠ 0, n2 ≠ 0, n2 ≠ 1, n + 1 < # x0, n + 1 < n2 + # x, n < n2 + # x, n < # x0, # x + 1 < n2 + # x, # x < n2 + # x, # x < # x0, # x0 < n2 + # x, n < # x, 2 + n < n2 + # x, ∀ n3. n3 < # x0 → x0[n3] = x1[n1 + n3], ∀ n3. n3 < # x → x[n3] = x0[n0 + n3] ⊦ |
# x1 = n2 + # x, # x0 = n0 + # x, n2 + # x = n1 + n0 + # x, 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 < n2 + # x, n < # x, n0 + # x < n2 + # x, # x < n0 + # x, # x < n2 + # x, # x + 1 < n2 + # x, n < n0 + # x, n < n2 + # x, n + 1 < n2 + # x, n + 1 < n0 + # x, ∀ n3. n3 < # x → x[n3] = x0[n0 + n3], ∀ n3. n3 < n0 + # x → x0[n3] = x1[n1 + n3] ⊦
| # x1 = n2 + # x, # x0 = n0 + # x, n2 + # x = n1 + n0 + # x, 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 < n2 + # x, n < # x, n0 + # x < n2 + # x, # x < n0 + # x, # x < n2 + # x, # x + 1 < n2 + # x, n < n0 + # x, n < n2 + # x, n + 1 < n2 + # x, n + 1 < n0 + # x, ∀ n3. n3 < # x → x[n3] = x0[n0 + n3], ∀ n3. n3 < n0 + # x → x0[n3] = x1[n1 + n3] ⊦ |
n < n0 ⊦ m + (* n) = m0 + (* n0) ↔ m = m0 + (n0 - n)
Used simplifier rules: ⊦ m + n - m = n; (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic Used terms: n2, # x, n1, n0 + # x
| n < n0 ⊦ m + (* n) = m0 + (* n0) ↔ m = m0 + (n0 - 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.