| ⊦ mon(lf) → cont(lift(lf)) |
mon(lf), ¬ cont(lift(lf)) ⊦
| mon(lf), ¬ cont(lift(lf)) ⊦ |
⊦ cont(f) ↔ mon(f) ∧ pbd(f)
mon(lf), ¬ mon(lift(lf)) ∨ ¬ pbd(lift(lf)) ⊦
Used terms: lift(lf)
| ⊦ cont(f) ↔ mon(f) ∧ pbd(f) |
| mon(lf), ¬ mon(lift(lf)) ∨ ¬ pbd(lift(lf)) ⊦ |
mon(lf), ¬(α1 ⊑ α2 → lift(lf)(α1) ⊑ lift(lf)(α2)) ∨ ¬ pbd(lift(lf)) ⊦
Used simplifier rules: mon-def: ⊦ mon(f) ↔ (∀ α1, α2. α1 ⊑ α2 → f(α1) ⊑ f(α2));
| mon(lf), ¬(α1 ⊑ α2 → lift(lf)(α1) ⊑ lift(lf)(α2)) ∨ ¬ pbd(lift(lf)) ⊦ |
mon(lf), α1 ⊑ α2, ¬ lift(lf)(α1) ⊑ lift(lf)(α2) ⊦
mon(lf), ¬ pbd(lift(lf)) ⊦
| mon(lf), α1 ⊑ α2, ¬ lift(lf)(α1) ⊑ lift(lf)(α2) ⊦ |
α2 = ⌜al⌝ , mon(lf), α1 ⊑ α2, ¬ lift(lf)(α1) ⊑ lift(lf)(α2) ⊦
α2 = ⌜af⌝ , mon(lf), α1 ⊑ α2, ¬ lift(lf)(α1) ⊑ lift(lf)(α2) ⊦
Used simplifier rules: Stream[A] freely generated by ⌝, ⌝;
| α2 = ⌜al⌝ , mon(lf), α1 ⊑ α2, ¬ lift(lf)(α1) ⊑ lift(lf)(α2) ⊦ |
mon(lf), α1 ⊑ ⌜al⌝ , ¬ lift(lf)(α1) ⊑ ⌜lf(al)⌝ ⊦
Used simplifier rules: lift-fin: ⊦ lift(lf)(⌜al⌝ ) = ⌜lf(al)⌝ ;
| mon(lf), α1 ⊑ ⌜al⌝ , ¬ lift(lf)(α1) ⊑ ⌜lf(al)⌝ ⊦ |
α1 = ⌜al0⌝ , mon(lf), α1 ⊑ ⌜al⌝ , ¬ lift(lf)(α1) ⊑ ⌜lf(al)⌝ ⊦
Used simplifier rules: Stream[A] freely generated by ⌝, ⌝; ⊦ ¬ ⌜nf⌝ ⊑ ⌜x⌝ ; (s)
| α1 = ⌜al0⌝ , mon(lf), α1 ⊑ ⌜al⌝ , ¬ lift(lf)(α1) ⊑ ⌜lf(al)⌝ ⊦ |
mon(lf), al0 ⊑ al, ¬ lf(al0) ⊑ lf(al) ⊦
Used simplifier rules: lift-fin: ⊦ lift(lf)(⌜al⌝ ) = ⌜lf(al)⌝ ; ⊦ ⌜x⌝ ⊑ ⌜y⌝ ↔ x ⊑ y; (s)
| mon(lf), al0 ⊑ al, ¬ lf(al0) ⊑ lf(al) ⊦ |
⊦ mon(lf) ↔ (∀ al1, al2. al1 ⊑ al2 → lf(al1) ⊑ lf(al2))
al0 ⊑ al, ¬ lf(al0) ⊑ lf(al), ∀ al1, al2. al1 ⊑ al2 → lf(al1) ⊑ lf(al2) ⊦
Used terms: lf
| ⊦ mon(lf) ↔ (∀ al1, al2. al1 ⊑ al2 → lf(al1) ⊑ lf(al2)) |
| al0 ⊑ al, ¬ lf(al0) ⊑ lf(al), ∀ al1, al2. al1 ⊑ al2 → lf(al1) ⊑ lf(al2) ⊦ |
Used terms: al0, al
| α2 = ⌜af⌝ , mon(lf), α1 ⊑ α2, ¬ lift(lf)(α1) ⊑ lift(lf)(α2) ⊦ |
mon(lf), α1 ⊑ ⌜af⌝ , ¬ lift(lf)(α1) ⊑ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) ⊦
Used simplifier rules: lift-inf: ⊦ lift(lf)(⌜af⌝ ) = lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ );
| mon(lf), α1 ⊑ ⌜af⌝ , ¬ lift(lf)(α1) ⊑ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) ⊦ |
α1 = ⌜al⌝ , mon(lf), α1 ⊑ ⌜af⌝ , ¬ lift(lf)(α1) ⊑ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) ⊦
Used simplifier rules: lift-inf: ⊦ lift(lf)(⌜af⌝ ) = lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ); Stream[A] freely generated by ⌝, ⌝; ⊦ ⌜nf⌝ ⊑ ⌜nf0⌝ ↔ nf = nf0; (s) ⊦ σ ⊑ σ; (s)
| α1 = ⌜al⌝ , mon(lf), α1 ⊑ ⌜af⌝ , ¬ lift(lf)(α1) ⊑ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) ⊦ |
mon(lf), ⌜al⌝ ⊑ ⌜af⌝ , ¬ ⌜lf(al)⌝ ⊑ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) ⊦
Used simplifier rules: lift-fin: ⊦ lift(lf)(⌜al⌝ ) = ⌜lf(al)⌝ ;
| mon(lf), ⌜al⌝ ⊑ ⌜af⌝ , ¬ ⌜lf(al)⌝ ⊑ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) ⊦ |
⊦ mon(σσ) ∧ σσ ≠ [] → (∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ lim(σσ)) ∧ (∀ m. ¬ # lim(σσ) < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ ⌜lim(σσ).take(m)⌝ ⊑ σσ(n)))
mon(lf), ⌜al⌝ ⊑ ⌜af⌝ , ¬ ⌜lf(al)⌝ ⊑ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ), mon(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) ∧ ⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ≠ [] → (∀ n. ⌜n⌝ < # ⌜λ n. ⌜lf(af.take(n))⌝ ⌝ → ⌜λ n. ⌜lf(af.take(n))⌝ ⌝ (n) ⊑ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ )) ∧ (∀ m. ¬ # lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜n⌝ < # ⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ∧ ⌜lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜λ n. ⌜lf(af.take(n))⌝ ⌝ (n))) ⊦
Used terms: ⌜λ n. ⌜lf(af.take(n))⌝ ⌝
| ⊦ mon(σσ) ∧ σσ ≠ [] → (∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ lim(σσ)) ∧ (∀ m. ¬ # lim(σσ) < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ ⌜lim(σσ).take(m)⌝ ⊑ σσ(n))) |
| mon(lf), ⌜al⌝ ⊑ ⌜af⌝ , ¬ ⌜lf(al)⌝ ⊑ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ), mon(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) ∧ ⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ≠ [] → (∀ n. ⌜n⌝ < # ⌜λ n. ⌜lf(af.take(n))⌝ ⌝ → ⌜λ n. ⌜lf(af.take(n))⌝ ⌝ (n) ⊑ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ )) ∧ (∀ m. ¬ # lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜n⌝ < # ⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ∧ ⌜lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜λ n. ⌜lf(af.take(n))⌝ ⌝ (n))) ⊦ |
mon(lf), ⌜al⌝ ⊑ ⌜af⌝ , ¬ ⌜lf(al)⌝ ⊑ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ), mon(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) → (∀ n. ⌜lf(af.take(n))⌝ ⊑ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ )) ∧ (∀ m. ¬ # lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ).take(m) ⊑ lf(af.take(n)))) ⊦
Used simplifier rules: ⊦ ⌜x⌝ ⊑ ⌜y⌝ ↔ x ⊑ y; (s) ⊦ ⌜nf⌝ (n) = nf(n); (s) ⊦ ⌜m⌝ < ∞; (s) ⊦ # ⌜nf⌝ = ∞; (s) ⊦ [] ≠ ⌜nf⌝ ; (s)
| mon(lf), ⌜al⌝ ⊑ ⌜af⌝ , ¬ ⌜lf(al)⌝ ⊑ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ), mon(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) → (∀ n. ⌜lf(af.take(n))⌝ ⊑ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ )) ∧ (∀ m. ¬ # lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ).take(m) ⊑ lf(af.take(n)))) ⊦ |
⊦ mon(lf) ↔ (∀ af. mon(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ))
⌜al⌝ ⊑ ⌜af⌝ , ¬ ⌜lf(al)⌝ ⊑ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ), mon(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) → (∀ n. ⌜lf(af.take(n))⌝ ⊑ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ )) ∧ (∀ m. ¬ # lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ).take(m) ⊑ lf(af.take(n)))), ∀ af. mon(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) ⊦
Used terms: lf
| ⊦ mon(lf) ↔ (∀ af. mon(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ )) |
| ⌜al⌝ ⊑ ⌜af⌝ , ¬ ⌜lf(al)⌝ ⊑ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ), mon(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) → (∀ n. ⌜lf(af.take(n))⌝ ⊑ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ )) ∧ (∀ m. ¬ # lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ).take(m) ⊑ lf(af.take(n)))), ∀ af. mon(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) ⊦ |
⌜al⌝ ⊑ ⌜af⌝ , ¬ mon(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ), ¬ ⌜lf(al)⌝ ⊑ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ), ∀ af. mon(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) ⊦
⌜al⌝ ⊑ ⌜af⌝ , ¬ ⌜lf(al)⌝ ⊑ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ), ∀ af. mon(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ), ∀ n. ⌜lf(af.take(n))⌝ ⊑ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ).take(m) ⊑ lf(af.take(n))) ⊦
| ⌜al⌝ ⊑ ⌜af⌝ , ¬ mon(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ), ¬ ⌜lf(al)⌝ ⊑ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ), ∀ af. mon(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) ⊦ |
Used terms: af
| ⌜al⌝ ⊑ ⌜af⌝ , ¬ ⌜lf(al)⌝ ⊑ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ), ∀ af. mon(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ), ∀ n. ⌜lf(af.take(n))⌝ ⊑ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ).take(m) ⊑ lf(af.take(n))) ⊦ |
⌜al⌝ ⊑ ⌜af⌝ , ⌜lf(af.take(# al))⌝ ⊑ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ), ¬ ⌜lf(al)⌝ ⊑ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ).take(m) ⊑ lf(af.take(n))), ∀ n. ⌜lf(af.take(n))⌝ ⊑ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ), ∀ af. mon(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) ⊦
Used terms: # al
| ⌜al⌝ ⊑ ⌜af⌝ , ⌜lf(af.take(# al))⌝ ⊑ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ), ¬ ⌜lf(al)⌝ ⊑ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ).take(m) ⊑ lf(af.take(n))), ∀ n. ⌜lf(af.take(n))⌝ ⊑ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ), ∀ af. mon(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) ⊦ |
# al0 = # al, af = (⌜al0⌝ + ⌜nf0⌝ ).f, ⌜lf(al0)⌝ ⊑ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ), ⌜al⌝ ⊑ ⌜af⌝ , ¬ ⌜lf(al)⌝ ⊑ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ), ∀ af. mon(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ), ∀ n. ⌜lf(af.take(n))⌝ ⊑ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ).take(m) ⊑ lf(af.take(n))) ⊦
Used simplifier rules: ⊦ x0 = nf.take(n) ∧ nf0 = nf.drop(n) ↔ nf = (⌜x0⌝ + ⌜nf0⌝ ).f ∧ # x0 = n; (elim) Used terms: af, # al, al0, nf0
| # al0 = # al, af = (⌜al0⌝ + ⌜nf0⌝ ).f, ⌜lf(al0)⌝ ⊑ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ), ⌜al⌝ ⊑ ⌜af⌝ , ¬ ⌜lf(al)⌝ ⊑ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ), ∀ af. mon(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ), ∀ n. ⌜lf(af.take(n))⌝ ⊑ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ).take(m) ⊑ lf(af.take(n))) ⊦ |
# al0 = # al, ⌜al⌝ ⊑ ⌜al0⌝ + ⌜nf0⌝ , ⌜lf(al0)⌝ ⊑ lim(⌜λ n. ⌜lf((al0 + nf0).take(n))⌝ ⌝ ), ¬ ⌜lf(al)⌝ ⊑ lim(⌜λ n. ⌜lf((al0 + nf0).take(n))⌝ ⌝ ), ∀ af. mon(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜lf((al0 + nf0).take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜lf((al0 + nf0).take(n))⌝ ⌝ ).take(m) ⊑ lf((al0 + nf0).take(n))), ∀ n. ⌜lf((al0 + nf0).take(n))⌝ ⊑ lim(⌜λ n. ⌜lf((al0 + nf0).take(n))⌝ ⌝ ) ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ (⌜x⌝ + ⌜nf⌝ ).f = x + nf; (s) ⊦ ⌜x + nf⌝ = ⌜x⌝ + ⌜nf⌝ ; (s)
| # al0 = # al, ⌜al⌝ ⊑ ⌜al0⌝ + ⌜nf0⌝ , ⌜lf(al0)⌝ ⊑ lim(⌜λ n. ⌜lf((al0 + nf0).take(n))⌝ ⌝ ), ¬ ⌜lf(al)⌝ ⊑ lim(⌜λ n. ⌜lf((al0 + nf0).take(n))⌝ ⌝ ), ∀ af. mon(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜lf((al0 + nf0).take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜lf((al0 + nf0).take(n))⌝ ⌝ ).take(m) ⊑ lf((al0 + nf0).take(n))), ∀ n. ⌜lf((al0 + nf0).take(n))⌝ ⊑ lim(⌜λ n. ⌜lf((al0 + nf0).take(n))⌝ ⌝ ) ⊦ |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
Used simplifier rules: ⊦ # x = # y → (⌜x⌝ + σ = ⌜y⌝ + σ0 ↔ x = y ∧ σ = σ0); (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream Used terms: ⌜al⌝ , ⌜al0⌝ + ⌜nf0⌝
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| mon(lf), ¬ pbd(lift(lf)) ⊦ |
⊦ pbd(f) ↔ (∀ af, bl. (∀ n. f(⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ ) ↔ f(⌜af⌝ ) ⊑ ⌜bl⌝ )
mon(lf), ∃ af, bl. ¬((∀ n. lift(lf)(⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ ) ↔ lift(lf)(⌜af⌝ ) ⊑ ⌜bl⌝ ) ⊦
Used terms: lift(lf)
| ⊦ pbd(f) ↔ (∀ af, bl. (∀ n. f(⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ ) ↔ f(⌜af⌝ ) ⊑ ⌜bl⌝ ) |
| mon(lf), ∃ af, bl. ¬((∀ n. lift(lf)(⌜af.take(n)⌝ ) ⊑ ⌜bl⌝ ) ↔ lift(lf)(⌜af⌝ ) ⊑ ⌜bl⌝ ) ⊦ |
mon(lf) ⊦ (∀ n. lf(af.take(n)) ⊑ bl) ↔ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) ⊑ ⌜bl⌝
Used simplifier rules: lift-fin: ⊦ lift(lf)(⌜al⌝ ) = ⌜lf(al)⌝ ; lift-inf: ⊦ lift(lf)(⌜af⌝ ) = lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ); ⊦ ⌜x⌝ ⊑ ⌜y⌝ ↔ x ⊑ y; (s)
| mon(lf) ⊦ (∀ n. lf(af.take(n)) ⊑ bl) ↔ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) ⊑ ⌜bl⌝ |
⊦ mon(σσ) ∧ σσ ≠ [] → (∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ lim(σσ)) ∧ (∀ m. ¬ # lim(σσ) < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ ⌜lim(σσ).take(m)⌝ ⊑ σσ(n)))
mon(lf), mon(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) ∧ ⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ≠ [] → (∀ n. ⌜n⌝ < # ⌜λ n. ⌜lf(af.take(n))⌝ ⌝ → ⌜λ n. ⌜lf(af.take(n))⌝ ⌝ (n) ⊑ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ )) ∧ (∀ m. ¬ # lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜n⌝ < # ⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ∧ ⌜lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜λ n. ⌜lf(af.take(n))⌝ ⌝ (n))) ⊦ (∀ n. lf(af.take(n)) ⊑ bl) ↔ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) ⊑ ⌜bl⌝
Used terms: ⌜λ n. ⌜lf(af.take(n))⌝ ⌝
| ⊦ mon(σσ) ∧ σσ ≠ [] → (∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ lim(σσ)) ∧ (∀ m. ¬ # lim(σσ) < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ ⌜lim(σσ).take(m)⌝ ⊑ σσ(n))) |
| mon(lf), mon(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) ∧ ⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ≠ [] → (∀ n. ⌜n⌝ < # ⌜λ n. ⌜lf(af.take(n))⌝ ⌝ → ⌜λ n. ⌜lf(af.take(n))⌝ ⌝ (n) ⊑ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ )) ∧ (∀ m. ¬ # lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜n⌝ < # ⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ∧ ⌜lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜λ n. ⌜lf(af.take(n))⌝ ⌝ (n))) ⊦ (∀ n. lf(af.take(n)) ⊑ bl) ↔ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) ⊑ ⌜bl⌝ |
mon(lf), mon(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) → (∀ n. ⌜lf(af.take(n))⌝ ⊑ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ )) ∧ (∀ m. ¬ # lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ).take(m) ⊑ lf(af.take(n)))) ⊦ (∀ n. lf(af.take(n)) ⊑ bl) ↔ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) ⊑ ⌜bl⌝
Used simplifier rules: ⊦ ⌜x⌝ ⊑ ⌜y⌝ ↔ x ⊑ y; (s) ⊦ ⌜nf⌝ (n) = nf(n); (s) ⊦ ⌜m⌝ < ∞; (s) ⊦ # ⌜nf⌝ = ∞; (s) ⊦ [] ≠ ⌜nf⌝ ; (s)
| mon(lf), mon(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) → (∀ n. ⌜lf(af.take(n))⌝ ⊑ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ )) ∧ (∀ m. ¬ # lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ).take(m) ⊑ lf(af.take(n)))) ⊦ (∀ n. lf(af.take(n)) ⊑ bl) ↔ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) ⊑ ⌜bl⌝ |
mon(lf), ¬ mon(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) ⊦ (∀ n. lf(af.take(n)) ⊑ bl) ↔ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) ⊑ ⌜bl⌝
mon(lf), ∀ n. ⌜lf(af.take(n))⌝ ⊑ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ).take(m) ⊑ lf(af.take(n))) ⊦ (∀ n. lf(af.take(n)) ⊑ bl) ↔ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) ⊑ ⌜bl⌝
| mon(lf), ¬ mon(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) ⊦ (∀ n. lf(af.take(n)) ⊑ bl) ↔ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) ⊑ ⌜bl⌝ |
⊦ mon(lf) ↔ (∀ af. mon(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ))
¬ mon(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ), ∀ af. mon(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) ⊦ (∀ n. lf(af.take(n)) ⊑ bl) ↔ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) ⊑ ⌜bl⌝
Used terms: lf
| ⊦ mon(lf) ↔ (∀ af. mon(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ )) |
| ¬ mon(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ), ∀ af. mon(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) ⊦ (∀ n. lf(af.take(n)) ⊑ bl) ↔ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) ⊑ ⌜bl⌝ |
Used terms: af
| mon(lf), ∀ n. ⌜lf(af.take(n))⌝ ⊑ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ).take(m) ⊑ lf(af.take(n))) ⊦ (∀ n. lf(af.take(n)) ⊑ bl) ↔ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) ⊑ ⌜bl⌝ |
mon(lf), ¬ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) ⊑ ⌜bl⌝ , ∀ m. ¬ # lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ).take(m) ⊑ lf(af.take(n))), ∀ n. ⌜lf(af.take(n))⌝ ⊑ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ), ∀ n. lf(af.take(n)) ⊑ bl ⊦
mon(lf), lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) ⊑ ⌜bl⌝ , ∀ m. ¬ # lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ).take(m) ⊑ lf(af.take(n))), ∀ n. ⌜lf(af.take(n))⌝ ⊑ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) ⊦ ∀ n. lf(af.take(n)) ⊑ bl
| mon(lf), ¬ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) ⊑ ⌜bl⌝ , ∀ m. ¬ # lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ).take(m) ⊑ lf(af.take(n))), ∀ n. ⌜lf(af.take(n))⌝ ⊑ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ), ∀ n. lf(af.take(n)) ⊑ bl ⊦ |
lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) = ⌜bl0⌝ , mon(lf), ¬ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) ⊑ ⌜bl⌝ , ∀ n. lf(af.take(n)) ⊑ bl, ∀ n. ⌜lf(af.take(n))⌝ ⊑ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ).take(m) ⊑ lf(af.take(n))) ⊦
lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) = ⌜bf⌝ , mon(lf), ¬ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) ⊑ ⌜bl⌝ , ∀ n. lf(af.take(n)) ⊑ bl, ∀ n. ⌜lf(af.take(n))⌝ ⊑ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ).take(m) ⊑ lf(af.take(n))) ⊦
Used simplifier rules: Stream[A] freely generated by ⌝, ⌝;
| lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) = ⌜bl0⌝ , mon(lf), ¬ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) ⊑ ⌜bl⌝ , ∀ n. lf(af.take(n)) ⊑ bl, ∀ n. ⌜lf(af.take(n))⌝ ⊑ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ).take(m) ⊑ lf(af.take(n))) ⊦ |
lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) = ⌜bl0⌝ , mon(lf), ¬ bl0 ⊑ bl, ∀ n. lf(af.take(n)) ⊑ bl, ∀ n. lf(af.take(n)) ⊑ bl0, ∀ m. ¬ # bl0 < m → (∃ n. bl0.take(m) ⊑ lf(af.take(n))) ⊦
Used simplifier rules: ⊦ ⌜x⌝ .take(n) = x.take(n); (s) ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ ⌜x⌝ ⊑ ⌜y⌝ ↔ x ⊑ y; (s)
| lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) = ⌜bl0⌝ , mon(lf), ¬ bl0 ⊑ bl, ∀ n. lf(af.take(n)) ⊑ bl, ∀ n. lf(af.take(n)) ⊑ bl0, ∀ m. ¬ # bl0 < m → (∃ n. bl0.take(m) ⊑ lf(af.take(n))) ⊦ |
lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) = ⌜bl0⌝ , mon(lf), ¬ bl0 ⊑ bl, ¬ # bl0 < # bl0 → (∃ n. bl0.take(# bl0) ⊑ lf(af.take(n))), ∀ n. lf(af.take(n)) ⊑ bl0, ∀ n. lf(af.take(n)) ⊑ bl ⊦
Used terms: # bl0
| lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) = ⌜bl0⌝ , mon(lf), ¬ bl0 ⊑ bl, ¬ # bl0 < # bl0 → (∃ n. bl0.take(# bl0) ⊑ lf(af.take(n))), ∀ n. lf(af.take(n)) ⊑ bl0, ∀ n. lf(af.take(n)) ⊑ bl ⊦ |
lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) = ⌜bl0⌝ , mon(lf), bl0 ⊑ lf(af.take(n)), ¬ bl0 ⊑ bl, ∀ n. lf(af.take(n)) ⊑ bl, ∀ n. lf(af.take(n)) ⊑ bl0 ⊦
Used simplifier rules: ⊦ # x = n → x.take(n) = x; (s) ⊦ ¬ n < n; (s)
| lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) = ⌜bl0⌝ , mon(lf), bl0 ⊑ lf(af.take(n)), ¬ bl0 ⊑ bl, ∀ n. lf(af.take(n)) ⊑ bl, ∀ n. lf(af.take(n)) ⊑ bl0 ⊦ |
Used simplifier rules: prefix-trans: ⊦ x ⊑ y ∧ y ⊑ z → x ⊑ z; (forward) from specification list-last Used terms: n
| lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) = ⌜bf⌝ , mon(lf), ¬ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) ⊑ ⌜bl⌝ , ∀ n. lf(af.take(n)) ⊑ bl, ∀ n. ⌜lf(af.take(n))⌝ ⊑ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ).take(m) ⊑ lf(af.take(n))) ⊦ |
lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) = ⌜bf⌝ , mon(lf), ∀ n. lf(af.take(n)) ⊑ bl, ∀ n. ⌜lf(af.take(n))⌝ ⊑ ⌜bf⌝ , ∀ m. ∃ n. bf.take(m) ⊑ lf(af.take(n)) ⊦
Used simplifier rules: ⊦ ⌜nf⌝ .take(n) = nf.take(n); (s) ⊦ ¬ ∞ < n∞; (s) ⊦ # ⌜nf⌝ = ∞; (s) ⊦ ¬ ⌜nf⌝ ⊑ ⌜x⌝ ; (s)
| lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) = ⌜bf⌝ , mon(lf), ∀ n. lf(af.take(n)) ⊑ bl, ∀ n. ⌜lf(af.take(n))⌝ ⊑ ⌜bf⌝ , ∀ m. ∃ n. bf.take(m) ⊑ lf(af.take(n)) ⊦ |
lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) = ⌜bf⌝ , mon(lf), ∀ n. ⌜lf(af.take(n))⌝ ⊑ ⌜bf⌝ , ∀ n. lf(af.take(n)) ⊑ bl, ∃ n. bf.take(# bl + 1) ⊑ lf(af.take(n)) ⊦
Used terms: # bl + 1
| lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) = ⌜bf⌝ , mon(lf), ∀ n. ⌜lf(af.take(n))⌝ ⊑ ⌜bf⌝ , ∀ n. lf(af.take(n)) ⊑ bl, ∃ n. bf.take(# bl + 1) ⊑ lf(af.take(n)) ⊦ |
lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) = ⌜bf⌝ , mon(lf), bf.take(# bl + 1) ⊑ lf(af.take(n)), ∀ n. lf(af.take(n)) ⊑ bl, ∀ n. ⌜lf(af.take(n))⌝ ⊑ ⌜bf⌝ ⊦
| lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) = ⌜bf⌝ , mon(lf), bf.take(# bl + 1) ⊑ lf(af.take(n)), ∀ n. lf(af.take(n)) ⊑ bl, ∀ n. ⌜lf(af.take(n))⌝ ⊑ ⌜bf⌝ ⊦ |
lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) = ⌜bf⌝ , mon(lf), bf.take(# bl + 1) ⊑ lf(af.take(n)), lf(af.take(n)) ⊑ bl, ∀ n. ⌜lf(af.take(n))⌝ ⊑ ⌜bf⌝ ⊦
Used terms: n
| lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) = ⌜bf⌝ , mon(lf), bf.take(# bl + 1) ⊑ lf(af.take(n)), lf(af.take(n)) ⊑ bl, ∀ n. ⌜lf(af.take(n))⌝ ⊑ ⌜bf⌝ ⊦ |
lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) = ⌜bf⌝ , mon(lf), lf(af.take(n)) ⊑ bl, bf.take(# bl + 1) ⊑ lf(af.take(n)), bf.take(# bl + 1) ⊑ bl, ∀ n. ⌜lf(af.take(n))⌝ ⊑ ⌜bf⌝ ⊦
Used simplifier rules: prefix-trans: ⊦ x ⊑ y ∧ y ⊑ z → x ⊑ z; (forward) from specification list-last
| lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) = ⌜bf⌝ , mon(lf), lf(af.take(n)) ⊑ bl, bf.take(# bl + 1) ⊑ lf(af.take(n)), bf.take(# bl + 1) ⊑ bl, ∀ n. ⌜lf(af.take(n))⌝ ⊑ ⌜bf⌝ ⊦ |
⊦ x ⊑ y ↔ (∃ z. x + z = y)
lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) = ⌜bf⌝ , mon(lf), bf.take(# bl + 1) ⊑ lf(af.take(n)), lf(af.take(n)) ⊑ bl, ∀ n. ⌜lf(af.take(n))⌝ ⊑ ⌜bf⌝ , ∃ z. bf.take(# bl + 1) + z = bl ⊦
Used terms: bf.take(# bl + 1), bl
| ⊦ x ⊑ y ↔ (∃ z. x + z = y) |
| lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) = ⌜bf⌝ , mon(lf), bf.take(# bl + 1) ⊑ lf(af.take(n)), lf(af.take(n)) ⊑ bl, ∀ n. ⌜lf(af.take(n))⌝ ⊑ ⌜bf⌝ , ∃ z. bf.take(# bl + 1) + z = bl ⊦ |
bf.take(# bl + 1) + bl0 = bl, lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) = ⌜bf⌝ , mon(lf), lf(af.take(n)) ⊑ bl, bf.take(# bl + 1) ⊑ lf(af.take(n)), ∀ n. ⌜lf(af.take(n))⌝ ⊑ ⌜bf⌝ ⊦
| bf.take(# bl + 1) + bl0 = bl, lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) = ⌜bf⌝ , mon(lf), lf(af.take(n)) ⊑ bl, bf.take(# bl + 1) ⊑ lf(af.take(n)), ∀ n. ⌜lf(af.take(n))⌝ ⊑ ⌜bf⌝ ⊦ |
⊦ 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: bf.take(# bl + 1) + bl0, bl
| ⊦ x = y ↔ # x = # y ∧ (∀ n. n < # x → x(n) = y(n)) |
| mon(lf), lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) ⊑ ⌜bl⌝ , ∀ m. ¬ # lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ).take(m) ⊑ lf(af.take(n))), ∀ n. ⌜lf(af.take(n))⌝ ⊑ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) ⊦ ∀ n. lf(af.take(n)) ⊑ bl |
mon(lf), lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) ⊑ ⌜bl⌝ , ¬ lf(af.take(n)) ⊑ bl, ∀ n. ⌜lf(af.take(n))⌝ ⊑ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ).take(m) ⊑ lf(af.take(n))) ⊦
| mon(lf), lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) ⊑ ⌜bl⌝ , ¬ lf(af.take(n)) ⊑ bl, ∀ n. ⌜lf(af.take(n))⌝ ⊑ lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. lim(⌜λ n. ⌜lf(af.take(n))⌝ ⌝ ).take(m) ⊑ lf(af.take(n))) ⊦ |
Used simplifier rules: leq-trans: ⊦ σ ⊑ σ1 ∧ σ1 ⊑ σ2 → σ ⊑ σ2; (forward) from specification stream ⊦ ⌜x⌝ ⊑ ⌜y⌝ ↔ x ⊑ y; (s) 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.