| ⊦ lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) = ⌜nf⌝ |
lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) ≠ ⌜nf⌝ ⊦
| lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) ≠ ⌜nf⌝ ⊦ |
⊦ mon(σσ) ∧ σσ ≠ [] → (∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ lim(σσ)) ∧ (∀ m. ¬ # lim(σσ) < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ ⌜lim(σσ).take(m)⌝ ⊑ σσ(n)))
lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) ≠ ⌜nf⌝ , mon(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) ∧ ⌜λ n. ⌜nf.take(n)⌝ ⌝ ≠ [] → (∀ n. ⌜n⌝ < # ⌜λ n. ⌜nf.take(n)⌝ ⌝ → ⌜λ n. ⌜nf.take(n)⌝ ⌝ (n) ⊑ lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ )) ∧ (∀ m. ¬ # lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜n⌝ < # ⌜λ n. ⌜nf.take(n)⌝ ⌝ ∧ ⌜lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ).take(m)⌝ ⊑ ⌜λ n. ⌜nf.take(n)⌝ ⌝ (n))) ⊦
Used terms: ⌜λ n. ⌜nf.take(n)⌝ ⌝
| ⊦ mon(σσ) ∧ σσ ≠ [] → (∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ lim(σσ)) ∧ (∀ m. ¬ # lim(σσ) < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ ⌜lim(σσ).take(m)⌝ ⊑ σσ(n))) |
| lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) ≠ ⌜nf⌝ , mon(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) ∧ ⌜λ n. ⌜nf.take(n)⌝ ⌝ ≠ [] → (∀ n. ⌜n⌝ < # ⌜λ n. ⌜nf.take(n)⌝ ⌝ → ⌜λ n. ⌜nf.take(n)⌝ ⌝ (n) ⊑ lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ )) ∧ (∀ m. ¬ # lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜n⌝ < # ⌜λ n. ⌜nf.take(n)⌝ ⌝ ∧ ⌜lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ).take(m)⌝ ⊑ ⌜λ n. ⌜nf.take(n)⌝ ⌝ (n))) ⊦ |
lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) ≠ ⌜nf⌝ , mon(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) → (∀ n. ⌜nf.take(n)⌝ ⊑ lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ )) ∧ (∀ m. ¬ # lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ).take(m) ⊑ nf.take(n))) ⊦
Used simplifier rules: ⊦ ⌜x⌝ ⊑ ⌜y⌝ ↔ x ⊑ y; (s) ⊦ ⌜nf⌝ (n) = nf(n); (s) ⊦ ⌜m⌝ < ∞; (s) ⊦ # ⌜nf⌝ = ∞; (s) ⊦ [] ≠ ⌜nf⌝ ; (s)
| lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) ≠ ⌜nf⌝ , mon(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) → (∀ n. ⌜nf.take(n)⌝ ⊑ lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ )) ∧ (∀ m. ¬ # lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ).take(m) ⊑ nf.take(n))) ⊦ |
lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) ≠ ⌜nf⌝ , ¬ mon(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) ⊦
lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) ≠ ⌜nf⌝ , ∀ n. ⌜nf.take(n)⌝ ⊑ lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ).take(m) ⊑ nf.take(n)) ⊦
| lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) ≠ ⌜nf⌝ , ¬ mon(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) ⊦ |
⊦ mon(⌜λ n. ⌜nf.take(n)⌝ ⌝ )
Used terms: nf
| ⊦ mon(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) |
| lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) ≠ ⌜nf⌝ , ∀ n. ⌜nf.take(n)⌝ ⊑ lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ).take(m) ⊑ nf.take(n)) ⊦ |
lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) = ⌜x⌝ , lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) ≠ ⌜nf⌝ , ∀ m. ¬ # lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ).take(m) ⊑ nf.take(n)), ∀ n. ⌜nf.take(n)⌝ ⊑ lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) ⊦
lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) = ⌜nf0⌝ , lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) ≠ ⌜nf⌝ , ∀ m. ¬ # lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ).take(m) ⊑ nf.take(n)), ∀ n. ⌜nf.take(n)⌝ ⊑ lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) ⊦
Used simplifier rules: Stream[A] freely generated by ⌝, ⌝;
| lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) = ⌜x⌝ , lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) ≠ ⌜nf⌝ , ∀ m. ¬ # lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ).take(m) ⊑ nf.take(n)), ∀ n. ⌜nf.take(n)⌝ ⊑ lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) ⊦ |
lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) = ⌜x⌝ , ∀ m. ¬ # x < m → (∃ n. x.take(m) ⊑ nf.take(n)), ∀ n. nf.take(n) ⊑ x ⊦
Used simplifier rules: ⊦ ⌜x⌝ ⊑ ⌜y⌝ ↔ x ⊑ y; (s) ⊦ ⌜x⌝ .take(n) = x.take(n); (s) ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ ⌜x⌝ ≠ ⌜nf⌝ ; (s)
| lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) = ⌜x⌝ , ∀ m. ¬ # x < m → (∃ n. x.take(m) ⊑ nf.take(n)), ∀ n. nf.take(n) ⊑ x ⊦ |
lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) = ⌜x⌝ , nf.take(# x + 1) ⊑ x, ∀ m. ¬ # x < m → (∃ n. x.take(m) ⊑ nf.take(n)) ⊦
Used terms: # x + 1
| lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) = ⌜x⌝ , nf.take(# x + 1) ⊑ x, ∀ m. ¬ # x < m → (∃ n. x.take(m) ⊑ nf.take(n)) ⊦ |
⊦ x ⊑ y ↔ (∃ z. x + z = y)
lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) = ⌜x⌝ , ∀ m. ¬ # x < m → (∃ n. x.take(m) ⊑ nf.take(n)), ∃ z. nf.take(# x + 1) + z = x ⊦
Used terms: nf.take(# x + 1), x
| ⊦ x ⊑ y ↔ (∃ z. x + z = y) |
| lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) = ⌜x⌝ , ∀ m. ¬ # x < m → (∃ n. x.take(m) ⊑ nf.take(n)), ∃ z. nf.take(# x + 1) + z = x ⊦ |
nf.take(# x + 1) + x0 = x, lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) = ⌜x⌝ , ∀ m. ¬ # x < m → (∃ n. x.take(m) ⊑ nf.take(n)) ⊦
| nf.take(# x + 1) + x0 = x, lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) = ⌜x⌝ , ∀ m. ¬ # x < m → (∃ n. x.take(m) ⊑ nf.take(n)) ⊦ |
⊦ x = y ↔ # x = # y ∧ (∀ n. n < # x → x(n) = y(n))
Used simplifier rules: ⊦ #(x + y) = # x + # y; (s) ⊦ # nf.take(n) = n; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ m = m + n ↔ n = 0; (s) ⊦ m + n = 0 ↔ m = 0 ∧ n = 0; (ws) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: nf.take(# x + 1) + x0, x
| ⊦ x = y ↔ # x = # y ∧ (∀ n. n < # x → x(n) = y(n)) |
| lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) = ⌜nf0⌝ , lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) ≠ ⌜nf⌝ , ∀ m. ¬ # lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ).take(m) ⊑ nf.take(n)), ∀ n. ⌜nf.take(n)⌝ ⊑ lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) ⊦ |
lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) = ⌜nf0⌝ , nf0 ≠ nf, ∀ n. ⌜nf.take(n)⌝ ⊑ ⌜nf0⌝ , ∀ m. ∃ n. nf0.take(m) ⊑ nf.take(n) ⊦
Used simplifier rules: ⊦ ⌜nf⌝ .take(n) = nf.take(n); (s) ⊦ ¬ ∞ < n∞; (s) ⊦ # ⌜nf⌝ = ∞; (s) ⊦ ⌜nf⌝ = ⌜nf0⌝ ↔ nf = nf0; (s)
| lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) = ⌜nf0⌝ , nf0 ≠ nf, ∀ n. ⌜nf.take(n)⌝ ⊑ ⌜nf0⌝ , ∀ m. ∃ n. nf0.take(m) ⊑ nf.take(n) ⊦ |
lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) = ⌜nf0⌝ , nf0(m) ≠ nf(m), ∀ m. ∃ n. nf0.take(m) ⊑ nf.take(n), ∀ n. ⌜nf.take(n)⌝ ⊑ ⌜nf0⌝ ⊦
| lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) = ⌜nf0⌝ , nf0(m) ≠ nf(m), ∀ m. ∃ n. nf0.take(m) ⊑ nf.take(n), ∀ n. ⌜nf.take(n)⌝ ⊑ ⌜nf0⌝ ⊦ |
lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) = ⌜nf0⌝ , nf0(m) ≠ nf(m), ⌜nf.take(m + 1)⌝ ⊑ ⌜nf0⌝ , ∀ m. ∃ n. nf0.take(m) ⊑ nf.take(n) ⊦
Used terms: m + 1
| lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) = ⌜nf0⌝ , nf0(m) ≠ nf(m), ⌜nf.take(m + 1)⌝ ⊑ ⌜nf0⌝ , ∀ m. ∃ n. nf0.take(m) ⊑ nf.take(n) ⊦ |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) = ⌜nf0⌝ , nf0(m) ≠ nf(m), ∀ m. ∃ n. nf0.take(m) ⊑ nf.take(n), ∃ σ1. ⌜nf.take(m + 1)⌝ + σ1 = ⌜nf0⌝ ⊦
Used terms: ⌜nf.take(m + 1)⌝ , ⌜nf0⌝
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) = ⌜nf0⌝ , nf0(m) ≠ nf(m), ∀ m. ∃ n. nf0.take(m) ⊑ nf.take(n), ∃ σ1. ⌜nf.take(m + 1)⌝ + σ1 = ⌜nf0⌝ ⊦ |
lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) = ⌜nf.take(m + 1)⌝ + ⌜nf1⌝ , (nf.take(m + 1) + nf1)(m) ≠ nf(m), ∀ m0. ∃ n. (nf.take(m + 1) + nf1).take(m0) ⊑ nf.take(n) ⊦
Used simplifier rules: ⊦ ⌜nf⌝ .f = nf; (s) ⊦ ⌜x + nf⌝ = ⌜x⌝ + ⌜nf⌝ ; (s) ⊦ finp(σ) ↔ ¬(∃ nf. ⌜nf⌝ = σ); (ss) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ ⌜x⌝ + σ = ⌜nf⌝ ↔ ¬ finp(σ) ∧ x + σ.f = nf; (as)
| lim(⌜λ n. ⌜nf.take(n)⌝ ⌝ ) = ⌜nf.take(m + 1)⌝ + ⌜nf1⌝ , (nf.take(m + 1) + nf1)(m) ≠ nf(m), ∀ m0. ∃ n. (nf.take(m + 1) + nf1).take(m0) ⊑ nf.take(n) ⊦ |
⊦ x + nf = (λ n. (n < # x ⊃ x(n);nf(n - # x)))
Used simplifier rules: ⊦ m < n + 1 ↔ ¬ n < m; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic m < n ⊦ nf.take(n)(m) = nf(m); (s) ⊦ # nf.take(n) = n; (s) ⊦ ¬ n < n; (s) Used terms: nf.take(m + 1), nf1
| ⊦ x + nf = (λ n. (n < # x ⊃ x(n);nf(n - # x))) |
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.