| ⊦ Πok(lext, rext, lren, rren) ∧ fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs0) ' + psf, paf) ∧ rstep(rs, ra, rs0) ∧ ¬ cod(lren)(rren(ra)) → πra(lstep, rstep, lren, rren, ⌜(ls, rs) '⌝ + ⌜(ls, rs0) '⌝ + ⌜psf⌝ , rren(ra) + ⌜paf⌝ ) = ⌜ra '⌝ + πra(lstep, rstep, lren, rren, (ls, rs0) + ⌜psf⌝ , ⌜paf⌝ ) |
πra(lstep, rstep, lren, rren, ⌜(ls, rs) '⌝ + ⌜(ls, rs0) '⌝ + ⌜psf⌝ , rren(ra) + ⌜paf⌝ ) ≠ ⌜ra '⌝ + πra(lstep, rstep, lren, rren, (ls, rs0) + ⌜psf⌝ , ⌜paf⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs0) ' + psf, paf), rstep(rs, ra, rs0), Πok(lext, rext, lren, rren), ¬ cod(lren)(rren(ra)) ⊦
| πra(lstep, rstep, lren, rren, ⌜(ls, rs) '⌝ + ⌜(ls, rs0) '⌝ + ⌜psf⌝ , rren(ra) + ⌜paf⌝ ) ≠ ⌜ra '⌝ + πra(lstep, rstep, lren, rren, (ls, rs0) + ⌜psf⌝ , ⌜paf⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs0) ' + psf, paf), rstep(rs, ra, rs0), Πok(lext, rext, lren, rren), ¬ cod(lren)(rren(ra)) ⊦ |
πra(lstep, rstep, lren, rren, ⌜(ls, rs) '⌝ + ⌜(ls, rs0) '⌝ + ⌜psf⌝ , ⌜rren(ra) '⌝ + ⌜paf⌝ ) ≠ ⌜ra '⌝ + lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs0) ' + psf, paf), rstep(rs, ra, rs0), Πok(lext, rext, lren, rren), ¬ cod(lren)(rren(ra)) ⊦
Used simplifier rules: pia-inf-simp: ⊦ πra(lstep, rstep, lren, rren, ⌜ps '⌝ + ⌜psf⌝ , ⌜paf⌝ ) = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, ps ' + psf.take(n), paf.take(n))⌝ ⌝ ); append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ a + σ = ⌜a '⌝ + σ; (s)
| πra(lstep, rstep, lren, rren, ⌜(ls, rs) '⌝ + ⌜(ls, rs0) '⌝ + ⌜psf⌝ , ⌜rren(ra) '⌝ + ⌜paf⌝ ) ≠ ⌜ra '⌝ + lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs0) ' + psf, paf), rstep(rs, ra, rs0), Πok(lext, rext, lren, rren), ¬ cod(lren)(rren(ra)) ⊦ |
⊦ πra(lstep, rstep, lren, rren, ⌜ps '⌝ + ⌜psf⌝ , ⌜paf⌝ ) = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, ps ' + psf.take(n), paf.take(n))⌝ ⌝ )
πra(lstep, rstep, lren, rren, ⌜(ls, rs) '⌝ + ⌜(⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f⌝ , ⌜(⌜rren(ra) '⌝ + ⌜paf⌝ ).f⌝ ) = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ ), πra(lstep, rstep, lren, rren, ⌜(ls, rs) '⌝ + ⌜(ls, rs0) '⌝ + ⌜psf⌝ , ⌜rren(ra) '⌝ + ⌜paf⌝ ) ≠ ⌜ra '⌝ + lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs0) ' + psf, paf), rstep(rs, ra, rs0), Πok(lext, rext, lren, rren), ¬ cod(lren)(rren(ra)) ⊦
Used terms: (⌜rren(ra) '⌝ + ⌜paf⌝ ).f, rstep, (ls, rs), lren, rren, lstep, (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f
| ⊦ πra(lstep, rstep, lren, rren, ⌜ps '⌝ + ⌜psf⌝ , ⌜paf⌝ ) = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, ps ' + psf.take(n), paf.take(n))⌝ ⌝ ) |
| πra(lstep, rstep, lren, rren, ⌜(ls, rs) '⌝ + ⌜(⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f⌝ , ⌜(⌜rren(ra) '⌝ + ⌜paf⌝ ).f⌝ ) = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ ), πra(lstep, rstep, lren, rren, ⌜(ls, rs) '⌝ + ⌜(ls, rs0) '⌝ + ⌜psf⌝ , ⌜rren(ra) '⌝ + ⌜paf⌝ ) ≠ ⌜ra '⌝ + lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs0) ' + psf, paf), rstep(rs, ra, rs0), Πok(lext, rext, lren, rren), ¬ cod(lren)(rren(ra)) ⊦ |
πra(lstep, rstep, lren, rren, ⌜(ls, rs) '⌝ + ⌜(ls, rs0) '⌝ + ⌜psf⌝ , ⌜rren(ra) '⌝ + ⌜paf⌝ ) = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ ), πra(lstep, rstep, lren, rren, ⌜(ls, rs) '⌝ + ⌜(ls, rs0) '⌝ + ⌜psf⌝ , ⌜rren(ra) '⌝ + ⌜paf⌝ ) ≠ ⌜ra '⌝ + lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs0) ' + psf, paf), rstep(rs, ra, rs0), Πok(lext, rext, lren, rren), ¬ cod(lren)(rren(ra)) ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ ⌜(⌜x⌝ + ⌜nf⌝ ).f⌝ = ⌜x⌝ + ⌜nf⌝ ; (s)
| πra(lstep, rstep, lren, rren, ⌜(ls, rs) '⌝ + ⌜(ls, rs0) '⌝ + ⌜psf⌝ , ⌜rren(ra) '⌝ + ⌜paf⌝ ) = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ ), πra(lstep, rstep, lren, rren, ⌜(ls, rs) '⌝ + ⌜(ls, rs0) '⌝ + ⌜psf⌝ , ⌜rren(ra) '⌝ + ⌜paf⌝ ) ≠ ⌜ra '⌝ + lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs0) ' + psf, paf), rstep(rs, ra, rs0), Πok(lext, rext, lren, rren), ¬ cod(lren)(rren(ra)) ⊦ |
lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ ) ≠ ⌜ra '⌝ + lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs0) ' + psf, paf), rstep(rs, ra, rs0), Πok(lext, rext, lren, rren), ¬ cod(lren)(rren(ra)) ⊦
| lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ ) ≠ ⌜ra '⌝ + lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs0) ' + psf, paf), rstep(rs, ra, rs0), Πok(lext, rext, lren, rren), ¬ cod(lren)(rren(ra)) ⊦ |
⊦ mon(⌜σf⌝ ) → lim(⌜σf⌝ ) = lim(⌜λ n. σf(n + m)⌝ )
lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ ) ≠ ⌜ra '⌝ + lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs0) ' + psf, paf), rstep(rs, ra, rs0), Πok(lext, rext, lren, rren), ¬ cod(lren)(rren(ra)), mon(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ ) → lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ ) = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n + 1), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n + 1))⌝ ⌝ ) ⊦
Used terms: λ n. ⌜πra (lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n)) ⌝ , 1
| ⊦ mon(⌜σf⌝ ) → lim(⌜σf⌝ ) = lim(⌜λ n. σf(n + m)⌝ ) |
| lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ ) ≠ ⌜ra '⌝ + lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs0) ' + psf, paf), rstep(rs, ra, rs0), Πok(lext, rext, lren, rren), ¬ cod(lren)(rren(ra)), mon(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ ) → lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ ) = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n + 1), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n + 1))⌝ ⌝ ) ⊦ |
lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ ) ≠ ⌜ra '⌝ + lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs0) ' + psf, paf), rstep(rs, ra, rs0), Πok(lext, rext, lren, rren), ¬ cod(lren)(rren(ra)), ¬ mon(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ ) ⊦
lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ ) = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n + 1), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n + 1))⌝ ⌝ ), lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ ) ≠ ⌜ra '⌝ + lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs0) ' + psf, paf), rstep(rs, ra, rs0), Πok(lext, rext, lren, rren), ¬ cod(lren)(rren(ra)) ⊦
| lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ ) ≠ ⌜ra '⌝ + lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs0) ' + psf, paf), rstep(rs, ra, rs0), Πok(lext, rext, lren, rren), ¬ cod(lren)(rren(ra)), ¬ mon(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ ) ⊦ |
⊦ mon(σσ) ↔ (∀ n. ⌜n⌝ + ⌜1⌝ < # σσ → σσ[n] ⊑ σσ[n + 1])
lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ ) ≠ ⌜ra '⌝ + lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs0) ' + psf, paf), rstep(rs, ra, rs0), Πok(lext, rext, lren, rren), ¬ cod(lren)(rren(ra)), ∃ n. ¬ ( ⌜n⌝ + ⌜1⌝ < # ⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ → ⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ [n] ⊑ ⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ [n + 1]) ⊦
Used terms: ⌜λ n. ⌜πra (lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n)) ⌝ ⌝
| ⊦ mon(σσ) ↔ (∀ n. ⌜n⌝ + ⌜1⌝ < # σσ → σσ[n] ⊑ σσ[n + 1]) |
| lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ ) ≠ ⌜ra '⌝ + lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs0) ' + psf, paf), rstep(rs, ra, rs0), Πok(lext, rext, lren, rren), ¬ cod(lren)(rren(ra)), ∃ n. ¬ ( ⌜n⌝ + ⌜1⌝ < # ⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ → ⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ [n] ⊑ ⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ [n + 1]) ⊦ |
lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ ) ≠ ⌜ra '⌝ + lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs0) ' + psf, paf), rstep(rs, ra, rs0), Πok(lext, rext, lren, rren), ¬ cod(lren)(rren(ra)), ¬ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psf.take(n), rren(ra) ' + paf.take(n))⌝ ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ (⌜a '⌝ + ⌜nf⌝ ).f.take(n + 1) = a ' + nf.take(n); (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ⌜nf⌝ [n] = nf(n); (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⌝ ≠ ∞; (s) ⊦ ⌜m⌝ + n∞ = ∞ ↔ n∞ = ∞; (s) ⊦ n∞ < ∞ ↔ n∞ ≠ ∞; (s) ⊦ # ⌜nf⌝ = ∞; (s)
| lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ ) ≠ ⌜ra '⌝ + lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs0) ' + psf, paf), rstep(rs, ra, rs0), Πok(lext, rext, lren, rren), ¬ cod(lren)(rren(ra)), ¬ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psf.take(n), rren(ra) ' + paf.take(n))⌝ ⊦ |
n = n0 +1, lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ ) ≠ ⌜ra '⌝ + lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs0) ' + psf, paf), rstep(rs, ra, rs0), Πok(lext, rext, lren, rren), ¬ cod(lren)(rren(ra)), ¬ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psf.take(n), rren(ra) ' + paf.take(n))⌝ ⊦
Used simplifier rules: projaction-rec-addR-one: ⊦ rstep(rs, ra, rs0) ∧ ¬ cod(lren)(rren(ra)) → πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ', rren(ra) ') = ra + πra(lstep, rstep, lren, rren, (ls, rs0) ', []); projaction-base: ⊦ πra(lstep, rstep, lren, rren, (ls, rs) ', []) = []; Nat freely generated by 0, +1;; ⊦ ⌜[]⌝ = []; (s) ⊦ nf.take(0) = []; (s) ⊦ a + x = a ' + x; (s) ⊦ x + [] = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ [] ⊑ σ; (s)
| n = n0 +1, lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ ) ≠ ⌜ra '⌝ + lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs0) ' + psf, paf), rstep(rs, ra, rs0), Πok(lext, rext, lren, rren), ¬ cod(lren)(rren(ra)), ¬ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psf.take(n), rren(ra) ' + paf.take(n))⌝ ⊦ |
lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ ) ≠ ⌜ra '⌝ + lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs0) ' + psf, paf), rstep(rs, ra, rs0), Πok(lext, rext, lren, rren), ¬ cod(lren)(rren(ra)), ¬ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psf.take(n0), rren(ra) ' + paf.take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psf.take(n0 + 1), rren(ra) ' + paf.take(n0 + 1))⌝ ⊦
Used simplifier rules: ⊦ m +1 = m + 1; (s) a: ⊦ (x + y) + z = x + y + z; from specification list append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ (⌜a '⌝ + ⌜nf⌝ ).f.take(n + 1) = a ' + nf.take(n); (s)
| lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ ) ≠ ⌜ra '⌝ + lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs0) ' + psf, paf), rstep(rs, ra, rs0), Πok(lext, rext, lren, rren), ¬ cod(lren)(rren(ra)), ¬ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psf.take(n0), rren(ra) ' + paf.take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psf.take(n0 + 1), rren(ra) ' + paf.take(n0 + 1))⌝ ⊦ |
⊦ fragω(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))(psf, paf) → ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n), paf.take(n + 1))⌝
lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ ) ≠ ⌜ra '⌝ + lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs0) ' + psf, paf), rstep(rs, ra, rs0), Πok(lext, rext, lren, rren), ¬ cod(lren)(rren(ra)), ¬ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psf.take(n0), rren(ra) ' + paf.take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psf.take(n0 + 1), rren(ra) ' + paf.take(n0 + 1))⌝ , fragω(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))((ls, rs0) ' + psf, paf) → ⌜πra(lstep, rstep, lren, rren, ((ls, rs0) ' + psf).take(n0 + 1), paf.take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, ((ls, rs0) ' + psf).take(2 + n0), paf.take(n0 + 1))⌝ ⊦
Used terms: rext, paf, n0, rstep, rstart, lren, rren, lstart, lstep, (ls, rs0) ' + psf, lext
| ⊦ fragω(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))(psf, paf) → ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n), paf.take(n + 1))⌝ |
| lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ ) ≠ ⌜ra '⌝ + lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs0) ' + psf, paf), rstep(rs, ra, rs0), Πok(lext, rext, lren, rren), ¬ cod(lren)(rren(ra)), ¬ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psf.take(n0), rren(ra) ' + paf.take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psf.take(n0 + 1), rren(ra) ' + paf.take(n0 + 1))⌝ , fragω(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))((ls, rs0) ' + psf, paf) → ⌜πra(lstep, rstep, lren, rren, ((ls, rs0) ' + psf).take(n0 + 1), paf.take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, ((ls, rs0) ' + psf).take(2 + n0), paf.take(n0 + 1))⌝ ⊦ |
lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ ) ≠ ⌜ra '⌝ + lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs0) ' + psf, paf), rstep(rs, ra, rs0), Πok(lext, rext, lren, rren), ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n0), paf.take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n0 + 1), paf.take(n0 + 1))⌝ , ¬ cod(lren)(rren(ra)), ¬ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psf.take(n0), rren(ra) ' + paf.take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psf.take(n0 + 1), rren(ra) ' + paf.take(n0 + 1))⌝ ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ (a ' + nf).take(n + 2) = a ' + nf.take(n + 1); (s) ⊦ (a ' + nf).take(n + 1) = a ' + nf.take(n); (s) ⊦ Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren) = IOAut (Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)); (s)
| lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ ) ≠ ⌜ra '⌝ + lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs0) ' + psf, paf), rstep(rs, ra, rs0), Πok(lext, rext, lren, rren), ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n0), paf.take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n0 + 1), paf.take(n0 + 1))⌝ , ¬ cod(lren)(rren(ra)), ¬ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psf.take(n0), rren(ra) ' + paf.take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psf.take(n0 + 1), rren(ra) ' + paf.take(n0 + 1))⌝ ⊦ |
⊦ # psl = # pal ∧ rstep(rs, ra, rs0) ∧ ¬ cod(lren)(rren(ra)) → πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psl, rren(ra) ' + pal) = ra + πra(lstep, rstep, lren, rren, (ls, rs0) + psl, pal)
# psf.take(n0) = # paf.take(n0), lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ ) ≠ ⌜ra '⌝ + lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs0) ' + psf, paf), rstep(rs, ra, rs0), Πok(lext, rext, lren, rren), ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n0), paf.take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n0 + 1), paf.take(n0 + 1))⌝ , ¬ cod(lren)(rren(ra)), ¬ ⌜ra + πra(lstep, rstep, lren, rren, (ls, rs0) + psf.take(n0), paf.take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psf.take(n0 + 1), rren(ra) ' + paf.take(n0 + 1))⌝ ⊦
Used simplifier rules: ⊦ # nf.take(n) = n; (s) Used terms: psf.take(n0), rs, ra, paf.take(n0), rstep, lren, rren, rs0, lstep, ls
| ⊦ # psl = # pal ∧ rstep(rs, ra, rs0) ∧ ¬ cod(lren)(rren(ra)) → πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psl, rren(ra) ' + pal) = ra + πra(lstep, rstep, lren, rren, (ls, rs0) + psl, pal) |
| # psf.take(n0) = # paf.take(n0), lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ ) ≠ ⌜ra '⌝ + lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs0) ' + psf, paf), rstep(rs, ra, rs0), Πok(lext, rext, lren, rren), ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n0), paf.take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n0 + 1), paf.take(n0 + 1))⌝ , ¬ cod(lren)(rren(ra)), ¬ ⌜ra + πra(lstep, rstep, lren, rren, (ls, rs0) + psf.take(n0), paf.take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psf.take(n0 + 1), rren(ra) ' + paf.take(n0 + 1))⌝ ⊦ |
lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ ) ≠ ⌜ra '⌝ + lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs0) ' + psf, paf), rstep(rs, ra, rs0), Πok(lext, rext, lren, rren), ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n0), paf.take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n0 + 1), paf.take(n0 + 1))⌝ , ¬ cod(lren)(rren(ra)), ¬ ⌜ra '⌝ + ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n0), paf.take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psf.take(n0 + 1), rren(ra) ' + paf.take(n0 + 1))⌝ ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ⌜x + y⌝ = ⌜x⌝ + ⌜y⌝ ; (s) ⊦ a + x = a ' + x; (s) ⊦ # nf.take(n) = n; (s)
| lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ ) ≠ ⌜ra '⌝ + lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs0) ' + psf, paf), rstep(rs, ra, rs0), Πok(lext, rext, lren, rren), ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n0), paf.take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n0 + 1), paf.take(n0 + 1))⌝ , ¬ cod(lren)(rren(ra)), ¬ ⌜ra '⌝ + ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n0), paf.take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psf.take(n0 + 1), rren(ra) ' + paf.take(n0 + 1))⌝ ⊦ |
⊦ # psl = # pal ∧ rstep(rs, ra, rs0) ∧ ¬ cod(lren)(rren(ra)) → πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psl, rren(ra) ' + pal) = ra + πra(lstep, rstep, lren, rren, (ls, rs0) + psl, pal)
Used simplifier rules: ⊦ # nf.take(n) = n; (s) ⊦ m + n = m + n0 ↔ n = n0; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ a + x = a ' + x; (s) ⊦ ⌜x + y⌝ = ⌜x⌝ + ⌜y⌝ ; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ⌜x⌝ + σ1 ⊑ ⌜x⌝ + σ2 ↔ σ1 ⊑ σ2; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream Used terms: psf.take(n0 + 1), rs, ra, paf.take(n0 + 1), rstep, lren, rren, rs0, lstep, ls
| ⊦ # psl = # pal ∧ rstep(rs, ra, rs0) ∧ ¬ cod(lren)(rren(ra)) → πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psl, rren(ra) ' + pal) = ra + πra(lstep, rstep, lren, rren, (ls, rs0) + psl, pal) |
| lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ ) = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n + 1), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n + 1))⌝ ⌝ ), lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ ) ≠ ⌜ra '⌝ + lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs0) ' + psf, paf), rstep(rs, ra, rs0), Πok(lext, rext, lren, rren), ¬ cod(lren)(rren(ra)) ⊦ |
lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ ) = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psf.take(n), rren(ra) ' + paf.take(n))⌝ ⌝ ), lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psf.take(n), rren(ra) ' + paf.take(n))⌝ ⌝ ) ≠ ⌜ra '⌝ + lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs0) ' + psf, paf), rstep(rs, ra, rs0), Πok(lext, rext, lren, rren), ¬ cod(lren)(rren(ra)) ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ (⌜a '⌝ + ⌜nf⌝ ).f.take(n + 1) = a ' + nf.take(n); (s) a: ⊦ (x + y) + z = x + y + z; from specification list
| lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ ) = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psf.take(n), rren(ra) ' + paf.take(n))⌝ ⌝ ), lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psf.take(n), rren(ra) ' + paf.take(n))⌝ ⌝ ) ≠ ⌜ra '⌝ + lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs0) ' + psf, paf), rstep(rs, ra, rs0), Πok(lext, rext, lren, rren), ¬ cod(lren)(rren(ra)) ⊦ |
(λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n + 1), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n + 1))⌝ ) = (λ n. ⌜ra '⌝ + ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ), lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ ) = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psf.take(n), rren(ra) ' + paf.take(n))⌝ ⌝ ), lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psf.take(n), rren(ra) ' + paf.take(n))⌝ ⌝ ) ≠ ⌜ra '⌝ + lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs0) ' + psf, paf), rstep(rs, ra, rs0), Πok(lext, rext, lren, rren), ¬ cod(lren)(rren(ra)) ⊦
lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ ) = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psf.take(n), rren(ra) ' + paf.take(n))⌝ ⌝ ), (λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n + 1), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n + 1))⌝ ) ≠ (λ n. ⌜ra '⌝ + ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ), lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psf.take(n), rren(ra) ' + paf.take(n))⌝ ⌝ ) ≠ ⌜ra '⌝ + lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs0) ' + psf, paf), rstep(rs, ra, rs0), Πok(lext, rext, lren, rren), ¬ cod(lren)(rren(ra)) ⊦
Used formulas: (λ n. ⌜πra (lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n + 1), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n + 1)) ⌝ ) = (λ n. ⌜ra '⌝ + ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ )
| (λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n + 1), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n + 1))⌝ ) = (λ n. ⌜ra '⌝ + ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ), lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ ) = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psf.take(n), rren(ra) ' + paf.take(n))⌝ ⌝ ), lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psf.take(n), rren(ra) ' + paf.take(n))⌝ ⌝ ) ≠ ⌜ra '⌝ + lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs0) ' + psf, paf), rstep(rs, ra, rs0), Πok(lext, rext, lren, rren), ¬ cod(lren)(rren(ra)) ⊦ |
(λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psf.take(n), rren(ra) ' + paf.take(n))⌝ ) = (λ n. ⌜ra '⌝ + ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ), lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ ) = lim(⌜λ n. ⌜ra '⌝ + ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ), lim(⌜λ n. ⌜ra '⌝ + ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ) ≠ ⌜ra '⌝ + lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs0) ' + psf, paf), rstep(rs, ra, rs0), Πok(lext, rext, lren, rren), ¬ cod(lren)(rren(ra)) ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ (⌜a '⌝ + ⌜nf⌝ ).f.take(n + 1) = a ' + nf.take(n); (s) a: ⊦ (x + y) + z = x + y + z; from specification list
| (λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psf.take(n), rren(ra) ' + paf.take(n))⌝ ) = (λ n. ⌜ra '⌝ + ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ), lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ ) = lim(⌜λ n. ⌜ra '⌝ + ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ), lim(⌜λ n. ⌜ra '⌝ + ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ) ≠ ⌜ra '⌝ + lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs0) ' + psf, paf), rstep(rs, ra, rs0), Πok(lext, rext, lren, rren), ¬ cod(lren)(rren(ra)) ⊦ |
⊦ mon(⌜σf⌝ ) → lim(⌜λ n. ⌜x⌝ + σf(n)⌝ ) = ⌜x⌝ + lim(⌜σf⌝ )
(λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psf.take(n), rren(ra) ' + paf.take(n))⌝ ) = (λ n. ⌜ra '⌝ + ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ), lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ ) = lim(⌜λ n. ⌜ra '⌝ + ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ), lim(⌜λ n. ⌜ra '⌝ + ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ) ≠ ⌜ra '⌝ + lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs0) ' + psf, paf), rstep(rs, ra, rs0), Πok(lext, rext, lren, rren), ¬ cod(lren)(rren(ra)), mon(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ) → lim(⌜λ n. ⌜ra '⌝ + ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ) = ⌜ra '⌝ + lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ) ⊦
Used terms: λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ , ra '
| ⊦ mon(⌜σf⌝ ) → lim(⌜λ n. ⌜x⌝ + σf(n)⌝ ) = ⌜x⌝ + lim(⌜σf⌝ ) |
| (λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psf.take(n), rren(ra) ' + paf.take(n))⌝ ) = (λ n. ⌜ra '⌝ + ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ), lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ ) = lim(⌜λ n. ⌜ra '⌝ + ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ), lim(⌜λ n. ⌜ra '⌝ + ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ) ≠ ⌜ra '⌝ + lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs0) ' + psf, paf), rstep(rs, ra, rs0), Πok(lext, rext, lren, rren), ¬ cod(lren)(rren(ra)), mon(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ) → lim(⌜λ n. ⌜ra '⌝ + ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ) = ⌜ra '⌝ + lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ) ⊦ |
(λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psf.take(n), rren(ra) ' + paf.take(n))⌝ ) = (λ n. ⌜ra '⌝ + ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ), lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ ) = lim(⌜λ n. ⌜ra '⌝ + ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ), lim(⌜λ n. ⌜ra '⌝ + ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ) ≠ ⌜ra '⌝ + lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs0) ' + psf, paf), rstep(rs, ra, rs0), Πok(lext, rext, lren, rren), ¬ cod(lren)(rren(ra)), ¬ mon(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ) ⊦
| (λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psf.take(n), rren(ra) ' + paf.take(n))⌝ ) = (λ n. ⌜ra '⌝ + ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ), lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ ) = lim(⌜λ n. ⌜ra '⌝ + ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ), lim(⌜λ n. ⌜ra '⌝ + ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ) ≠ ⌜ra '⌝ + lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs0) ' + psf, paf), rstep(rs, ra, rs0), Πok(lext, rext, lren, rren), ¬ cod(lren)(rren(ra)), ¬ mon(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ) ⊦ |
⊦ fragω(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))(psf, paf) → mon(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ )
Used simplifier rules: ⊦ Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren) = IOAut (Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)); (s) ⊦ (a ' + nf).take(n + 1) = a ' + nf.take(n); (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: rext, paf, rstep, rstart, lren, rren, lstart, lstep, (ls, rs0) ' + psf, lext
| ⊦ fragω(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))(psf, paf) → mon(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) |
| lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ ) = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psf.take(n), rren(ra) ' + paf.take(n))⌝ ⌝ ), (λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n + 1), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n + 1))⌝ ) ≠ (λ n. ⌜ra '⌝ + ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ), lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psf.take(n), rren(ra) ' + paf.take(n))⌝ ⌝ ) ≠ ⌜ra '⌝ + lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs0) ' + psf, paf), rstep(rs, ra, rs0), Πok(lext, rext, lren, rren), ¬ cod(lren)(rren(ra)) ⊦ |
lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ ) = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psf.take(n), rren(ra) ' + paf.take(n))⌝ ⌝ ), ra ' + πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n)) ≠ πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psf.take(n), rren(ra) ' + paf.take(n)), lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psf.take(n), rren(ra) ' + paf.take(n))⌝ ⌝ ) ≠ ⌜ra '⌝ + lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs0) ' + psf, paf), rstep(rs, ra, rs0), Πok(lext, rext, lren, rren), ¬ cod(lren)(rren(ra)) ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ ⌜x⌝ + ⌜y⌝ = ⌜z⌝ ↔ x + y = z; (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ (⌜a '⌝ + ⌜nf⌝ ).f.take(n + 1) = a ' + nf.take(n); (s) a: ⊦ (x + y) + z = x + y + z; from specification list
| lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (⌜(ls, rs0) '⌝ + ⌜psf⌝ ).f.take(n), (⌜rren(ra) '⌝ + ⌜paf⌝ ).f.take(n))⌝ ⌝ ) = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psf.take(n), rren(ra) ' + paf.take(n))⌝ ⌝ ), ra ' + πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n)) ≠ πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psf.take(n), rren(ra) ' + paf.take(n)), lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psf.take(n), rren(ra) ' + paf.take(n))⌝ ⌝ ) ≠ ⌜ra '⌝ + lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + psf.take(n), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs0) ' + psf, paf), rstep(rs, ra, rs0), Πok(lext, rext, lren, rren), ¬ cod(lren)(rren(ra)) ⊦ |
⊦ # psl = # pal ∧ rstep(rs, ra, rs0) ∧ ¬ cod(lren)(rren(ra)) → πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psl, rren(ra) ' + pal) = ra + πra(lstep, rstep, lren, rren, (ls, rs0) + psl, pal)
Used simplifier rules: ⊦ # nf.take(n) = n; (s) ⊦ a + x = a ' + x; (s) ⊦ # x = # z → (x + y = z + y0 ↔ x = z ∧ y = y0); (ws) a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: psf.take(n), rs, ra, paf.take(n), rstep, lren, rren, rs0, lstep, ls
| ⊦ # psl = # pal ∧ rstep(rs, ra, rs0) ∧ ¬ cod(lren)(rren(ra)) → πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psl, rren(ra) ' + pal) = ra + πra(lstep, rstep, lren, rren, (ls, rs0) + psl, pal) |
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.