| fragω(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))(psf, paf) ⊦ # lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) = # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) + ⌜1⌝ |
# lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) ≠ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) + ⌜1⌝ , fragω(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))(psf, paf) ⊦
| # lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) ≠ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) + ⌜1⌝ , fragω(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))(psf, paf) ⊦ |
# lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) ≠ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) + ⌜1⌝ , fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf) ⊦
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)
| # lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) ≠ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) + ⌜1⌝ , fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf) ⊦ |
⊦ mon(σσ) ∧ σσ ≠ [] → (∀ n. ⌜n⌝ < # σσ → σσ[n] ⊑ lim(σσ)) ∧ (∀ m. ¬ # lim(σσ) < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ ⌜lim(σσ).take(m)⌝ ⊑ σσ[n]))
# lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) ≠ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) + ⌜1⌝ , fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), mon(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) ∧ ⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ≠ [] → (∀ n. ⌜n⌝ < # ⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ → ⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ [n] ⊑ lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ )) ∧ (∀ m. ¬ # lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜n⌝ < # ⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ∧ ⌜lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ [n])) ⊦
Used terms: ⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝
| ⊦ mon(σσ) ∧ σσ ≠ [] → (∀ n. ⌜n⌝ < # σσ → σσ[n] ⊑ lim(σσ)) ∧ (∀ m. ¬ # lim(σσ) < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ ⌜lim(σσ).take(m)⌝ ⊑ σσ[n])) |
| # lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) ≠ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) + ⌜1⌝ , fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), mon(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) ∧ ⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ≠ [] → (∀ n. ⌜n⌝ < # ⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ → ⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ [n] ⊑ lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ )) ∧ (∀ m. ¬ # lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜n⌝ < # ⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ∧ ⌜lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ [n])) ⊦ |
# lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) ≠ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) + ⌜1⌝ , fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), mon(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) → (∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ )) ∧ (∀ m. ¬ # lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ )) ⊦
Used simplifier rules: ⊦ ⌜nf⌝ [n] = nf(n); (s) ⊦ ⌜m⌝ < ∞; (s) ⊦ # ⌜nf⌝ = ∞; (s) ⊦ [] ≠ ⌜nf⌝ ; (s)
| # lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) ≠ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) + ⌜1⌝ , fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), mon(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) → (∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ )) ∧ (∀ m. ¬ # lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ )) ⊦ |
⊦ mon(σσ) ∧ σσ ≠ [] → (∀ n. ⌜n⌝ < # σσ → σσ[n] ⊑ lim(σσ)) ∧ (∀ m. ¬ # lim(σσ) < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ ⌜lim(σσ).take(m)⌝ ⊑ σσ[n]))
# lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) ≠ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) + ⌜1⌝ , fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), mon(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) → (∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ )) ∧ (∀ m. ¬ # lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ )), mon(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) ∧ ⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ≠ [] → (∀ n. ⌜n⌝ < # ⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ → ⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ [n] ⊑ lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ )) ∧ (∀ m. ¬ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜n⌝ < # ⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ∧ ⌜lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ [n])) ⊦
Used terms: ⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝
| ⊦ mon(σσ) ∧ σσ ≠ [] → (∀ n. ⌜n⌝ < # σσ → σσ[n] ⊑ lim(σσ)) ∧ (∀ m. ¬ # lim(σσ) < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ ⌜lim(σσ).take(m)⌝ ⊑ σσ[n])) |
| # lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) ≠ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) + ⌜1⌝ , fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), mon(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) → (∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ )) ∧ (∀ m. ¬ # lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ )), mon(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) ∧ ⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ≠ [] → (∀ n. ⌜n⌝ < # ⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ → ⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ [n] ⊑ lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ )) ∧ (∀ m. ¬ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜n⌝ < # ⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ∧ ⌜lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ [n])) ⊦ |
# lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) ≠ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) + ⌜1⌝ , fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), mon(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) → (∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ )) ∧ (∀ m. ¬ # lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ )), mon(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) → (∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ )) ∧ (∀ m. ¬ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ )) ⊦
Used simplifier rules: ⊦ ⌜nf⌝ [n] = nf(n); (s) ⊦ ⌜m⌝ < ∞; (s) ⊦ # ⌜nf⌝ = ∞; (s) ⊦ [] ≠ ⌜nf⌝ ; (s)
| # lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) ≠ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) + ⌜1⌝ , fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), mon(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) → (∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ )) ∧ (∀ m. ¬ # lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ )), mon(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) → (∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ )) ∧ (∀ m. ¬ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ )) ⊦ |
# lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) ≠ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) + ⌜1⌝ , fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ¬ mon(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), mon(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) → (∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ )) ∧ (∀ m. ¬ # lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ )) ⊦
# lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) ≠ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) + ⌜1⌝ , fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), mon(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) → (∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ )) ∧ (∀ m. ¬ # lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ )), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ) ⊦
| # lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) ≠ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) + ⌜1⌝ , fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ¬ mon(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), mon(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) → (∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ )) ∧ (∀ m. ¬ # lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), 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) Used terms: rext, paf, rstep, rstart, lren, rren, lstart, lstep, 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. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) ≠ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) + ⌜1⌝ , fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), mon(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) → (∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ )) ∧ (∀ m. ¬ # lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ )), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ) ⊦ |
# lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) ≠ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) + ⌜1⌝ , fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ¬ mon(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) ⊦
# lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) ≠ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) + ⌜1⌝ , fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ¬ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ) ⊦
| # lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) ≠ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) + ⌜1⌝ , fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ¬ mon(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), 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) Used terms: rext, paf, rstep, rstart, lren, rren, lstart, lstep, 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))⌝ ⌝ ) |
| # lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) ≠ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) + ⌜1⌝ , fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ¬ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ) ⊦ |
⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) ≠ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) + ⌜1⌝ , fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ¬ # lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ) ⊦
⌜rsf⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) ≠ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) + ⌜1⌝ , fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ¬ # lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ) ⊦
Used simplifier rules: Stream('a) freely generated by ⌜ ⌝, ⌜ ⌝;;
| ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) ≠ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) + ⌜1⌝ , fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ¬ # lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ) ⊦ |
⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜# rsl⌝ ≠ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) + ⌜1⌝ , fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ , ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ) ⊦
Used simplifier rules: ⊦ ⌜x⌝ .take(n) = x.take(n); (s) ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s)
| ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜# rsl⌝ ≠ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) + ⌜1⌝ , fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ , ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ) ⊦ |
⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜# rsl⌝ ≠ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) + ⌜1⌝ , fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ ⊦
⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜raf⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜# rsl⌝ ≠ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) + ⌜1⌝ , fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ ⊦
Used simplifier rules: Stream('a) freely generated by ⌜ ⌝, ⌜ ⌝;;
| ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜# rsl⌝ ≠ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) + ⌜1⌝ , fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ ⊦ |
⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # rsl, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ , ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ) ⊦
Used simplifier rules: ⊦ ⌜x⌝ .take(n) = x.take(n); (s) ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (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)
| ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # rsl, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ , ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ) ⊦ |
⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # rsl, # ral + 1 < # rsl, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ , ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ) ⊦
⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # rsl, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ¬ # ral + 1 < # rsl, ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ , ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ) ⊦
Used formulas: # ral + 1 < # rsl
| ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # rsl, # ral + 1 < # rsl, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ , ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ) ⊦ |
⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # rsl, rsl ≠ [], # ral + 1 < # rsl, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ , ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ) ⊦
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # rsl, rsl ≠ [], # ral + 1 < # rsl, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ , ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ) ⊦ |
⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # rsl, rsl ≠ [], # ral + 1 < # rsl, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ¬ # rsl < # rsl → (∃ n. ⌜rsl.take(# rsl)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ , ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ) ⊦
Used terms: # rsl
| ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # rsl, rsl ≠ [], # ral + 1 < # rsl, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ¬ # rsl < # rsl → (∃ n. ⌜rsl.take(# rsl)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ , ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ) ⊦ |
⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # rsl, rsl ≠ [], # ral + 1 < # rsl, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ⌜rsl⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ , ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ , ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ ⊦
Used simplifier rules: ⊦ # x = n → x.take(n) = x; (s) ⊦ ¬ n < n; (s)
| ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # rsl, rsl ≠ [], # ral + 1 < # rsl, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ⌜rsl⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ , ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ , ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ ⊦ |
⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # rsl, rsl ≠ [], # ral + 1 < # rsl, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ⌜rsl⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ , ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ , ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ) ⊦
Used terms: n
| ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # rsl, rsl ≠ [], # ral + 1 < # rsl, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ⌜rsl⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ , ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ , ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ) ⊦ |
⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) ≠ [], # ral + 1 < # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ ⊦
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ σ ⊑ σ; (s) ⊦ ⌜x⌝ = ⌜x0⌝ ↔ x = x0; (s) ⊦ σ1 ⊑ σ2 → (σ2 ⊑ σ1 ↔ σ1 = σ2); (s)
| ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) ≠ [], # ral + 1 < # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ ⊦ |
⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) ≠ [], # ral + 1 < # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ) ⊦
Used terms: n
| ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) ≠ [], # ral + 1 < # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ) ⊦ |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) ≠ [], # ral + 1 < # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∃ σ1. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + σ1 = ⌜ral⌝ ⊦
Used terms: ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ , ⌜ral⌝
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) ≠ [], # ral + 1 < # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∃ σ1. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + σ1 = ⌜ral⌝ ⊦ |
⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + rα = ⌜ral⌝ , ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) ≠ [], # ral + 1 < # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ) ⊦
| ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + rα = ⌜ral⌝ , ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) ≠ [], # ral + 1 < # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ) ⊦ |
⊦ σ0 = σ1 ↔ # σ0 = # σ1 ∧ (∀ n. ⌜n⌝ < # σ0 → σ0[n] = σ1[n])
#(⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + rα) = # ⌜ral⌝ , ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) ≠ [], # ral + 1 < # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n0. ⌜n0⌝ < #(⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + rα) → (⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + rα)[n0] = ⌜ral⌝ [n0] ⊦
Used terms: ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + rα, ⌜ral⌝
| ⊦ σ0 = σ1 ↔ # σ0 = # σ1 ∧ (∀ n. ⌜n⌝ < # σ0 → σ0[n] = σ1[n]) |
| #(⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + rα) = # ⌜ral⌝ , ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) ≠ [], # ral + 1 < # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n0. ⌜n0⌝ < #(⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + rα) → (⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + rα)[n0] = ⌜ral⌝ [n0] ⊦ |
⌜# πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + # rα = ⌜# ral⌝ , ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) ≠ [], # ral + 1 < # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n0. n0 < # ral → (⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + rα)[n0] = ral[n0] ⊦
Used simplifier rules: ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ ⌜x⌝ [n] = x[n]; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ #(σ + σ1) = # σ + # σ1; (s)
| ⌜# πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + # rα = ⌜# ral⌝ , ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) ≠ [], # ral + 1 < # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n0. n0 < # ral → (⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + rα)[n0] = ral[n0] ⊦ |
⌜# πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + # rα = ⌜# ral⌝ , rα = ⌜ral0⌝ , ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) ≠ [], # ral + 1 < # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ n0. n0 < # ral → (⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + rα)[n0] = ral[n0], ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ) ⊦
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)
| ⌜# πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + # rα = ⌜# ral⌝ , rα = ⌜ral0⌝ , ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) ≠ [], # ral + 1 < # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ n0. n0 < # ral → (⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + rα)[n0] = ral[n0], ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ) ⊦ |
# πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) + # ral0 = # ral, ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) ≠ [], # ral + 1 < # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n0. n0 < # ral → (πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) + ral0)[n0] = ral[n0] ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ (⌜x⌝ + ⌜x0⌝ )[m] = (x + x0)[m]; (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)
| # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) + # ral0 = # ral, ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) ≠ [], # ral + 1 < # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n0. n0 < # ral → (πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) + ral0)[n0] = ral[n0] ⊦ |
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)) = # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) + 1
Used simplifier rules: lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic ⊦ m + n < m + n0 ↔ n < n0; (s) ⊦ m = m0 + n0 ∧ n < n0 → m0 + n < m; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic ⊦ # x = 0 ↔ x = []; (s) ⊦ ¬ m + n < m; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren) = IOAut (Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)); (s) Used terms: rext, paf, n, rstep, rstart, lren, rren, lstart, lstep, 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)) = # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) + 1 |
| ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # rsl, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ¬ # ral + 1 < # rsl, ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ , ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ) ⊦ |
⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # rsl, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), # rsl ≤ # ral, ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ , ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ) ⊦
Used simplifier rules: ⊦ m < n ↔ ¬ n ≤ m; (ss) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m < n + 1 ↔ ¬ n < m; (s) ⊦ m ≠ n → (m < n ↔ ¬ n < m); (ss)
| ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # rsl, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), # rsl ≤ # ral, ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ , ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ) ⊦ |
⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # rsl, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), # rsl ≤ # ral, ¬ # ral < # ral → (∃ n. ⌜ral.take(# ral)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ , ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ) ⊦
Used terms: # ral
| ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # rsl, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), # rsl ≤ # ral, ¬ # ral < # ral → (∃ n. ⌜ral.take(# ral)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ , ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ) ⊦ |
⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # rsl, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), # rsl ≤ # ral, ⌜ral⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ , ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ ⊦
Used simplifier rules: ⊦ # x = n → x.take(n) = x; (s) ⊦ ¬ n < n; (s)
| ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # rsl, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), # rsl ≤ # ral, ⌜ral⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ , ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ ⊦ |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # rsl, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), # rsl ≤ # ral, ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ , ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∃ σ1. ⌜ral⌝ + σ1 = ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊦
Used terms: ⌜ral⌝ , ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # rsl, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), # rsl ≤ # ral, ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ , ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∃ σ1. ⌜ral⌝ + σ1 = ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊦ |
⌜ral⌝ + rα = ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ , ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # rsl, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), # rsl ≤ # ral, ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ ⊦
| ⌜ral⌝ + rα = ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ , ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # rsl, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), # rsl ≤ # ral, ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ ⊦ |
⊦ σ0 = σ1 ↔ # σ0 = # σ1 ∧ (∀ n. ⌜n⌝ < # σ0 → σ0[n] = σ1[n])
#(⌜ral⌝ + rα) = # ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ , ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # rsl, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), # rsl ≤ # ral, ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ , ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n0. ⌜n0⌝ < #(⌜ral⌝ + rα) → (⌜ral⌝ + rα)[n0] = ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ [n0] ⊦
Used terms: ⌜ral⌝ + rα, ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝
| ⊦ σ0 = σ1 ↔ # σ0 = # σ1 ∧ (∀ n. ⌜n⌝ < # σ0 → σ0[n] = σ1[n]) |
| #(⌜ral⌝ + rα) = # ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ , ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # rsl, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), # rsl ≤ # ral, ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ , ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n0. ⌜n0⌝ < #(⌜ral⌝ + rα) → (⌜ral⌝ + rα)[n0] = ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ [n0] ⊦ |
⌜# ral⌝ + # rα = ⌜# πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ , ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # rsl, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), # rsl ≤ # ral, ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ , ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n0. n0 < # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) → (⌜ral⌝ + rα)[n0] = πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0] ⊦
Used simplifier rules: ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ ⌜x⌝ [n] = x[n]; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ #(σ + σ1) = # σ + # σ1; (s)
| ⌜# ral⌝ + # rα = ⌜# πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ , ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # rsl, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), # rsl ≤ # ral, ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ , ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n0. n0 < # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) → (⌜ral⌝ + rα)[n0] = πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0] ⊦ |
⌜# ral⌝ + # rα = ⌜# πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ , rα = ⌜ral0⌝ , ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # rsl, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), # rsl ≤ # ral, ∀ n0. n0 < # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) → (⌜ral⌝ + rα)[n0] = πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0], ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ ⊦
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)
| ⌜# ral⌝ + # rα = ⌜# πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ , rα = ⌜ral0⌝ , ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # rsl, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), # rsl ≤ # ral, ∀ n0. n0 < # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) → (⌜ral⌝ + rα)[n0] = πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0], ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ ⊦ |
# ral + # ral0 = # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # rsl, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), # rsl ≤ # ral, ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ , ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n0. n0 < # ral + # ral0 → (ral + ral0)[n0] = πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0] ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ (⌜x⌝ + ⌜x0⌝ )[m] = (x + x0)[m]; (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)
| # ral + # ral0 = # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # rsl, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), # rsl ≤ # ral, ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ , ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n0. n0 < # ral + # ral0 → (ral + ral0)[n0] = πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0] ⊦ |
# ral + # ral0 = # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # rsl, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), # rsl ≤ # ral, ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ , ∀ n0. n0 < # ral + # ral0 → (ral + ral0)[n0] = πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0], ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ ⊦
Used terms: n
| # ral + # ral0 = # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # rsl, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), # rsl ≤ # ral, ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ , ∀ n0. n0 < # ral + # ral0 → (ral + ral0)[n0] = πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0], ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ ⊦ |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
# ral + # ral0 = # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # rsl, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), # rsl ≤ # ral, ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n0. n0 < # ral + # ral0 → (ral + ral0)[n0] = πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0], ∃ σ1. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + σ1 = ⌜rsl⌝ ⊦
Used terms: ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ , ⌜rsl⌝
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| # ral + # ral0 = # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # rsl, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), # rsl ≤ # ral, ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n0. n0 < # ral + # ral0 → (ral + ral0)[n0] = πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0], ∃ σ1. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + σ1 = ⌜rsl⌝ ⊦ |
⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + rσ = ⌜rsl⌝ , # ral + # ral0 = # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # rsl, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), # rsl ≤ # ral, ∀ n0. n0 < # ral + # ral0 → (ral + ral0)[n0] = πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0], ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ ⊦
| ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + rσ = ⌜rsl⌝ , # ral + # ral0 = # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # rsl, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), # rsl ≤ # ral, ∀ n0. n0 < # ral + # ral0 → (ral + ral0)[n0] = πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0], ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ ⊦ |
⊦ σ0 = σ1 ↔ # σ0 = # σ1 ∧ (∀ n. ⌜n⌝ < # σ0 → σ0[n] = σ1[n])
#(⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + rσ) = # ⌜rsl⌝ , # ral + # ral0 = # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # rsl, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), # rsl ≤ # ral, ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n0. n0 < # ral + # ral0 → (ral + ral0)[n0] = πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0], ∀ n0. ⌜n0⌝ < #(⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + rσ) → (⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + rσ)[n0] = ⌜rsl⌝ [n0] ⊦
Used terms: ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + rσ, ⌜rsl⌝
| ⊦ σ0 = σ1 ↔ # σ0 = # σ1 ∧ (∀ n. ⌜n⌝ < # σ0 → σ0[n] = σ1[n]) |
| #(⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + rσ) = # ⌜rsl⌝ , # ral + # ral0 = # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # rsl, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), # rsl ≤ # ral, ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n0. n0 < # ral + # ral0 → (ral + ral0)[n0] = πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0], ∀ n0. ⌜n0⌝ < #(⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + rσ) → (⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + rσ)[n0] = ⌜rsl⌝ [n0] ⊦ |
⌜# πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + # rσ = ⌜# rsl⌝ , # ral + # ral0 = # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # rsl, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), # rsl ≤ # ral, ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n0. n0 < # ral + # ral0 → (ral + ral0)[n0] = πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0], ∀ n0. n0 < # rsl → (⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + rσ)[n0] = rsl[n0] ⊦
Used simplifier rules: ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ ⌜x⌝ [n] = x[n]; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ #(σ + σ1) = # σ + # σ1; (s)
| ⌜# πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + # rσ = ⌜# rsl⌝ , # ral + # ral0 = # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # rsl, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), # rsl ≤ # ral, ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n0. n0 < # ral + # ral0 → (ral + ral0)[n0] = πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0], ∀ n0. n0 < # rsl → (⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + rσ)[n0] = rsl[n0] ⊦ |
# ral + # ral0 = # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), ⌜# πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + # rσ = ⌜# rsl⌝ , rσ = ⌜rsl0⌝ , ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # rsl, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), # rsl ≤ # ral, ∀ n0. n0 < # rsl → (⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + rσ)[n0] = rsl[n0], ∀ n0. n0 < # ral + # ral0 → (ral + ral0)[n0] = πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0], ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ ⊦
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)
| # ral + # ral0 = # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), ⌜# πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + # rσ = ⌜# rsl⌝ , rσ = ⌜rsl0⌝ , ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # rsl, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), # rsl ≤ # ral, ∀ n0. n0 < # rsl → (⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + rσ)[n0] = rsl[n0], ∀ n0. n0 < # ral + # ral0 → (ral + ral0)[n0] = πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0], ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ ⊦ |
# ral + # ral0 = # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) + # rsl0 = # rsl, ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # rsl, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), # rsl ≤ # ral, ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n0. n0 < # ral + # ral0 → (ral + ral0)[n0] = πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0], ∀ n0. n0 < # rsl → (πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) + rsl0)[n0] = rsl[n0] ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ (⌜x⌝ + ⌜x0⌝ )[m] = (x + x0)[m]; (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)
| # ral + # ral0 = # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) + # rsl0 = # rsl, ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # rsl, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), # rsl ≤ # ral, ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n0. n0 < # ral + # ral0 → (ral + ral0)[n0] = πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0], ∀ n0. n0 < # rsl → (πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) + rsl0)[n0] = rsl[n0] ⊦ |
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)) = # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) + 1
# πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) = # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) + 1, # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) + # rsl0 = # rsl, # ral + # ral0 = # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # rsl, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), # rsl ≤ # ral, ∀ n0. n0 < # rsl → (πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) + rsl0)[n0] = rsl[n0], ∀ n0. n0 < # ral + # ral0 → (ral + ral0)[n0] = πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0], ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ ⊦
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) Used terms: rext, paf, n, rstep, rstart, lren, rren, lstart, lstep, 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)) = # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) + 1 |
| # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) = # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) + 1, # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) + # rsl0 = # rsl, # ral + # ral0 = # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # rsl, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), # rsl ≤ # ral, ∀ n0. n0 < # rsl → (πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) + rsl0)[n0] = rsl[n0], ∀ n0. n0 < # ral + # ral0 → (ral + ral0)[n0] = πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0], ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ ⊦ |
# πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) = (# ral + # ral0) + 1, ((# ral + # ral0) + 1) + # rsl0 = # rsl, # ral + # ral0 = # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # rsl, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), # rsl ≤ # ral, ∀ n0. n0 < # rsl → (πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) + rsl0)[n0] = rsl[n0], ∀ n0. n0 < # ral + # ral0 → (ral + ral0)[n0] = πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0], ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ ⊦
| # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) = (# ral + # ral0) + 1, ((# ral + # ral0) + 1) + # rsl0 = # rsl, # ral + # ral0 = # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # ral + 1 ≠ # rsl, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), # rsl ≤ # ral, ∀ n0. n0 < # rsl → (πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) + rsl0)[n0] = rsl[n0], ∀ n0. n0 < # ral + # ral0 → (ral + ral0)[n0] = πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0], ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ ⊦ |
Used simplifier rules: ⊦ m + n = m + n0 ↔ n = n0; (s) ⊦ m + n = 1 ↔ m = 0 ∧ n = 1 ∨ n = 0 ∧ m = 1; (ws) ⊦ 1 = m + 1 ↔ m = 0; (s) ⊦ # x = 0 ↔ x = []; (s) ⊦ m + 1 ≠ 0; (s) ⊦ m + 1 ≤ n ↔ m < n; (s) ⊦ ¬ m + n < m; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic
| ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜raf⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜# rsl⌝ ≠ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) + ⌜1⌝ , fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ ⊦ |
⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜raf⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜raf⌝ , ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ , ∀ m. ∃ n. ⌜raf.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊦
Used simplifier rules: ⊦ ⌜nf⌝ .take(n) = nf.take(n); (s) ⊦ ¬ ∞ < n∞; (s) ⊦ # ⌜nf⌝ = ∞; (s) ⊦ ⌜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 ⊦ ⌜m⌝ + ∞ = ∞; (s)
| ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜raf⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜raf⌝ , ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ , ∀ m. ∃ n. ⌜raf.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊦ |
⌜raf⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ , ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜raf⌝ , ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∃ n. ⌜raf.take(# rsl)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊦
Used terms: # rsl
| ⌜raf⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ , ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜raf⌝ , ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∃ n. ⌜raf.take(# rsl)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊦ |
⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜raf⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ⌜raf.take(# rsl)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ , ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜raf⌝ , ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ ⊦
| ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜raf⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ⌜raf.take(# rsl)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ , ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜raf⌝ , ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ ⊦ |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
⌜raf⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ , ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜raf⌝ , ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∃ σ1. ⌜raf.take(# rsl)⌝ + σ1 = ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊦
Used terms: ⌜raf.take(# rsl)⌝ , ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| ⌜raf⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ , ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜raf⌝ , ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∃ σ1. ⌜raf.take(# rsl)⌝ + σ1 = ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊦ |
⌜raf.take(# rsl)⌝ + rα = ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ , ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜raf⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜raf⌝ , ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ ⊦
| ⌜raf.take(# rsl)⌝ + rα = ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ , ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜raf⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜raf⌝ , ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ ⊦ |
⊦ σ0 = σ1 ↔ # σ0 = # σ1 ∧ (∀ n. ⌜n⌝ < # σ0 → σ0[n] = σ1[n])
#(⌜raf.take(# rsl)⌝ + rα) = # ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ , ⌜raf⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ , ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜raf⌝ , ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n0. ⌜n0⌝ < #(⌜raf.take(# rsl)⌝ + rα) → (⌜raf.take(# rsl)⌝ + rα)[n0] = ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ [n0] ⊦
Used terms: ⌜raf.take(# rsl)⌝ + rα, ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝
| ⊦ σ0 = σ1 ↔ # σ0 = # σ1 ∧ (∀ n. ⌜n⌝ < # σ0 → σ0[n] = σ1[n]) |
| #(⌜raf.take(# rsl)⌝ + rα) = # ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ , ⌜raf⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ , ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜raf⌝ , ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n0. ⌜n0⌝ < #(⌜raf.take(# rsl)⌝ + rα) → (⌜raf.take(# rsl)⌝ + rα)[n0] = ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ [n0] ⊦ |
⌜# rsl⌝ + # rα = ⌜# πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ , ⌜raf⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ , ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜raf⌝ , ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n0. n0 < # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) → (⌜raf.take(# rsl)⌝ + rα)[n0] = πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0] ⊦
Used simplifier rules: ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ ⌜x⌝ [n] = x[n]; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ # ⌜nf.take(n)⌝ = ⌜n⌝ ; (s) ⊦ #(σ + σ1) = # σ + # σ1; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s)
| ⌜# rsl⌝ + # rα = ⌜# πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ , ⌜raf⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ , ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜raf⌝ , ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n0. n0 < # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) → (⌜raf.take(# rsl)⌝ + rα)[n0] = πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0] ⊦ |
⌜# rsl⌝ + # rα = ⌜# πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ , rα = ⌜ral⌝ , ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜raf⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ n0. n0 < # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) → (⌜raf.take(# rsl)⌝ + rα)[n0] = πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0], ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜raf⌝ , ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ ⊦
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)
| ⌜# rsl⌝ + # rα = ⌜# πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ , rα = ⌜ral⌝ , ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜raf⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ n0. n0 < # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) → (⌜raf.take(# rsl)⌝ + rα)[n0] = πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0], ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜raf⌝ , ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ ⊦ |
# rsl + # ral = # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), ⌜raf⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ , ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜raf⌝ , ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n0. n0 < # rsl + # ral → (raf.take(# rsl) + ral)[n0] = πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0] ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ (⌜x⌝ + ⌜x0⌝ )[m] = (x + x0)[m]; (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)
| # rsl + # ral = # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), ⌜raf⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ , ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜raf⌝ , ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n0. n0 < # rsl + # ral → (raf.take(# rsl) + ral)[n0] = πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0] ⊦ |
# rsl + # ral = # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜raf⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ , ∀ n0. n0 < # rsl + # ral → (raf.take(# rsl) + ral)[n0] = πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0], ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜raf⌝ ⊦
Used terms: n
| # rsl + # ral = # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜raf⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsl⌝ , ∀ n0. n0 < # rsl + # ral → (raf.take(# rsl) + ral)[n0] = πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0], ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜raf⌝ ⊦ |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
# rsl + # ral = # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), ⌜raf⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜raf⌝ , ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n0. n0 < # rsl + # ral → (raf.take(# rsl) + ral)[n0] = πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0], ∃ σ1. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + σ1 = ⌜rsl⌝ ⊦
Used terms: ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ , ⌜rsl⌝
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| # rsl + # ral = # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), ⌜raf⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜raf⌝ , ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n0. n0 < # rsl + # ral → (raf.take(# rsl) + ral)[n0] = πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0], ∃ σ1. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + σ1 = ⌜rsl⌝ ⊦ |
⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + rσ = ⌜rsl⌝ , # rsl + # ral = # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜raf⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ n0. n0 < # rsl + # ral → (raf.take(# rsl) + ral)[n0] = πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0], ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜raf⌝ ⊦
| ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + rσ = ⌜rsl⌝ , # rsl + # ral = # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜raf⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ n0. n0 < # rsl + # ral → (raf.take(# rsl) + ral)[n0] = πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0], ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜raf⌝ ⊦ |
⊦ σ0 = σ1 ↔ # σ0 = # σ1 ∧ (∀ n. ⌜n⌝ < # σ0 → σ0[n] = σ1[n])
#(⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + rσ) = # ⌜rsl⌝ , # rsl + # ral = # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), ⌜raf⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜raf⌝ , ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n0. n0 < # rsl + # ral → (raf.take(# rsl) + ral)[n0] = πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0], ∀ n0. ⌜n0⌝ < #(⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + rσ) → (⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + rσ)[n0] = ⌜rsl⌝ [n0] ⊦
Used terms: ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + rσ, ⌜rsl⌝
| ⊦ σ0 = σ1 ↔ # σ0 = # σ1 ∧ (∀ n. ⌜n⌝ < # σ0 → σ0[n] = σ1[n]) |
| #(⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + rσ) = # ⌜rsl⌝ , # rsl + # ral = # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), ⌜raf⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜raf⌝ , ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n0. n0 < # rsl + # ral → (raf.take(# rsl) + ral)[n0] = πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0], ∀ n0. ⌜n0⌝ < #(⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + rσ) → (⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + rσ)[n0] = ⌜rsl⌝ [n0] ⊦ |
⌜# πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + # rσ = ⌜# rsl⌝ , # rsl + # ral = # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), ⌜raf⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜raf⌝ , ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n0. n0 < # rsl + # ral → (raf.take(# rsl) + ral)[n0] = πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0], ∀ n0. n0 < # rsl → (⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + rσ)[n0] = rsl[n0] ⊦
Used simplifier rules: ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ ⌜x⌝ [n] = x[n]; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ #(σ + σ1) = # σ + # σ1; (s)
| ⌜# πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + # rσ = ⌜# rsl⌝ , # rsl + # ral = # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), ⌜raf⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜raf⌝ , ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n0. n0 < # rsl + # ral → (raf.take(# rsl) + ral)[n0] = πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0], ∀ n0. n0 < # rsl → (⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + rσ)[n0] = rsl[n0] ⊦ |
# rsl + # ral = # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), ⌜# πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + # rσ = ⌜# rsl⌝ , rσ = ⌜rsl0⌝ , ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜raf⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ n0. n0 < # rsl → (⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + rσ)[n0] = rsl[n0], ∀ n0. n0 < # rsl + # ral → (raf.take(# rsl) + ral)[n0] = πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0], ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜raf⌝ ⊦
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)
| # rsl + # ral = # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), ⌜# πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + # rσ = ⌜# rsl⌝ , rσ = ⌜rsl0⌝ , ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜raf⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ n0. n0 < # rsl → (⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + rσ)[n0] = rsl[n0], ∀ n0. n0 < # rsl + # ral → (raf.take(# rsl) + ral)[n0] = πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0], ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜raf⌝ ⊦ |
# rsl + # ral = # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) + # rsl0 = # rsl, ⌜raf⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜raf⌝ , ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n0. n0 < # rsl + # ral → (raf.take(# rsl) + ral)[n0] = πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0], ∀ n0. n0 < # rsl → (πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) + rsl0)[n0] = rsl[n0] ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ (⌜x⌝ + ⌜x0⌝ )[m] = (x + x0)[m]; (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)
| # rsl + # ral = # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) + # rsl0 = # rsl, ⌜raf⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsl⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜raf⌝ , ∀ m. ¬ # rsl < m → (∃ n. ⌜rsl.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n0. n0 < # rsl + # ral → (raf.take(# rsl) + ral)[n0] = πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0], ∀ n0. n0 < # rsl → (πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) + rsl0)[n0] = rsl[n0] ⊦ |
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)) = # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) + 1
Used simplifier rules: ⊦ m = m + n ↔ n = 0; (s) ⊦ m + n = 0 ↔ m = 0 ∧ n = 0; (ws) ⊦ # x = 0 ↔ x = []; (s) ⊦ m + 1 ≠ 0; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren) = IOAut (Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)); (s) Used terms: rext, paf, n, rstep, rstart, lren, rren, lstart, lstep, 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)) = # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) + 1 |
| ⌜rsf⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) ≠ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) + ⌜1⌝ , fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ¬ # lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ) ⊦ |
⌜rsf⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) ≠ ∞, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsf⌝ , ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ m. ∃ n. ⌜rsf.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊦
Used simplifier rules: ⊦ ⌜nf⌝ .take(n) = nf.take(n); (s) ⊦ ¬ ∞ < n∞; (s) ⊦ # ⌜nf⌝ = ∞; (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⌝ + n∞ = ∞ ↔ n∞ = ∞; (s)
| ⌜rsf⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) ≠ ∞, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsf⌝ , ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ m. ∃ n. ⌜rsf.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊦ |
⌜rsf⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) ≠ ∞, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ∃ n. ⌜rsf.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ , ∀ m. ¬ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsf⌝ ⊦
Used simplifier rules: Stream('a) freely generated by ⌜ ⌝, ⌜ ⌝;; ⊦ # ⌜nf⌝ = ∞; (s)
| ⌜rsf⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) ≠ ∞, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ∃ n. ⌜rsf.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ , ∀ m. ¬ # lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsf⌝ ⊦ |
⌜rsf⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ∃ n. ⌜rsf.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ , ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsf⌝ , ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ) ⊦
Used simplifier rules: ⊦ ⌜x⌝ .take(n) = x.take(n); (s) ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ ⌜n⌝ ≠ ∞; (s)
| ⌜rsf⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ∃ n. ⌜rsf.take(m)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ , ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsf⌝ , ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ) ⊦ |
⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsf⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsf⌝ , ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∃ n. ⌜rsf.take(# ral + 2)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊦
Used terms: # ral + 2
| ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsf⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsf⌝ , ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∃ n. ⌜rsf.take(# ral + 2)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊦ |
⌜rsf⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ⌜rsf.take(# ral + 2)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ , ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsf⌝ , ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ) ⊦
| ⌜rsf⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ⌜rsf.take(# ral + 2)⌝ ⊑ ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ , ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsf⌝ , ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ) ⊦ |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsf⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsf⌝ , ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∃ σ1. ⌜rsf.take(# ral + 2)⌝ + σ1 = ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊦
Used terms: ⌜rsf.take(# ral + 2)⌝ , ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsf⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsf⌝ , ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∃ σ1. ⌜rsf.take(# ral + 2)⌝ + σ1 = ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊦ |
⌜rsf.take(# ral + 2)⌝ + rσ = ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ , ⌜rsf⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsf⌝ , ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ) ⊦
| ⌜rsf.take(# ral + 2)⌝ + rσ = ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ , ⌜rsf⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsf⌝ , ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ) ⊦ |
⊦ σ0 = σ1 ↔ # σ0 = # σ1 ∧ (∀ n. ⌜n⌝ < # σ0 → σ0[n] = σ1[n])
#(⌜rsf.take(# ral + 2)⌝ + rσ) = # ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ , ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsf⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsf⌝ , ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ n0. ⌜n0⌝ < #(⌜rsf.take(# ral + 2)⌝ + rσ) → (⌜rsf.take(# ral + 2)⌝ + rσ)[n0] = ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ [n0] ⊦
Used terms: ⌜rsf.take(# ral + 2)⌝ + rσ, ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝
| ⊦ σ0 = σ1 ↔ # σ0 = # σ1 ∧ (∀ n. ⌜n⌝ < # σ0 → σ0[n] = σ1[n]) |
| #(⌜rsf.take(# ral + 2)⌝ + rσ) = # ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ , ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsf⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsf⌝ , ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ n0. ⌜n0⌝ < #(⌜rsf.take(# ral + 2)⌝ + rσ) → (⌜rsf.take(# ral + 2)⌝ + rσ)[n0] = ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ [n0] ⊦ |
(⌜# ral⌝ + ⌜2⌝ ) + # rσ = ⌜# πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ , ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsf⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsf⌝ , ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ n0. n0 < # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) → (⌜rsf.take(# ral + 2)⌝ + rσ)[n0] = πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0] ⊦
Used simplifier rules: ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ ⌜x⌝ [n] = x[n]; (s) 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 ⊦ ⌜m + n⌝ = ⌜m⌝ + ⌜n⌝ ; (s) ⊦ # ⌜nf.take(n)⌝ = ⌜n⌝ ; (s) ⊦ #(σ + σ1) = # σ + # σ1; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s)
| (⌜# ral⌝ + ⌜2⌝ ) + # rσ = ⌜# πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ , ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsf⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsf⌝ , ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ n0. n0 < # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) → (⌜rsf.take(# ral + 2)⌝ + rσ)[n0] = πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0] ⊦ |
(⌜# ral⌝ + ⌜2⌝ ) + # rσ = ⌜# πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ , rσ = ⌜rsl⌝ , ⌜rsf⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ n0. n0 < # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) → (⌜rsf.take(# ral + 2)⌝ + rσ)[n0] = πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0], ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsf⌝ , ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ) ⊦
Used simplifier rules: Stream('a) freely generated by ⌜ ⌝, ⌜ ⌝;; ⊦ # ⌜nf⌝ = ∞; (s) ⊦ ⌜m⌝ + ∞ = ∞; (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)
| (⌜# ral⌝ + ⌜2⌝ ) + # rσ = ⌜# πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ , rσ = ⌜rsl⌝ , ⌜rsf⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ n0. n0 < # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) → (⌜rsf.take(# ral + 2)⌝ + rσ)[n0] = πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0], ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsf⌝ , ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ) ⊦ |
# ral + 2 + # rsl = # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsf⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsf⌝ , ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ n0. n0 < # ral + 2 + # rsl → (rsf.take(# ral + 2) + rsl)[n0] = πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0] ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ (⌜x⌝ + ⌜x0⌝ )[m] = (x + x0)[m]; (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 ⊦ ⌜n1⌝ + ⌜n⌝ + ⌜m⌝ = ⌜n0⌝ ↔ n1 + n + m = n0; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s)
| # ral + 2 + # rsl = # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsf⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsf⌝ , ∀ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ n0. n0 < # ral + 2 + # rsl → (rsf.take(# ral + 2) + rsl)[n0] = πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0] ⊦ |
# ral + 2 + # rsl = # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), ⌜rsf⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ n0. n0 < # ral + 2 + # rsl → (rsf.take(# ral + 2) + rsl)[n0] = πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0], ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsf⌝ , ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ) ⊦
Used terms: n
| # ral + 2 + # rsl = # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), ⌜rsf⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜ral⌝ , ∀ n0. n0 < # ral + 2 + # rsl → (rsf.take(# ral + 2) + rsl)[n0] = πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0], ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsf⌝ , ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ) ⊦ |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
# ral + 2 + # rsl = # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsf⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsf⌝ , ∀ n0. n0 < # ral + 2 + # rsl → (rsf.take(# ral + 2) + rsl)[n0] = πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0], ∃ σ1. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + σ1 = ⌜ral⌝ ⊦
Used terms: ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ , ⌜ral⌝
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| # ral + 2 + # rsl = # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsf⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsf⌝ , ∀ n0. n0 < # ral + 2 + # rsl → (rsf.take(# ral + 2) + rsl)[n0] = πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0], ∃ σ1. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + σ1 = ⌜ral⌝ ⊦ |
⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + rα = ⌜ral⌝ , # ral + 2 + # rsl = # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), ⌜rsf⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ n0. n0 < # ral + 2 + # rsl → (rsf.take(# ral + 2) + rsl)[n0] = πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0], ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsf⌝ , ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ) ⊦
| ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + rα = ⌜ral⌝ , # ral + 2 + # rsl = # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), ⌜rsf⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ n0. n0 < # ral + 2 + # rsl → (rsf.take(# ral + 2) + rsl)[n0] = πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0], ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsf⌝ , ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ) ⊦ |
⊦ σ0 = σ1 ↔ # σ0 = # σ1 ∧ (∀ n. ⌜n⌝ < # σ0 → σ0[n] = σ1[n])
#(⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + rα) = # ⌜ral⌝ , # ral + 2 + # rsl = # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsf⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsf⌝ , ∀ n0. n0 < # ral + 2 + # rsl → (rsf.take(# ral + 2) + rsl)[n0] = πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0], ∀ n0. ⌜n0⌝ < #(⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + rα) → (⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + rα)[n0] = ⌜ral⌝ [n0] ⊦
Used terms: ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + rα, ⌜ral⌝
| ⊦ σ0 = σ1 ↔ # σ0 = # σ1 ∧ (∀ n. ⌜n⌝ < # σ0 → σ0[n] = σ1[n]) |
| #(⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + rα) = # ⌜ral⌝ , # ral + 2 + # rsl = # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsf⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsf⌝ , ∀ n0. n0 < # ral + 2 + # rsl → (rsf.take(# ral + 2) + rsl)[n0] = πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0], ∀ n0. ⌜n0⌝ < #(⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + rα) → (⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + rα)[n0] = ⌜ral⌝ [n0] ⊦ |
⌜# πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + # rα = ⌜# ral⌝ , # ral + 2 + # rsl = # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsf⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsf⌝ , ∀ n0. n0 < # ral + 2 + # rsl → (rsf.take(# ral + 2) + rsl)[n0] = πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0], ∀ n0. n0 < # ral → (⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + rα)[n0] = ral[n0] ⊦
Used simplifier rules: ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ ⌜x⌝ [n] = x[n]; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ #(σ + σ1) = # σ + # σ1; (s)
| ⌜# πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + # rα = ⌜# ral⌝ , # ral + 2 + # rsl = # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsf⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsf⌝ , ∀ n0. n0 < # ral + 2 + # rsl → (rsf.take(# ral + 2) + rsl)[n0] = πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0], ∀ n0. n0 < # ral → (⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + rα)[n0] = ral[n0] ⊦ |
# ral + 2 + # rsl = # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), ⌜# πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + # rα = ⌜# ral⌝ , rα = ⌜ral0⌝ , ⌜rsf⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ n0. n0 < # ral → (⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + rα)[n0] = ral[n0], ∀ n0. n0 < # ral + 2 + # rsl → (rsf.take(# ral + 2) + rsl)[n0] = πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0], ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsf⌝ , ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ) ⊦
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)
| # ral + 2 + # rsl = # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), ⌜# πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + # rα = ⌜# ral⌝ , rα = ⌜ral0⌝ , ⌜rsf⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ n0. n0 < # ral → (⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ + rα)[n0] = ral[n0], ∀ n0. n0 < # ral + 2 + # rsl → (rsf.take(# ral + 2) + rsl)[n0] = πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0], ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsf⌝ , ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ) ⊦ |
# ral + 2 + # rsl = # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) + # ral0 = # ral, ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsf⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsf⌝ , ∀ n0. n0 < # ral + 2 + # rsl → (rsf.take(# ral + 2) + rsl)[n0] = πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0], ∀ n0. n0 < # ral → (πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) + ral0)[n0] = ral[n0] ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ (⌜x⌝ + ⌜x0⌝ )[m] = (x + x0)[m]; (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)
| # ral + 2 + # rsl = # πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)), # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) + # ral0 = # ral, ⌜ral⌝ = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜rsf⌝ = lim(⌜λ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ∀ m. ¬ # ral < m → (∃ n. ⌜ral.take(m)⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ), ∀ n. ⌜πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜rsf⌝ , ∀ n0. n0 < # ral + 2 + # rsl → (rsf.take(# ral + 2) + rsl)[n0] = πrs(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))[n0], ∀ n0. n0 < # ral → (πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) + ral0)[n0] = ral[n0] ⊦ |
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)) = # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) + 1
Used simplifier rules: n < n0 ⊦ m + (* n) = m0 + (* n0) ↔ m = m0 + (n0 - n); (s) ⊦ m = m + n ↔ n = 0; (s) ⊦ m + n = 0 ↔ m = 0 ∧ n = 0; (ws) ⊦ # x = 0 ↔ x = []; (s) ⊦ m + 1 ≠ 0; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren) = IOAut (Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)); (s) Used terms: rext, paf, n, rstep, rstart, lren, rren, lstart, lstep, 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)) = # πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)) + 1 |
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.