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