| ⊦ finp(σ) ∧ # σ = # σ1 → (σ + σ0 = σ1 + σ2 ↔ σ = σ1 ∧ σ0 = σ2) |
# σ = # σ1, ¬(σ + σ0 = σ1 + σ2 ↔ σ = σ1 ∧ σ0 = σ2), finp(σ) ⊦
| # σ = # σ1, ¬(σ + σ0 = σ1 + σ2 ↔ σ = σ1 ∧ σ0 = σ2), finp(σ) ⊦ |
# σ = # σ1, σ + σ0 = σ1 + σ2, finp(σ) ⊦ σ = σ1 ∧ σ0 = σ2
| # σ = # σ1, σ + σ0 = σ1 + σ2, finp(σ) ⊦ σ = σ1 ∧ σ0 = σ2 |
# ⌜x⌝ = # σ1, ⌜x⌝ + σ0 = σ1 + σ2, finp(⌜x⌝ ) ⊦ ⌜x⌝ = σ1 ∧ σ0 = σ2
Used simplifier rules: append-inf: ⊦ ⌜nf⌝ + σ = ⌜nf⌝ ; append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; size-inf: ⊦ # ⌜nf⌝ = ∞; stream('a) freely generated by ⌜ ⌝, ⌜ ⌝;; ⊦ ¬ finp(⌜nf⌝ ); (s)
| # ⌜x⌝ = # σ1, ⌜x⌝ + σ0 = σ1 + σ2, finp(⌜x⌝ ) ⊦ ⌜x⌝ = σ1 ∧ σ0 = σ2 |
⌜x⌝ + σ0 = σ1 + σ2, ⌜# x⌝ = # σ1 ⊦ ⌜x⌝ = σ1 ∧ σ0 = σ2
Used simplifier rules: size-fin: ⊦ # ⌜x⌝ = ⌜# x⌝ ; ⊦ finp(⌜x⌝ ); (s)
| ⌜x⌝ + σ0 = σ1 + σ2, ⌜# x⌝ = # σ1 ⊦ ⌜x⌝ = σ1 ∧ σ0 = σ2 |
⌜x⌝ + σ0 = ⌜x0⌝ + σ2, ⌜# x⌝ = # ⌜x0⌝ ⊦ ⌜x⌝ = ⌜x0⌝ ∧ σ0 = σ2
Used simplifier rules: size-inf: ⊦ # ⌜nf⌝ = ∞; stream('a) freely generated by ⌜ ⌝, ⌜ ⌝;; ⊦ ⌜n⌝ ≠ ∞; (s)
| ⌜x⌝ + σ0 = ⌜x0⌝ + σ2, ⌜# x⌝ = # ⌜x0⌝ ⊦ ⌜x⌝ = ⌜x0⌝ ∧ σ0 = σ2 |
# x = # x0, ⌜x⌝ + σ0 = ⌜x0⌝ + σ2 ⊦ x = x0 ∧ σ0 = σ2
Used simplifier rules: size-fin: ⊦ # ⌜x⌝ = ⌜# x⌝ ; ⊦ ⌜x⌝ = ⌜x0⌝ ↔ x = x0; (s) ⊦ ⌜n⌝ = ⌜n0⌝ ↔ n = n0; (s)
| # x = # x0, ⌜x⌝ + σ0 = ⌜x0⌝ + σ2 ⊦ x = x0 ∧ σ0 = σ2 |
# x = # x0, ⌜x⌝ + σ0 = ⌜x0⌝ + ⌜x1⌝ ⊦ x = x0 ∧ σ0 = ⌜x1⌝
# x = # x0, ⌜x⌝ + σ0 = ⌜x0⌝ + ⌜nf⌝ ⊦ x = x0 ∧ σ0 = ⌜nf⌝
Used simplifier rules: stream('a) freely generated by ⌜ ⌝, ⌜ ⌝;;
| # x = # x0, ⌜x⌝ + σ0 = ⌜x0⌝ + ⌜x1⌝ ⊦ x = x0 ∧ σ0 = ⌜x1⌝ |
Used simplifier rules: eq-stream-to-list-2-2: ⊦ ⌜x⌝ + ⌜y⌝ = ⌜x0⌝ + ⌜z⌝ ↔ x + y = x0 + z; append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; neq-fin-inf-02: ⊦ σ0 + ⌜x⌝ = σ + ⌜nf0⌝ ↔ σ0 = σ + ⌜nf0⌝ ; neq-fin-inf-01: ⊦ ⌜x⌝ ≠ σ + ⌜nf0⌝ ; append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; stream('a) freely generated by ⌜ ⌝, ⌜ ⌝;; ⊦ # x = # z → (x + y = z + y0 ↔ x = z ∧ y = y0); (ws) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ⌜x⌝ = ⌜x0⌝ ↔ x = x0; (s)
| # x = # x0, ⌜x⌝ + σ0 = ⌜x0⌝ + ⌜nf⌝ ⊦ x = x0 ∧ σ0 = ⌜nf⌝ |
# x = # x0, ⌜x⌝ + ⌜nf0⌝ = ⌜x0⌝ + ⌜nf⌝ ⊦ x = x0 ∧ ⌜nf0⌝ = ⌜nf⌝
Used simplifier rules: neq-fin-inf-02: ⊦ σ0 + ⌜x⌝ = σ + ⌜nf0⌝ ↔ σ0 = σ + ⌜nf0⌝ ; neq-fin-inf-01: ⊦ ⌜x⌝ ≠ σ + ⌜nf0⌝ ; append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; stream('a) freely generated by ⌜ ⌝, ⌜ ⌝;;
| # x = # x0, ⌜x⌝ + ⌜nf0⌝ = ⌜x0⌝ + ⌜nf⌝ ⊦ x = x0 ∧ ⌜nf0⌝ = ⌜nf⌝ |
# x = # x0, ⌜x⌝ + ⌜nf0⌝ = ⌜x0⌝ + ⌜nf⌝ ⊦ x = x0 ∧ nf0 = nf
Used simplifier rules: ⊦ ⌜nf⌝ = ⌜nf0⌝ ↔ nf = nf0; (s)
| # x = # x0, ⌜x⌝ + ⌜nf0⌝ = ⌜x0⌝ + ⌜nf⌝ ⊦ x = x0 ∧ nf0 = nf |
#(a + x1) = # x0, ⌜a + x1⌝ + ⌜nf0⌝ = ⌜x0⌝ + ⌜nf⌝ , ∀ x0, nf0, nf. # x1 = # x0 ∧ ⌜x1⌝ + ⌜nf0⌝ = ⌜x0⌝ + ⌜nf⌝ → x1 = x0 ∧ nf0 = nf ⊦ a + x1 = x0 ∧ nf0 = nf
Used simplifier rules: empty: ⊦ ⌜[]⌝ = []; empty-append: ⊦ [] + σ = σ; append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; list('a) freely generated by [], +;; ⊦ # [] = 0; (s) ⊦ # x = 0 ↔ x = []; (s) ⊦ ⌜nf⌝ = ⌜nf0⌝ ↔ nf = nf0; (s)
| #(a + x1) = # x0, ⌜a + x1⌝ + ⌜nf0⌝ = ⌜x0⌝ + ⌜nf⌝ , ∀ x0, nf0, nf. # x1 = # x0 ∧ ⌜x1⌝ + ⌜nf0⌝ = ⌜x0⌝ + ⌜nf⌝ → x1 = x0 ∧ nf0 = nf ⊦ a + x1 = x0 ∧ nf0 = nf |
(⌜a '⌝ + ⌜x1⌝ ) + ⌜nf0⌝ = ⌜x0⌝ + ⌜nf⌝ , 1 + # x1 = # x0, ∀ x0, nf0, nf. # x1 = # x0 ∧ ⌜x1⌝ + ⌜nf0⌝ = ⌜x0⌝ + ⌜nf⌝ → x1 = x0 ∧ nf0 = nf ⊦ a ' + x1 = x0 ∧ nf0 = nf
Used simplifier rules: append-finfin: ⊦ ⌜x + y⌝ = ⌜x⌝ + ⌜y⌝ ; ⊦ a + x = a ' + x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ # a ' = 0 +1; (s) ⊦ #(x + y) = # x + # y; (s)
| (⌜a '⌝ + ⌜x1⌝ ) + ⌜nf0⌝ = ⌜x0⌝ + ⌜nf⌝ , 1 + # x1 = # x0, ∀ x0, nf0, nf. # x1 = # x0 ∧ ⌜x1⌝ + ⌜nf0⌝ = ⌜x0⌝ + ⌜nf⌝ → x1 = x0 ∧ nf0 = nf ⊦ a ' + x1 = x0 ∧ nf0 = nf |
1 + # x1 = #(a0 + x), (⌜a '⌝ + ⌜x1⌝ ) + ⌜nf0⌝ = ⌜a0 + x⌝ + ⌜nf⌝ , ∀ x0, nf0, nf. # x1 = # x0 ∧ ⌜x1⌝ + ⌜nf0⌝ = ⌜x0⌝ + ⌜nf⌝ → x1 = x0 ∧ nf0 = nf, ∀ a, x1, nf0, nf. (⌜a '⌝ + ⌜x1⌝ ) + ⌜nf0⌝ = ⌜x⌝ + ⌜nf⌝ ∧ 1 + # x1 = # x ∧ (∀ x0, nf0, nf. # x1 = # x0 ∧ ⌜x1⌝ + ⌜nf0⌝ = ⌜x0⌝ + ⌜nf⌝ → x1 = x0 ∧ nf0 = nf) → a ' + x1 = x ∧ nf0 = nf ⊦ a ' + x1 = a0 + x ∧ nf0 = nf
Used simplifier rules: empty: ⊦ ⌜[]⌝ = []; empty-append: ⊦ [] + σ = σ; append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; list('a) freely generated by [], +;; ⊦ # [] = 0; (s) ⊦ m + 1 ≠ 0; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic
| 1 + # x1 = #(a0 + x), (⌜a '⌝ + ⌜x1⌝ ) + ⌜nf0⌝ = ⌜a0 + x⌝ + ⌜nf⌝ , ∀ x0, nf0, nf. # x1 = # x0 ∧ ⌜x1⌝ + ⌜nf0⌝ = ⌜x0⌝ + ⌜nf⌝ → x1 = x0 ∧ nf0 = nf, ∀ a, x1, nf0, nf. (⌜a '⌝ + ⌜x1⌝ ) + ⌜nf0⌝ = ⌜x⌝ + ⌜nf⌝ ∧ 1 + # x1 = # x ∧ (∀ x0, nf0, nf. # x1 = # x0 ∧ ⌜x1⌝ + ⌜nf0⌝ = ⌜x0⌝ + ⌜nf⌝ → x1 = x0 ∧ nf0 = nf) → a ' + x1 = x ∧ nf0 = nf ⊦ a ' + x1 = a0 + x ∧ nf0 = nf |
# x1 = # x, (⌜a '⌝ + ⌜x1⌝ ) + ⌜nf0⌝ = (⌜a0 '⌝ + ⌜x⌝ ) + ⌜nf⌝ , ∀ a, x1, nf0, nf. (⌜a '⌝ + ⌜x1⌝ ) + ⌜nf0⌝ = ⌜x⌝ + ⌜nf⌝ ∧ 1 + # x1 = # x ∧ (∀ x0, nf0, nf. # x1 = # x0 ∧ ⌜x1⌝ + ⌜nf0⌝ = ⌜x0⌝ + ⌜nf⌝ → x1 = x0 ∧ nf0 = nf) → a ' + x1 = x ∧ nf0 = nf, ∀ x0, nf0, nf. # x = # x0 ∧ ⌜x1⌝ + ⌜nf0⌝ = ⌜x0⌝ + ⌜nf⌝ → x1 = x0 ∧ nf0 = nf ⊦ a ' + x1 = a0 ' + x ∧ nf0 = nf
Used simplifier rules: append-finfin: ⊦ ⌜x + y⌝ = ⌜x⌝ + ⌜y⌝ ; ⊦ a + x = a ' + x; (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m + n = m + n0 ↔ n = n0; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ # a ' = 0 +1; (s) ⊦ #(x + y) = # x + # y; (s)
| # x1 = # x, (⌜a '⌝ + ⌜x1⌝ ) + ⌜nf0⌝ = (⌜a0 '⌝ + ⌜x⌝ ) + ⌜nf⌝ , ∀ a, x1, nf0, nf. (⌜a '⌝ + ⌜x1⌝ ) + ⌜nf0⌝ = ⌜x⌝ + ⌜nf⌝ ∧ 1 + # x1 = # x ∧ (∀ x0, nf0, nf. # x1 = # x0 ∧ ⌜x1⌝ + ⌜nf0⌝ = ⌜x0⌝ + ⌜nf⌝ → x1 = x0 ∧ nf0 = nf) → a ' + x1 = x ∧ nf0 = nf, ∀ x0, nf0, nf. # x = # x0 ∧ ⌜x1⌝ + ⌜nf0⌝ = ⌜x0⌝ + ⌜nf⌝ → x1 = x0 ∧ nf0 = nf ⊦ a ' + x1 = a0 ' + x ∧ nf0 = nf |
# x1 = # x, (⌜a '⌝ + ⌜x1⌝ ) + ⌜nf0⌝ = (⌜a0 '⌝ + ⌜x⌝ ) + ⌜nf⌝ , ∀ x0, nf0, nf. # x = # x0 ∧ ⌜x1⌝ + ⌜nf0⌝ = ⌜x0⌝ + ⌜nf⌝ → x1 = x0 ∧ nf0 = nf ⊦ a ' + x1 = a0 ' + x ∧ nf0 = nf
| # x1 = # x, (⌜a '⌝ + ⌜x1⌝ ) + ⌜nf0⌝ = (⌜a0 '⌝ + ⌜x⌝ ) + ⌜nf⌝ , ∀ x0, nf0, nf. # x = # x0 ∧ ⌜x1⌝ + ⌜nf0⌝ = ⌜x0⌝ + ⌜nf⌝ → x1 = x0 ∧ nf0 = nf ⊦ a ' + x1 = a0 ' + x ∧ nf0 = nf |
⊦ a ' + x = a0 ' + y ↔ a = a0 ∧ x = y
# x1 = # x, (⌜a '⌝ + ⌜x1⌝ ) + ⌜nf0⌝ = (⌜a0 '⌝ + ⌜x⌝ ) + ⌜nf⌝ , ∀ x0, nf0, nf. # x = # x0 ∧ ⌜x1⌝ + ⌜nf0⌝ = ⌜x0⌝ + ⌜nf⌝ → x1 = x0 ∧ nf0 = nf ⊦ (a = a0 ∧ x1 = x) ∧ nf0 = nf
Used terms: a, x1, a0, x
| ⊦ a ' + x = a0 ' + y ↔ a = a0 ∧ x = y |
| # x1 = # x, (⌜a '⌝ + ⌜x1⌝ ) + ⌜nf0⌝ = (⌜a0 '⌝ + ⌜x⌝ ) + ⌜nf⌝ , ∀ x0, nf0, nf. # x = # x0 ∧ ⌜x1⌝ + ⌜nf0⌝ = ⌜x0⌝ + ⌜nf⌝ → x1 = x0 ∧ nf0 = nf ⊦ (a = a0 ∧ x1 = x) ∧ nf0 = nf |
# x1 = # x, (⌜a '⌝ + ⌜x1⌝ ) + ⌜nf0⌝ = (⌜a0 '⌝ + ⌜x⌝ ) + ⌜nf⌝ , ∀ x0, nf0, nf. # x = # x0 ∧ ⌜x1⌝ + ⌜nf0⌝ = ⌜x0⌝ + ⌜nf⌝ → x1 = x0 ∧ nf0 = nf ⊦ a = a0 ∧ x1 = x ∧ nf0 = nf
| # x1 = # x, (⌜a '⌝ + ⌜x1⌝ ) + ⌜nf0⌝ = (⌜a0 '⌝ + ⌜x⌝ ) + ⌜nf⌝ , ∀ x0, nf0, nf. # x = # x0 ∧ ⌜x1⌝ + ⌜nf0⌝ = ⌜x0⌝ + ⌜nf⌝ → x1 = x0 ∧ nf0 = nf ⊦ a = a0 ∧ x1 = x ∧ nf0 = nf |
⊦ (σ + σ1) + σ2 = σ + σ1 + σ2
# x1 = # x, ⌜a '⌝ + ⌜x1⌝ + ⌜nf0⌝ = (⌜a0 '⌝ + ⌜x⌝ ) + ⌜nf⌝ , ∀ x0, nf0, nf. # x = # x0 ∧ ⌜x1⌝ + ⌜nf0⌝ = ⌜x0⌝ + ⌜nf⌝ → x1 = x0 ∧ nf0 = nf ⊦ a = a0 ∧ x1 = x ∧ nf0 = nf
Used terms: ⌜nf0⌝ , ⌜x1⌝ , ⌜a '⌝
| ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2 |
| # x1 = # x, ⌜a '⌝ + ⌜x1⌝ + ⌜nf0⌝ = (⌜a0 '⌝ + ⌜x⌝ ) + ⌜nf⌝ , ∀ x0, nf0, nf. # x = # x0 ∧ ⌜x1⌝ + ⌜nf0⌝ = ⌜x0⌝ + ⌜nf⌝ → x1 = x0 ∧ nf0 = nf ⊦ a = a0 ∧ x1 = x ∧ nf0 = nf |
⊦ (σ + σ1) + σ2 = σ + σ1 + σ2
# x1 = # x, ⌜a '⌝ + ⌜x1⌝ + ⌜nf0⌝ = ⌜a0 '⌝ + ⌜x⌝ + ⌜nf⌝ , ∀ x0, nf0, nf. # x = # x0 ∧ ⌜x1⌝ + ⌜nf0⌝ = ⌜x0⌝ + ⌜nf⌝ → x1 = x0 ∧ nf0 = nf ⊦ a = a0 ∧ x1 = x ∧ nf0 = nf
Used terms: ⌜nf⌝ , ⌜x⌝ , ⌜a0 '⌝
| ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2 |
| # x1 = # x, ⌜a '⌝ + ⌜x1⌝ + ⌜nf0⌝ = ⌜a0 '⌝ + ⌜x⌝ + ⌜nf⌝ , ∀ x0, nf0, nf. # x = # x0 ∧ ⌜x1⌝ + ⌜nf0⌝ = ⌜x0⌝ + ⌜nf⌝ → x1 = x0 ∧ nf0 = nf ⊦ a = a0 ∧ x1 = x ∧ nf0 = nf |
⊦ ⌜a '⌝ + σ = ⌜a0 '⌝ + σ0 ↔ a = a0 ∧ σ = σ0
# x1 = # x, ⌜x1⌝ + ⌜nf0⌝ = ⌜x⌝ + ⌜nf⌝ , a = a0, ∀ x0, nf0, nf. # x = # x0 ∧ ⌜x1⌝ + ⌜nf0⌝ = ⌜x0⌝ + ⌜nf⌝ → x1 = x0 ∧ nf0 = nf ⊦ a = a0 ∧ x1 = x ∧ nf0 = nf
Used terms: ⌜x⌝ + ⌜nf⌝ , a0, ⌜x1⌝ + ⌜nf0⌝ , a
| ⊦ ⌜a '⌝ + σ = ⌜a0 '⌝ + σ0 ↔ a = a0 ∧ σ = σ0 |
| # x1 = # x, ⌜x1⌝ + ⌜nf0⌝ = ⌜x⌝ + ⌜nf⌝ , a = a0, ∀ x0, nf0, nf. # x = # x0 ∧ ⌜x1⌝ + ⌜nf0⌝ = ⌜x0⌝ + ⌜nf⌝ → x1 = x0 ∧ nf0 = nf ⊦ a = a0 ∧ x1 = x ∧ nf0 = nf |
# x1 = # x, ⌜x1⌝ + ⌜nf0⌝ = ⌜x⌝ + ⌜nf⌝ , ∀ x0, nf0, nf. # x = # x0 ∧ ⌜x1⌝ + ⌜nf0⌝ = ⌜x0⌝ + ⌜nf⌝ → x1 = x0 ∧ nf0 = nf ⊦ x1 = x ∧ nf0 = nf
| # x1 = # x, ⌜x1⌝ + ⌜nf0⌝ = ⌜x⌝ + ⌜nf⌝ , ∀ x0, nf0, nf. # x = # x0 ∧ ⌜x1⌝ + ⌜nf0⌝ = ⌜x0⌝ + ⌜nf⌝ → x1 = x0 ∧ nf0 = nf ⊦ x1 = x ∧ nf0 = nf |
Used terms: x, nf0, nf
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.