| ⊦ nounsharedextR(cren, cext, ren) ∧ Πok(ext, cext, ren, cren) ∧ step(s, a, s0) ∧ ¬ cod(cren)(ren(a)) ∧ cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜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)))((s0, cs) ' + pcsf, paf) → repla(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ , ⌜as '⌝ + aσ, aα) = ⌜ren(a) '⌝ + repla(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα) |
repla(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ ⌜ren(a) '⌝ + repla(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs) ' + pcsf, paf), nounsharedextR(cren, cext, ren), step(s, a, s0), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(cren)(ren(a)) ⊦
| repla(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ ⌜ren(a) '⌝ + repla(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs) ' + pcsf, paf), nounsharedextR(cren, cext, ren), step(s, a, s0), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(cren)(ren(a)) ⊦ |
⊦ cext !(πra(step, cstep, ren, cren, ⌜pcs '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα) → repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcs '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , aσ, aα) = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcs + pcsf.take(n), paf.take(n), aσ, aα)⌝ ⌝ )
repla(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ ⌜ren(a) '⌝ + repla(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs) ' + pcsf, paf), nounsharedextR(cren, cext, ren), step(s, a, s0), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(cren)(ren(a)), ¬ cext !(πra(step, cstep, ren, cren, ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα) ⊦
repla(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ ⌜ren(a) '⌝ + lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s0, cs) + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs) ' + pcsf, paf), nounsharedextR(cren, cext, ren), step(s, a, s0), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(cren)(ren(a)) ⊦
Used terms: aren, ren, cstep, cext, aext, aα, cren, (s0, cs), paf, ⌜as '⌝ + aσ, step, pcsf
| ⊦ cext !(πra(step, cstep, ren, cren, ⌜pcs '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα) → repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcs '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , aσ, aα) = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcs + pcsf.take(n), paf.take(n), aσ, aα)⌝ ⌝ ) |
| repla(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ ⌜ren(a) '⌝ + repla(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs) ' + pcsf, paf), nounsharedextR(cren, cext, ren), step(s, a, s0), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(cren)(ren(a)), ¬ cext !(πra(step, cstep, ren, cren, ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα) ⊦ |
⊦ Πok(lext, rext, lren, rren) ∧ lstep(ls, la, ls0) ∧ ¬ cod(rren)(lren(la)) ∧ fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs) ' + psf, paf) → πra(lstep, rstep, lren, rren, ⌜(ls, rs) '⌝ + ⌜(ls0, rs) '⌝ + ⌜psf⌝ , lren(la) + ⌜paf⌝ ) = πra(lstep, rstep, lren, rren, ⌜(ls0, rs) '⌝ + ⌜psf⌝ , ⌜paf⌝ )
Used simplifier rules: ⊦ a + σ = ⌜a '⌝ + σ; (s) Used terms: cext, cs, cstart, cstep, pcsf, ren, ext, cren, a, step, start, paf, s, s0
| ⊦ Πok(lext, rext, lren, rren) ∧ lstep(ls, la, ls0) ∧ ¬ cod(rren)(lren(la)) ∧ fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs) ' + psf, paf) → πra(lstep, rstep, lren, rren, ⌜(ls, rs) '⌝ + ⌜(ls0, rs) '⌝ + ⌜psf⌝ , lren(la) + ⌜paf⌝ ) = πra(lstep, rstep, lren, rren, ⌜(ls0, rs) '⌝ + ⌜psf⌝ , ⌜paf⌝ ) |
| repla(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ ⌜ren(a) '⌝ + lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s0, cs) + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs) ' + pcsf, paf), nounsharedextR(cren, cext, ren), step(s, a, s0), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(cren)(ren(a)) ⊦ |
repla(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ ⌜ren(a) '⌝ + lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s0, cs) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs) ' + pcsf, paf), nounsharedextR(cren, cext, ren), step(s, a, s0), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(cren)(ren(a)) ⊦
Used simplifier rules: ⊦ a + x = a ' + x; (s)
| repla(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ ⌜ren(a) '⌝ + lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s0, cs) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs) ' + pcsf, paf), nounsharedextR(cren, cext, ren), step(s, a, s0), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(cren)(ren(a)) ⊦ |
⊦ cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα) → repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf⌝ , ⌜paf⌝ , aσ, aα) = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )
repla(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ ⌜ren(a) '⌝ + lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s0, cs) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs) ' + pcsf, paf), nounsharedextR(cren, cext, ren), step(s, a, s0), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(cren)(ren(a)), cext !(πra(step, cstep, ren, cren, ⌜(⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ ).f⌝ , ⌜(⌜ren(a) '⌝ + ⌜paf⌝ ).f⌝ )) ⊑ aext !(aα) → repla(step, cstep, cren, ren, aren, cext, aext, ⌜(⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ ).f⌝ , ⌜(⌜ren(a) '⌝ + ⌜paf⌝ ).f⌝ , ⌜as '⌝ + aσ, aα) = lim (⌜λ n. ⌜repla (step, cstep, cren, ren, aren, cext, aext, (⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ ).f.take(n + 1), (⌜ren(a) '⌝ + ⌜paf⌝ ).f.take(n), ⌜as '⌝ + aσ, aα) ⌝ ⌝ ) ⊦
Used terms: aren, ren, cstep, cext, aext, aα, cren, (⌜ren(a) '⌝ + ⌜paf⌝ ).f, ⌜as '⌝ + aσ, step, (⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ ).f
| ⊦ cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα) → repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf⌝ , ⌜paf⌝ , aσ, aα) = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) |
| repla(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ ⌜ren(a) '⌝ + lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s0, cs) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs) ' + pcsf, paf), nounsharedextR(cren, cext, ren), step(s, a, s0), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(cren)(ren(a)), cext !(πra(step, cstep, ren, cren, ⌜(⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ ).f⌝ , ⌜(⌜ren(a) '⌝ + ⌜paf⌝ ).f⌝ )) ⊑ aext !(aα) → repla(step, cstep, cren, ren, aren, cext, aext, ⌜(⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ ).f⌝ , ⌜(⌜ren(a) '⌝ + ⌜paf⌝ ).f⌝ , ⌜as '⌝ + aσ, aα) = lim (⌜λ n. ⌜repla (step, cstep, cren, ren, aren, cext, aext, (⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ ).f.take(n + 1), (⌜ren(a) '⌝ + ⌜paf⌝ ).f.take(n), ⌜as '⌝ + aσ, aα) ⌝ ⌝ ) ⊦ |
repla(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ , ⌜as '⌝ + aσ, aα) = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s0, cs) ' + pcsf).take(n), (ren(a) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), repla(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ ⌜ren(a) '⌝ + lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s0, cs) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs) ' + pcsf, paf), nounsharedextR(cren, cext, ren), step(s, a, s0), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(cren)(ren(a)) ⊦
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)
| repla(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ , ⌜as '⌝ + aσ, aα) = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s0, cs) ' + pcsf).take(n), (ren(a) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), repla(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ ⌜ren(a) '⌝ + lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s0, cs) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs) ' + pcsf, paf), nounsharedextR(cren, cext, ren), step(s, a, s0), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(cren)(ren(a)) ⊦ |
lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s0, cs) ' + pcsf).take(n), (ren(a) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ≠ ⌜ren(a) '⌝ + lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s0, cs) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs) ' + pcsf, paf), nounsharedextR(cren, cext, ren), step(s, a, s0), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(cren)(ren(a)) ⊦
| lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s0, cs) ' + pcsf).take(n), (ren(a) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ≠ ⌜ren(a) '⌝ + lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s0, cs) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs) ' + pcsf, paf), nounsharedextR(cren, cext, ren), step(s, a, s0), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(cren)(ren(a)) ⊦ |
⊦ mon(⌜σf⌝ ) → lim(⌜σf⌝ ) = lim(⌜λ n. σf(n + m)⌝ )
lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s0, cs) ' + pcsf).take(n), (ren(a) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ≠ ⌜ren(a) '⌝ + lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s0, cs) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs) ' + pcsf, paf), nounsharedextR(cren, cext, ren), step(s, a, s0), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(cren)(ren(a)), ¬ mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s0, cs) ' + pcsf).take(n), (ren(a) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦
lim (⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s0, cs) ' + pcsf).take(n + 1), (ren(a) ' + paf).take(n + 1), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ≠ ⌜ren(a) '⌝ + lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s0, cs) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs) ' + pcsf, paf), mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s0, cs) ' + pcsf).take(n), (ren(a) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), nounsharedextR(cren, cext, ren), step(s, a, s0), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(cren)(ren(a)) ⊦
Used terms: λ n. ⌜repla (step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s0, cs) ' + pcsf).take(n), (ren(a) ' + paf).take(n), ⌜as '⌝ + aσ, aα) ⌝ , 1
| ⊦ mon(⌜σf⌝ ) → lim(⌜σf⌝ ) = lim(⌜λ n. σf(n + m)⌝ ) |
| lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s0, cs) ' + pcsf).take(n), (ren(a) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ≠ ⌜ren(a) '⌝ + lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s0, cs) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs) ' + pcsf, paf), nounsharedextR(cren, cext, ren), step(s, a, s0), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(cren)(ren(a)), ¬ mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s0, cs) ' + pcsf).take(n), (ren(a) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦ |
⊦ mon(σσ) ↔ (∀ n. ⌜n⌝ + ⌜1⌝ < # σσ → σσ[n] ⊑ σσ[n + 1])
lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s0, cs) ' + pcsf).take(n), (ren(a) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ≠ ⌜ren(a) '⌝ + lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s0, cs) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs) ' + pcsf, paf), nounsharedextR(cren, cext, ren), step(s, a, s0), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(cren)(ren(a)), ∃ n. ¬ ( ⌜n⌝ + ⌜1⌝ < # ⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s0, cs) ' + pcsf).take(n), (ren(a) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ → ⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s0, cs) ' + pcsf).take(n), (ren(a) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ [n ] ⊑ ⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s0, cs) ' + pcsf).take(n), (ren(a) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ [n + 1 ]) ⊦
Used terms: ⌜λ n. ⌜repla (step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s0, cs) ' + pcsf).take(n), (ren(a) ' + paf).take(n), ⌜as '⌝ + aσ, aα) ⌝ ⌝
| ⊦ mon(σσ) ↔ (∀ n. ⌜n⌝ + ⌜1⌝ < # σσ → σσ[n] ⊑ σσ[n + 1]) |
| lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s0, cs) ' + pcsf).take(n), (ren(a) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ≠ ⌜ren(a) '⌝ + lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s0, cs) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs) ' + pcsf, paf), nounsharedextR(cren, cext, ren), step(s, a, s0), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(cren)(ren(a)), ∃ n. ¬ ( ⌜n⌝ + ⌜1⌝ < # ⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s0, cs) ' + pcsf).take(n), (ren(a) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ → ⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s0, cs) ' + pcsf).take(n), (ren(a) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ [n ] ⊑ ⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s0, cs) ' + pcsf).take(n), (ren(a) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ [n + 1 ]) ⊦ |
lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s0, cs) ' + pcsf).take(n), (ren(a) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ≠ ⌜ren(a) '⌝ + lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s0, cs) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs) ' + pcsf, paf), nounsharedextR(cren, cext, ren), step(s, a, s0), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(cren)(ren(a)), ¬ ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s0, cs) ' + pcsf).take(n), (ren(a) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ ⌜ren(a) '⌝ + ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s0, cs) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊦
Used simplifier rules: repla-rec-addS: ⊦ step(s, a, s0) ∧ ¬ cod(cren)(ren(a)) → repla (step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (s0, cs) ' + pcsl, ren(a) ' + pal, ⌜as '⌝ + aσ, aα) = ren(a) ' + repla (step, cstep, cren, ren, aren, cext, aext, (s0, cs) ' + pcsl, pal, ⌜as '⌝ + aσ, aα); a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ⌜x + y⌝ = ⌜x⌝ + ⌜y⌝ ; (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 ⊦ (a ' + nf).take(n + 1) = a ' + nf.take(n); (s) ⊦ ⌜nf⌝ [n] = nf(n); (s) add-comm: ⊦ n∞1 + n∞2 = n∞2 + n∞1; from specification nat-inf add-assoc: ⊦ (n∞ + n∞1) + n∞2 = n∞ + n∞1 + n∞2; from specification nat-inf ⊦ ⌜n⌝ ≠ ∞; (s) ⊦ ⌜m⌝ + n∞ = ∞ ↔ n∞ = ∞; (s) ⊦ n∞ < ∞ ↔ n∞ ≠ ∞; (s) ⊦ # ⌜nf⌝ = ∞; (s)
| lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s0, cs) ' + pcsf).take(n), (ren(a) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ≠ ⌜ren(a) '⌝ + lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s0, cs) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs) ' + pcsf, paf), nounsharedextR(cren, cext, ren), step(s, a, s0), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(cren)(ren(a)), ¬ ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s0, cs) ' + pcsf).take(n), (ren(a) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ ⌜ren(a) '⌝ + ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s0, cs) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊦ |
⊦ # x ≤ n → (x + nf).take(n) = x + nf.take(n - # x)
lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s0, cs) ' + pcsf).take(n), (ren(a) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ≠ ⌜ren(a) '⌝ + lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s0, cs) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs) ' + pcsf, paf), nounsharedextR(cren, cext, ren), step(s, a, s0), Πok(ext, cext, ren, cren), # (s0, cs) ' ≤ n, cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(cren)(ren(a)), ¬ ⌜repla (step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (s0, cs) ' + pcsf.take(n - # (s0, cs) '), (ren(a) ' + paf).take(n), ⌜as '⌝ + aσ, aα) ⌝ ⊑ ⌜ren(a) '⌝ + ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s0, cs) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊦
Used simplifier rules: repla-base: ⊦ repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ', [], ⌜as '⌝ + aσ, aα) = []; ⊦ # a ' = 0 +1; (s) ⊦ m ≤ n ↔ ¬ n < m; (ss) ⊦ m < 1 ↔ m = 0; (s) ⊦ x + [] = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ nf.take(0) = []; (s) ⊦ ⌜[]⌝ = []; (s) ⊦ σ + [] = σ; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ [] ⊑ σ; (s) Used terms: (s0, cs) ', pcsf, n
| ⊦ # x ≤ n → (x + nf).take(n) = x + nf.take(n - # x) |
| lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s0, cs) ' + pcsf).take(n), (ren(a) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ≠ ⌜ren(a) '⌝ + lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s0, cs) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs) ' + pcsf, paf), nounsharedextR(cren, cext, ren), step(s, a, s0), Πok(ext, cext, ren, cren), # (s0, cs) ' ≤ n, cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(cren)(ren(a)), ¬ ⌜repla (step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (s0, cs) ' + pcsf.take(n - # (s0, cs) '), (ren(a) ' + paf).take(n), ⌜as '⌝ + aσ, aα) ⌝ ⊑ ⌜ren(a) '⌝ + ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s0, cs) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊦ |
lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s0, cs) ' + pcsf).take(n), (ren(a) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ≠ ⌜ren(a) '⌝ + lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s0, cs) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), n ≠ 0, frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs) ' + pcsf, paf), nounsharedextR(cren, cext, ren), step(s, a, s0), Πok(ext, cext, ren, cren), 1 ≤ n, cext !(πra(step, cstep, ren, cren, ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(cren)(ren(a)), ¬ ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (s0, cs) ' + pcsf.take(n - 1), (ren(a) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ ⌜ren(a) '⌝ + ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s0, cs) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊦
Used simplifier rules: not-zero: 0 < n ⊦ (* n) ≤ m → m ≠ 0; (forward) from specification nat a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ # a ' = 0 +1; (s)
| lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s0, cs) ' + pcsf).take(n), (ren(a) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ≠ ⌜ren(a) '⌝ + lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s0, cs) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), n ≠ 0, frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs) ' + pcsf, paf), nounsharedextR(cren, cext, ren), step(s, a, s0), Πok(ext, cext, ren, cren), 1 ≤ n, cext !(πra(step, cstep, ren, cren, ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(cren)(ren(a)), ¬ ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (s0, cs) ' + pcsf.take(n - 1), (ren(a) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ ⌜ren(a) '⌝ + ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s0, cs) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊦ |
n = n0 + 1, lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s0, cs) ' + pcsf).take(n), (ren(a) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ≠ ⌜ren(a) '⌝ + lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s0, cs) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), n ≠ 0, frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs) ' + pcsf, paf), nounsharedextR(cren, cext, ren), step(s, a, s0), Πok(ext, cext, ren, cren), 1 ≤ n, cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(cren)(ren(a)), ¬ ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (s0, cs) ' + pcsf.take(n0), (ren(a) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ ⌜ren(a) '⌝ + ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s0, cs) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊦
Used simplifier rules: n ≠ 0 ⊦ m = n - 1 ↔ n = m + 1; (elim) Used terms: n, n0
| n = n0 + 1, lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s0, cs) ' + pcsf).take(n), (ren(a) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ≠ ⌜ren(a) '⌝ + lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s0, cs) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), n ≠ 0, frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs) ' + pcsf, paf), nounsharedextR(cren, cext, ren), step(s, a, s0), Πok(ext, cext, ren, cren), 1 ≤ n, cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(cren)(ren(a)), ¬ ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (s0, cs) ' + pcsf.take(n0), (ren(a) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ ⌜ren(a) '⌝ + ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s0, cs) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊦ |
lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s0, cs) ' + pcsf).take(n), (ren(a) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ≠ ⌜ren(a) '⌝ + lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s0, cs) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs) ' + pcsf, paf), nounsharedextR(cren, cext, ren), step(s, a, s0), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(cren)(ren(a)), ¬ ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s0, cs) ' + pcsf.take(n0), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s0, cs) ' + pcsf.take(n0 + 1), paf.take(n0 + 1), ⌜as '⌝ + aσ, aα)⌝ ⊦
Used simplifier rules: repla-rec-addS: ⊦ step(s, a, s0) ∧ ¬ cod(cren)(ren(a)) → repla (step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (s0, cs) ' + pcsl, ren(a) ' + pal, ⌜as '⌝ + aσ, aα) = ren(a) ' + repla (step, cstep, cren, ren, aren, cext, aext, (s0, cs) ' + pcsl, pal, ⌜as '⌝ + aσ, aα); append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ ⌜x⌝ + σ1 ⊑ ⌜x⌝ + σ2 ↔ σ1 ⊑ σ2; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ⌜x + y⌝ = ⌜x⌝ + ⌜y⌝ ; (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ (a ' + nf).take(n + 1) = a ' + nf.take(n); (s) ⊦ m ≤ m + n; (s) ⊦ m + 1 ≠ 0; (s)
| lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s0, cs) ' + pcsf).take(n), (ren(a) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ≠ ⌜ren(a) '⌝ + lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s0, cs) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs) ' + pcsf, paf), nounsharedextR(cren, cext, ren), step(s, a, s0), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(cren)(ren(a)), ¬ ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s0, cs) ' + pcsf.take(n0), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s0, cs) ' + pcsf.take(n0 + 1), paf.take(n0 + 1), ⌜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α) → ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) + pcsf.take(n + 1), paf.take(n + 1), ⌜as '⌝ + aσ, aα)⌝
Used simplifier rules: ⊦ a + σ = ⌜a '⌝ + σ; (s) ⊦ a + x = a ' + x; (s) Used terms: aren, ren, cstep, cext, s0, as, aext, aα, ext, astart, cstart, start, cren, astep, paf, cs, n0, aσ, step, 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α) → ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) + pcsf.take(n + 1), paf.take(n + 1), ⌜as '⌝ + aσ, aα)⌝ |
| lim (⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s0, cs) ' + pcsf).take(n + 1), (ren(a) ' + paf).take(n + 1), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ≠ ⌜ren(a) '⌝ + lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s0, cs) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs) ' + pcsf, paf), mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s0, cs) ' + pcsf).take(n), (ren(a) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), nounsharedextR(cren, cext, ren), step(s, a, s0), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(cren)(ren(a)) ⊦ |
lim(⌜λ n. ⌜ren(a) '⌝ + ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s0, cs) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ≠ ⌜ren(a) '⌝ + lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s0, cs) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs) ' + pcsf, paf), mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s0, cs) ' + pcsf).take(n), (ren(a) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), nounsharedextR(cren, cext, ren), step(s, a, s0), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(cren)(ren(a)) ⊦
Used simplifier rules: repla-rec-addS: ⊦ step(s, a, s0) ∧ ¬ cod(cren)(ren(a)) → repla (step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (s0, cs) ' + pcsl, ren(a) ' + pal, ⌜as '⌝ + aσ, aα) = ren(a) ' + repla (step, cstep, cren, ren, aren, cext, aext, (s0, cs) ' + pcsl, pal, ⌜as '⌝ + aσ, aα); a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ⌜x + y⌝ = ⌜x⌝ + ⌜y⌝ ; (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 ⊦ (a ' + nf).take(n + 1) = a ' + nf.take(n); (s)
| lim(⌜λ n. ⌜ren(a) '⌝ + ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s0, cs) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ≠ ⌜ren(a) '⌝ + lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s0, cs) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs) ' + pcsf, paf), mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s0, cs) ' + pcsf).take(n), (ren(a) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), nounsharedextR(cren, cext, ren), step(s, a, s0), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(cren)(ren(a)) ⊦ |
⊦ mon(⌜σf⌝ ) → lim(⌜λ n. ⌜x⌝ + σf(n)⌝ ) = ⌜x⌝ + lim(⌜σf⌝ )
lim(⌜λ n. ⌜ren(a) '⌝ + ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s0, cs) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ≠ ⌜ren(a) '⌝ + lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s0, cs) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs) ' + pcsf, paf), mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s0, cs) ' + pcsf).take(n), (ren(a) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), nounsharedextR(cren, cext, ren), step(s, a, s0), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(cren)(ren(a)), ¬ mon(⌜λ n0. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s0, cs) ' + pcsf.take(n0), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦
Used terms: ren(a) ', λ n0. ⌜repla (step, cstep, cren, ren, aren, cext, aext, (s0, cs) ' + pcsf.take(n0), paf.take(n0), ⌜as '⌝ + aσ, aα) ⌝
| ⊦ mon(⌜σf⌝ ) → lim(⌜λ n. ⌜x⌝ + σf(n)⌝ ) = ⌜x⌝ + lim(⌜σf⌝ ) |
| lim(⌜λ n. ⌜ren(a) '⌝ + ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s0, cs) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ≠ ⌜ren(a) '⌝ + lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s0, cs) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs) ' + pcsf, paf), mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + ((s0, cs) ' + pcsf).take(n), (ren(a) ' + paf).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), nounsharedextR(cren, cext, ren), step(s, a, s0), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα), ¬ cod(cren)(ren(a)), ¬ mon(⌜λ n0. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s0, cs) ' + pcsf.take(n0), paf.take(n0), ⌜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. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )
Used simplifier rules: ⊦ a + σ = ⌜a '⌝ + σ; (s) Used terms: aren, ren, cstep, cext, s0, as, aext, aα, ext, astart, cstart, start, cren, astep, paf, cs, aσ, step, 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. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) |
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.