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