| ⊦ nounsharedextR(cren, cext, ren) ∧ Πok(ext, cext, ren, cren) ∧ cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜cren(ca) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα) ∧ frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα) ∧ fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs0) ' + pcsf, paf) ∧ cstep(cs, ca, cs0) ∧ ¬ cod(ren)(cren(ca)) → repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜cren(ca) '⌝ + ⌜paf⌝ , ⌜as '⌝ + aσ, aα) = repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα) |
repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜cren(ca) '⌝ + ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs0) ' + pcsf, paf), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜cren(ca) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(ren)(cren(ca)) ⊦
| repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜cren(ca) '⌝ + ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs0) ' + pcsf, paf), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜cren(ca) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(ren)(cren(ca)) ⊦ |
⊦ cext !(πra(step, cstep, ren, cren, ⌜pcs '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα) → repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcs '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , aσ, aα) = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcs + pcsf.take(n), paf.take(n), aσ, aα)⌝ ⌝ )
repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜cren(ca) '⌝ + ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs0) ' + pcsf, paf), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜cren(ca) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(ren)(cren(ca)), ¬ cext !(πra(step, cstep, ren, cren, ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα) ⊦
repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜cren(ca) '⌝ + ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs0) + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs0) ' + pcsf, paf), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜cren(ca) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), cext !(πra(step, cstep, ren, cren, ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(ren)(cren(ca)) ⊦
Used terms: aren, ren, cstep, cext, aext, aα, cren, (s, cs0), paf, ⌜as '⌝ + aσ, step, pcsf
| ⊦ cext !(πra(step, cstep, ren, cren, ⌜pcs '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα) → repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcs '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , aσ, aα) = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcs + pcsf.take(n), paf.take(n), aσ, aα)⌝ ⌝ ) |
| repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜cren(ca) '⌝ + ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs0) ' + pcsf, paf), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜cren(ca) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(ren)(cren(ca)), ¬ cext !(πra(step, cstep, ren, cren, ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα) ⊦ |
⊦ Πok(lext, rext, lren, rren) ∧ fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs0) ' + psf, paf) ∧ rstep(rs, ra, rs0) ∧ ¬ cod(lren)(rren(ra)) → πra(lstep, rstep, lren, rren, ⌜(ls, rs) '⌝ + ⌜(ls, rs0) '⌝ + ⌜psf⌝ , rren(ra) + ⌜paf⌝ ) = ⌜ra '⌝ + πra(lstep, rstep, lren, rren, (ls, rs0) + ⌜psf⌝ , ⌜paf⌝ )
repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜cren(ca) '⌝ + ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs0) ' + pcsf, paf), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜cren(ca) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(ren)(cren(ca)), ¬ cext !(πra(step, cstep, ren, cren, ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), Πok(ext, cext, ren, cren) ∧ fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs0) ' + pcsf, paf) ∧ cstep(cs, ca, cs0) ∧ ¬ cod(ren)(cren(ca)) → πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , cren(ca) + ⌜paf⌝ ) = ⌜ca '⌝ + πra(step, cstep, ren, cren, (s, cs0) + ⌜pcsf⌝ , ⌜paf⌝ ) ⊦
Used terms: cext, cs, cstart, cstep, pcsf, ca, ren, ext, cren, cs0, step, start, paf, s
| ⊦ Πok(lext, rext, lren, rren) ∧ fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs0) ' + psf, paf) ∧ rstep(rs, ra, rs0) ∧ ¬ cod(lren)(rren(ra)) → πra(lstep, rstep, lren, rren, ⌜(ls, rs) '⌝ + ⌜(ls, rs0) '⌝ + ⌜psf⌝ , rren(ra) + ⌜paf⌝ ) = ⌜ra '⌝ + πra(lstep, rstep, lren, rren, (ls, rs0) + ⌜psf⌝ , ⌜paf⌝ ) |
| repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜cren(ca) '⌝ + ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs0) ' + pcsf, paf), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜cren(ca) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(ren)(cren(ca)), ¬ cext !(πra(step, cstep, ren, cren, ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), Πok(ext, cext, ren, cren) ∧ fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs0) ' + pcsf, paf) ∧ cstep(cs, ca, cs0) ∧ ¬ cod(ren)(cren(ca)) → πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , cren(ca) + ⌜paf⌝ ) = ⌜ca '⌝ + πra(step, cstep, ren, cren, (s, cs0) + ⌜pcsf⌝ , ⌜paf⌝ ) ⊦ |
πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜cren(ca) '⌝ + ⌜paf⌝ ) = ⌜ca '⌝ + πra(step, cstep, ren, cren, ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ ), repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜cren(ca) '⌝ + ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs0) ' + pcsf, paf), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜cren(ca) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(ren)(cren(ca)), ¬ cext !(πra(step, cstep, ren, cren, ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα) ⊦
Used simplifier rules: ⊦ a + σ = ⌜a '⌝ + σ; (s)
| πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜cren(ca) '⌝ + ⌜paf⌝ ) = ⌜ca '⌝ + πra(step, cstep, ren, cren, ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ ), repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜cren(ca) '⌝ + ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs0) ' + pcsf, paf), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜cren(ca) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(ren)(cren(ca)), ¬ cext !(πra(step, cstep, ren, cren, ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα) ⊦ |
Used simplifier rules: nounsharedextR-notcodren-internal: ⊦ ¬ cod(ren)(cren(ca)) ∧ nounsharedextR(cren, cext, ren) → (cext(ca) = None ↔ true); ⊦ ext !(⌜a '⌝ + α) = ext(a) + ext !(α); (s) ⊦ oe + β = (oe = None ⊃ [];⌜oe.get '⌝ ) + β; (s) ⊦ [] + σ = σ; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream
| repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜cren(ca) '⌝ + ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs0) + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs0) ' + pcsf, paf), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜cren(ca) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), cext !(πra(step, cstep, ren, cren, ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(ren)(cren(ca)) ⊦ |
repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜cren(ca) '⌝ + ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs0) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs0) ' + pcsf, paf), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜cren(ca) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(ren)(cren(ca)) ⊦
Used simplifier rules: ⊦ a + x = a ' + x; (s)
| repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜cren(ca) '⌝ + ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs0) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs0) ' + pcsf, paf), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜cren(ca) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(ren)(cren(ca)) ⊦ |
⊦ cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα) → repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf⌝ , ⌜paf⌝ , aσ, aα) = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )
repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜cren(ca) '⌝ + ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs0) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs0) ' + pcsf, paf), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜cren(ca) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), cext !(πra(step, cstep, ren, cren, ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(ren)(cren(ca)), cext !(πra(step, cstep, ren, cren, ⌜(⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ ).f⌝ , ⌜(⌜cren(ca) '⌝ + ⌜paf⌝ ).f⌝ )) ⊑ aext !(aα) → repls(step, cstep, cren, ren, aren, cext, aext, ⌜(⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ ).f⌝ , ⌜(⌜cren(ca) '⌝ + ⌜paf⌝ ).f⌝ , ⌜as '⌝ + aσ, aα) = lim (⌜λ n. ⌜repls (step, cstep, cren, ren, aren, cext, aext, (⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ ).f.take(n + 1), (⌜cren(ca) '⌝ + ⌜paf⌝ ).f.take(n), ⌜as '⌝ + aσ, aα) ⌝ ⌝ ) ⊦
Used terms: aren, ren, cstep, cext, aext, aα, cren, (⌜cren(ca) '⌝ + ⌜paf⌝ ).f, ⌜as '⌝ + aσ, step, (⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ ).f
| ⊦ cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα) → repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf⌝ , ⌜paf⌝ , aσ, aα) = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) |
| repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜cren(ca) '⌝ + ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs0) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs0) ' + pcsf, paf), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜cren(ca) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), cext !(πra(step, cstep, ren, cren, ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(ren)(cren(ca)), cext !(πra(step, cstep, ren, cren, ⌜(⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ ).f⌝ , ⌜(⌜cren(ca) '⌝ + ⌜paf⌝ ).f⌝ )) ⊑ aext !(aα) → repls(step, cstep, cren, ren, aren, cext, aext, ⌜(⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ ).f⌝ , ⌜(⌜cren(ca) '⌝ + ⌜paf⌝ ).f⌝ , ⌜as '⌝ + aσ, aα) = lim (⌜λ n. ⌜repls (step, cstep, cren, ren, aren, cext, aext, (⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ ).f.take(n + 1), (⌜cren(ca) '⌝ + ⌜paf⌝ ).f.take(n), ⌜as '⌝ + aσ, aα) ⌝ ⌝ ) ⊦ |
repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜cren(ca) '⌝ + ⌜paf⌝ , ⌜as '⌝ + aσ, aα) = lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s, cs0) ' + pcsf).take(n), (cren(ca) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜cren(ca) '⌝ + ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs0) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs0) ' + pcsf, paf), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜cren(ca) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(ren)(cren(ca)) ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ (⌜x⌝ + ⌜nf⌝ ).f = x + nf; (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ (⌜a '⌝ + ⌜x⌝ + ⌜nf⌝ ).f.take(n + 1) = a ' + (⌜x⌝ + ⌜nf⌝ ).f.take(n); (s) ⊦ ⌜x + nf⌝ = ⌜x⌝ + ⌜nf⌝ ; (s) ⊦ ⌜(⌜x⌝ + ⌜y⌝ + ⌜nf⌝ ).f⌝ = ⌜x⌝ + ⌜y⌝ + ⌜nf⌝ ; (s)
| repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜cren(ca) '⌝ + ⌜paf⌝ , ⌜as '⌝ + aσ, aα) = lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s, cs0) ' + pcsf).take(n), (cren(ca) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜cren(ca) '⌝ + ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs0) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs0) ' + pcsf, paf), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜cren(ca) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(ren)(cren(ca)) ⊦ |
lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s, cs0) ' + pcsf).take(n), (cren(ca) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ≠ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs0) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs0) ' + pcsf, paf), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜cren(ca) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), cext !(πra(step, cstep, ren, cren, ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(ren)(cren(ca)) ⊦
| lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s, cs0) ' + pcsf).take(n), (cren(ca) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ≠ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs0) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs0) ' + pcsf, paf), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜cren(ca) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), cext !(πra(step, cstep, ren, cren, ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(ren)(cren(ca)) ⊦ |
⊦ mon(⌜σf⌝ ) → lim(⌜σf⌝ ) = lim(⌜λ n. σf(n + m)⌝ )
lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s, cs0) ' + pcsf).take(n), (cren(ca) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ≠ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs0) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs0) ' + pcsf, paf), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜cren(ca) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(ren)(cren(ca)), ¬ mon(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s, cs0) ' + pcsf).take(n), (cren(ca) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦
Used simplifier rules: repls-rec-skip: ⊦ cstep(cs, ca, cs0) ∧ ¬ cod(ren)(cren(ca)) → repls (step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (s, cs0) ' + pcsl, cren(ca) ' + pal, ⌜as '⌝ + aσ, aα) = repls (step, cstep, cren, ren, aren, cext, aext, (s, cs0) ' + pcsl, pal, ⌜as '⌝ + aσ, aα); ⊦ (a ' + nf).take(n + 1) = a ' + nf.take(n); (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: λ n. ⌜repls (step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s, cs0) ' + pcsf).take(n), (cren(ca) ' + paf).take(n), ⌜as '⌝ + aσ, aα) ⌝ , 1
| ⊦ mon(⌜σf⌝ ) → lim(⌜σf⌝ ) = lim(⌜λ n. σf(n + m)⌝ ) |
| lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s, cs0) ' + pcsf).take(n), (cren(ca) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ≠ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs0) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs0) ' + pcsf, paf), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜cren(ca) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(ren)(cren(ca)), ¬ mon(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s, cs0) ' + pcsf).take(n), (cren(ca) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦ |
⊦ nounsharedextR(cren, cext, ren) ∧ Πok(ext, cext, ren, cren) ∧ fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + pcsf, paf) ∧ frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα) ∧ cext !(πra(step, cstep, ren, cren, (s, cs) + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα) → mon(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )
lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s, cs0) ' + pcsf).take(n), (cren(ca) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ≠ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs0) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs0) ' + pcsf, paf), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜cren(ca) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), cext !(πra(step, cstep, ren, cren, ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(ren)(cren(ca)), ¬ mon(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s, cs0) ' + pcsf).take(n), (cren(ca) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦ nounsharedextR(cren, cext, ren) ∧ Πok(ext, cext, ren, cren) ∧ fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + (s, cs0) ' + pcsf, cren(ca) ' + paf) ∧ frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα) ∧ cext !(πra(step, cstep, ren, cren, (s, cs) + ⌜(s, cs0) ' + pcsf⌝ , ⌜cren(ca) ' + paf⌝ )) ⊑ aext !(aα)
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream Used terms: aren, ren, cstep, cext, s, as, aext, aα, ext, astart, cstart, start, cren, astep, cren(ca) ' + paf, cs, aσ, step, (s, cs0) ' + pcsf
| ⊦ nounsharedextR(cren, cext, ren) ∧ Πok(ext, cext, ren, cren) ∧ fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + pcsf, paf) ∧ frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα) ∧ cext !(πra(step, cstep, ren, cren, (s, cs) + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα) → mon(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) |
| lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s, cs0) ' + pcsf).take(n), (cren(ca) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ≠ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs0) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs0) ' + pcsf, paf), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜cren(ca) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), cext !(πra(step, cstep, ren, cren, ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(ren)(cren(ca)), ¬ mon(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s, cs0) ' + pcsf).take(n), (cren(ca) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦ nounsharedextR(cren, cext, ren) ∧ Πok(ext, cext, ren, cren) ∧ fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + (s, cs0) ' + pcsf, cren(ca) ' + paf) ∧ frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα) ∧ cext !(πra(step, cstep, ren, cren, (s, cs) + ⌜(s, cs0) ' + pcsf⌝ , ⌜cren(ca) ' + paf⌝ )) ⊑ aext !(aα) |
lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s, cs0) ' + pcsf).take(n), (cren(ca) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ≠ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs0) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs0) ' + pcsf, paf), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜cren(ca) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(ren)(cren(ca)), ¬ fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + (s, cs0) ' + pcsf, cren(ca) ' + paf), ¬ mon(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s, cs0) ' + pcsf).take(n), (cren(ca) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ ⌜x + nf⌝ = ⌜x⌝ + ⌜nf⌝ ; (s) ⊦ a + σ = ⌜a '⌝ + σ; (s)
| lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s, cs0) ' + pcsf).take(n), (cren(ca) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ≠ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs0) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs0) ' + pcsf, paf), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜cren(ca) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(ren)(cren(ca)), ¬ fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + (s, cs0) ' + pcsf, cren(ca) ' + paf), ¬ mon(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s, cs0) ' + pcsf).take(n), (cren(ca) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦ |
⊦ fragω(IOAut(start, step, ext))(s ' + sf, a ' + af) ↔ step(s, a, sf(0)) ∧ fragω(IOAut(start, step, ext))(sf, af)
lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s, cs0) ' + pcsf).take(n), (cren(ca) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ≠ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs0) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs0) ' + pcsf, paf), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜cren(ca) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), cext !(πra(step, cstep, ren, cren, ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(ren)(cren(ca)), ¬ mon(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s, cs0) ' + pcsf).take(n), (cren(ca) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ¬ Π(step, cstep, ren, cren, ext, cext)((s, cs), cren(ca), (((s, cs0) ' + pcsf))(0)) ∨ ¬ fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs0) ' + pcsf, paf) ⊦
Used terms: (s, cs), Π(ext, cext, ren, cren), cren(ca), Π(start, cstart), (s, cs0) ' + pcsf, paf, Π(step, cstep, ren, cren, ext, cext)
| ⊦ fragω(IOAut(start, step, ext))(s ' + sf, a ' + af) ↔ step(s, a, sf(0)) ∧ fragω(IOAut(start, step, ext))(sf, af) |
| lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s, cs0) ' + pcsf).take(n), (cren(ca) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ≠ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs0) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs0) ' + pcsf, paf), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜cren(ca) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), cext !(πra(step, cstep, ren, cren, ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(ren)(cren(ca)), ¬ mon(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s, cs0) ' + pcsf).take(n), (cren(ca) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ¬ Π(step, cstep, ren, cren, ext, cext)((s, cs), cren(ca), (((s, cs0) ' + pcsf))(0)) ∨ ¬ fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs0) ' + pcsf, paf) ⊦ |
lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s, cs0) ' + pcsf).take(n), (cren(ca) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ≠ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs0) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs0) ' + pcsf, paf), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜cren(ca) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(ren)(cren(ca)), ¬ mon(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s, cs0) ' + pcsf).take(n), (cren(ca) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ¬ Π(step, cstep, ren, cren, ext, cext)((s, cs), cren(ca), (s, cs0)) ⊦
Used simplifier rules: ⊦ ((a ' + nf))(0) = a; (s)
| lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s, cs0) ' + pcsf).take(n), (cren(ca) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ≠ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs0) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs0) ' + pcsf, paf), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜cren(ca) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(ren)(cren(ca)), ¬ mon(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s, cs0) ' + pcsf).take(n), (cren(ca) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ¬ Π(step, cstep, ren, cren, ext, cext)((s, cs), cren(ca), (s, cs0)) ⊦ |
⊦ Π(lstep, rstep, lren, rren, lext, rext)((ls, rs), pa, (ls0, rs0)) ↔ rs = rs0 ∧ (∃ la. lstep(ls, la, ls0) ∧ pa = lren(la) ∧ ¬ cod(rren)(pa)) ∨ ls = ls0 ∧ (∃ ra. rstep(rs, ra, rs0) ∧ pa = rren(ra) ∧ ¬ cod(lren)(pa)) ∨ (∃ la, ra. lstep(ls, la, ls0) ∧ lext(la) ≠ None ∧ pa = lren(la) ∧ rstep(rs, ra, rs0) ∧ rext(ra) ≠ None ∧ pa = rren(ra))
Used simplifier rules: ⊦ Πok(lext, rext, lren, rren) → (rren(ra1) = rren(ra2) ↔ ra1 = ra2); (s) Used terms: cext, cren(ca), cs, cstep, ren, ext, cren, cs0, step, s, s
| ⊦ Π(lstep, rstep, lren, rren, lext, rext)((ls, rs), pa, (ls0, rs0)) ↔ rs = rs0 ∧ (∃ la. lstep(ls, la, ls0) ∧ pa = lren(la) ∧ ¬ cod(rren)(pa)) ∨ ls = ls0 ∧ (∃ ra. rstep(rs, ra, rs0) ∧ pa = rren(ra) ∧ ¬ cod(lren)(pa)) ∨ (∃ la, ra. lstep(ls, la, ls0) ∧ lext(la) ≠ None ∧ pa = lren(la) ∧ rstep(rs, ra, rs0) ∧ rext(ra) ≠ None ∧ pa = rren(ra)) |
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.