| nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcσ, pα), frag(IOAut(astart, astep, aext))(aσ, aα), cext !(πra(step, cstep, ren, cren, pcσ, pα)) = aext !(aα) ⊦ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)) |
cext !(πra(step, cstep, ren, cren, pcσ, pα)) = aext !(aα), frag(IOAut(astart, astep, aext))(aσ, aα), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcσ, pα), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)) ⊦
| cext !(πra(step, cstep, ren, cren, pcσ, pα)) = aext !(aα), frag(IOAut(astart, astep, aext))(aσ, aα), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcσ, pα), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsl⌝ , pα)) = aext !(aα), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜pcsl⌝ , pα), frag(IOAut(astart, astep, aext))(aσ, aα), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcsl⌝ , pα, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcsl⌝ , pα, aσ, aα)) ⊦
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , pα)) = aext !(aα), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜pcsf⌝ , pα), frag(IOAut(astart, astep, aext))(aσ, aα), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf⌝ , pα, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf⌝ , pα, aσ, aα)) ⊦
Used simplifier rules: Stream('a) freely generated by ⌜ ⌝, ⌜ ⌝;;
| cext !(πra(step, cstep, ren, cren, ⌜pcsl⌝ , pα)) = aext !(aα), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜pcsl⌝ , pα), frag(IOAut(astart, astep, aext))(aσ, aα), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcsl⌝ , pα, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcsl⌝ , pα, aσ, aα)) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsl⌝ , ⌜pal⌝ )) = aext !(aα), frag(IOAut(astart, astep, aext))(aσ, aα), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜pcsl⌝ , ⌜pal⌝ ), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcsl⌝ , ⌜pal⌝ , aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcsl⌝ , ⌜pal⌝ , aσ, aα)) ⊦
Used simplifier rules: Stream('a) freely generated by ⌜ ⌝, ⌜ ⌝;; ⊦ ¬ frag(ioa)(⌜sl⌝ , ⌜af⌝ ); (s)
| cext !(πra(step, cstep, ren, cren, ⌜pcsl⌝ , ⌜pal⌝ )) = aext !(aα), frag(IOAut(astart, astep, aext))(aσ, aα), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜pcsl⌝ , ⌜pal⌝ ), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcsl⌝ , ⌜pal⌝ , aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcsl⌝ , ⌜pal⌝ , aσ, aα)) ⊦ |
⊦ # pcsl = # pal + 1 → repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcsl⌝ , ⌜pal⌝ , aσ, aα) = ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)⌝
cext !(πra(step, cstep, ren, cren, ⌜pcsl⌝ , ⌜pal⌝ )) = aext !(aα), # pcsl = # pal + 1, frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜pcsl⌝ , ⌜pal⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)⌝ , repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcsl⌝ , ⌜pal⌝ , aσ, aα)) ⊦
Used simplifier rules: ⊦ frag(ioa)(⌜sl⌝ , ⌜al⌝ ) ↔ frag*(ioa)(sl, al); (s) ⊦ frag*(IOAut(start, step, ext))(sl, al) → (# sl = # al + 1 ↔ true); (ss) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: aren, ren, cstep, cext, aext, aα, pal, cren, pcsl, aσ, step
| ⊦ # pcsl = # pal + 1 → repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcsl⌝ , ⌜pal⌝ , aσ, aα) = ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)⌝ |
| cext !(πra(step, cstep, ren, cren, ⌜pcsl⌝ , ⌜pal⌝ )) = aext !(aα), # pcsl = # pal + 1, frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜pcsl⌝ , ⌜pal⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)⌝ , repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcsl⌝ , ⌜pal⌝ , aσ, aα)) ⊦ |
⊦ # pcsl = # pal + 1 → repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcsl⌝ , ⌜pal⌝ , aσ, aα) = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)⌝
cext !(πra(step, cstep, ren, cren, ⌜pcsl⌝ , ⌜pal⌝ )) = aext !(aα), # pcsl = # pal + 1, frag(IOAut(astart, astep, aext))(aσ, aα), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜pcsl⌝ , ⌜pal⌝ ), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)⌝ , ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)⌝ ) ⊦
Used terms: aren, ren, cstep, cext, aext, aα, pal, cren, pcsl, aσ, step
| ⊦ # pcsl = # pal + 1 → repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcsl⌝ , ⌜pal⌝ , aσ, aα) = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)⌝ |
| cext !(πra(step, cstep, ren, cren, ⌜pcsl⌝ , ⌜pal⌝ )) = aext !(aα), # pcsl = # pal + 1, frag(IOAut(astart, astep, aext))(aσ, aα), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜pcsl⌝ , ⌜pal⌝ ), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)⌝ , ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)⌝ ) ⊦ |
⊦ # psl = # pal + 1 → πra(lstep, rstep, lren, rren, ⌜psl⌝ , ⌜pal⌝ ) = ⌜πra(lstep, rstep, lren, rren, psl, pal)⌝
cext !(⌜πra(step, cstep, ren, cren, pcsl, pal)⌝ ) = aext !(aα), # pcsl = # pal + 1, frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜pcsl⌝ , ⌜pal⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)⌝ , ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)⌝ ) ⊦
Used terms: pcsl, cstep, pal, ren, cren, step
| ⊦ # psl = # pal + 1 → πra(lstep, rstep, lren, rren, ⌜psl⌝ , ⌜pal⌝ ) = ⌜πra(lstep, rstep, lren, rren, psl, pal)⌝ |
| cext !(⌜πra(step, cstep, ren, cren, pcsl, pal)⌝ ) = aext !(aα), # pcsl = # pal + 1, frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜pcsl⌝ , ⌜pal⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)⌝ , ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)⌝ ) ⊦ |
⊦ nounsharedextR(cren, cext, ren) ∧ Πok(ext, cext, ren, cren) ∧ Πok(ext, aext, ren, aren) ∧ oinj(cext) ∧ oinj(aext) ∧ oinj(ext) ∧ frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsl, pal) ∧ frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα) ∧ cext !(⌜πra(step, cstep, ren, cren, pcsl, pal)⌝ ) ⊑ aext !(aα) ∧ sameshared(cren, aren, ren) → frag*(Π(IOAut(start, step, ext), IOAut(astart, astep, aext), ren, aren)) (repls(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, ⌜as '⌝ + aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, ⌜as '⌝ + aσ, aα))
cext !(⌜πra(step, cstep, ren, cren, pcsl, pal)⌝ ) = aext !(aα), # pcsl = # pal + 1, frag(IOAut(astart, astep, aext))(aσ, aα), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜pcsl⌝ , ⌜pal⌝ ), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)⌝ , ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)⌝ ), nounsharedextR(cren, cext, ren) ∧ Πok(ext, cext, ren, cren) ∧ Πok(ext, aext, ren, aren) ∧ oinj(cext) ∧ oinj(aext) ∧ oinj(ext) ∧ frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsl, pal) ∧ frag(IOAut(astart, astep, aext))(⌜hd(aσ) '⌝ + tl(aσ), aα) ∧ cext !(⌜πra(step, cstep, ren, cren, pcsl, pal)⌝ ) ⊑ aext !(aα) ∧ sameshared(cren, aren, ren) → frag*(Π(IOAut(start, step, ext), IOAut(astart, astep, aext), ren, aren)) (repls(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, ⌜hd(aσ) '⌝ + tl(aσ), aα), repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, ⌜hd(aσ) '⌝ + tl(aσ), aα)) ⊦
Used terms: aren, ren, cstep, cext, hd(aσ), aext, aα, ext, astart, cstart, start, pal, cren, astep, pcsl, tl(aσ), step
| ⊦ nounsharedextR(cren, cext, ren) ∧ Πok(ext, cext, ren, cren) ∧ Πok(ext, aext, ren, aren) ∧ oinj(cext) ∧ oinj(aext) ∧ oinj(ext) ∧ frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsl, pal) ∧ frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα) ∧ cext !(⌜πra(step, cstep, ren, cren, pcsl, pal)⌝ ) ⊑ aext !(aα) ∧ sameshared(cren, aren, ren) → frag*(Π(IOAut(start, step, ext), IOAut(astart, astep, aext), ren, aren)) (repls(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, ⌜as '⌝ + aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, ⌜as '⌝ + aσ, aα)) |
| cext !(⌜πra(step, cstep, ren, cren, pcsl, pal)⌝ ) = aext !(aα), # pcsl = # pal + 1, frag(IOAut(astart, astep, aext))(aσ, aα), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜pcsl⌝ , ⌜pal⌝ ), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)⌝ , ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)⌝ ), nounsharedextR(cren, cext, ren) ∧ Πok(ext, cext, ren, cren) ∧ Πok(ext, aext, ren, aren) ∧ oinj(cext) ∧ oinj(aext) ∧ oinj(ext) ∧ frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsl, pal) ∧ frag(IOAut(astart, astep, aext))(⌜hd(aσ) '⌝ + tl(aσ), aα) ∧ cext !(⌜πra(step, cstep, ren, cren, pcsl, pal)⌝ ) ⊑ aext !(aα) ∧ sameshared(cren, aren, ren) → frag*(Π(IOAut(start, step, ext), IOAut(astart, astep, aext), ren, aren)) (repls(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, ⌜hd(aσ) '⌝ + tl(aσ), aα), repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, ⌜hd(aσ) '⌝ + tl(aσ), aα)) ⊦ |
# pcsl = # pal + 1, ⌜cext !(πra(step, cstep, ren, cren, pcsl, pal))⌝ = aext !(aα), frag(IOAut(astart, astep, aext))(aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsl, pal), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag*(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)), frag(IOAut(astart, astep, aext))(⌜hd(aσ) '⌝ + tl(aσ), aα) → frag*(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, ⌜hd(aσ) '⌝ + tl(aσ), aα), repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, ⌜hd(aσ) '⌝ + tl(aσ), aα)) ⊦
Used simplifier rules: ⊦ σ ⊑ σ; (s) ⊦ Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren) = IOAut (Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)); (s) ⊦ ext !(⌜al⌝ ) = ⌜ext !(al)⌝ ; (s) ⊦ frag(ioa)(⌜sl⌝ , ⌜al⌝ ) ↔ frag*(ioa)(sl, al); (s)
| # pcsl = # pal + 1, ⌜cext !(πra(step, cstep, ren, cren, pcsl, pal))⌝ = aext !(aα), frag(IOAut(astart, astep, aext))(aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsl, pal), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag*(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)), frag(IOAut(astart, astep, aext))(⌜hd(aσ) '⌝ + tl(aσ), aα) → frag*(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, ⌜hd(aσ) '⌝ + tl(aσ), aα), repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, ⌜hd(aσ) '⌝ + tl(aσ), aα)) ⊦ |
# pcsl = # pal + 1, ⌜cext !(πra(step, cstep, ren, cren, pcsl, pal))⌝ = aext !(aα), frag(IOAut(astart, astep, aext))(aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsl, pal), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(astart, astep, aext))(⌜hd(aσ) '⌝ + tl(aσ), aα), ¬ frag*(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)) ⊦
# pcsl = # pal + 1, ⌜cext !(πra(step, cstep, ren, cren, pcsl, pal))⌝ = aext !(aα), frag(IOAut(astart, astep, aext))(aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsl, pal), frag*(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, ⌜hd(aσ) '⌝ + tl(aσ), aα), repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, ⌜hd(aσ) '⌝ + tl(aσ), aα)), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag*(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)) ⊦
| # pcsl = # pal + 1, ⌜cext !(πra(step, cstep, ren, cren, pcsl, pal))⌝ = aext !(aα), frag(IOAut(astart, astep, aext))(aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsl, pal), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(astart, astep, aext))(⌜hd(aσ) '⌝ + tl(aσ), aα), ¬ frag*(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)) ⊦ |
Used simplifier rules: ⊦ ⌜a '⌝ + σ ≠ []; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ a + σ = ⌜a '⌝ + σ; (s) ⊦ ¬ frag(IOAut(start, step, ext))([], α); (s) ⊦ σ ≠ [] → (a = hd(σ) ∧ σ0 = tl(σ) ↔ σ = a + σ0); (elim) Used terms: aσ, as, σ0
| # pcsl = # pal + 1, ⌜cext !(πra(step, cstep, ren, cren, pcsl, pal))⌝ = aext !(aα), frag(IOAut(astart, astep, aext))(aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsl, pal), frag*(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, ⌜hd(aσ) '⌝ + tl(aσ), aα), repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, ⌜hd(aσ) '⌝ + tl(aσ), aα)), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag*(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)) ⊦ |
Used simplifier rules: ⊦ ⌜a '⌝ + σ ≠ []; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ a + σ = ⌜a '⌝ + σ; (s) ⊦ ¬ frag(IOAut(start, step, ext))([], α); (s) ⊦ σ ≠ [] → (a = hd(σ) ∧ σ0 = tl(σ) ↔ σ = a + σ0); (elim) Used terms: aσ, as, σ0
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , pα)) = aext !(aα), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜pcsf⌝ , pα), frag(IOAut(astart, astep, aext))(aσ, aα), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf⌝ , pα, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf⌝ , pα, aσ, aα)) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), frag(IOAut(astart, astep, aext))(aσ, aα), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜pcsf⌝ , ⌜paf⌝ ), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf⌝ , ⌜paf⌝ , aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf⌝ , ⌜paf⌝ , aσ, aα)) ⊦
Used simplifier rules: Stream('a) freely generated by ⌜ ⌝, ⌜ ⌝;; ⊦ ¬ frag(ioa)(⌜sf⌝ , ⌜al⌝ ); (s)
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), frag(IOAut(astart, astep, aext))(aσ, aα), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜pcsf⌝ , ⌜paf⌝ ), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf⌝ , ⌜paf⌝ , aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf⌝ , ⌜paf⌝ , aσ, aα)) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf⌝ , ⌜paf⌝ , aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf⌝ , ⌜paf⌝ , aσ, aα)) ⊦
Used simplifier rules: ⊦ frag(ioa)(⌜sf⌝ , ⌜af⌝ ) ↔ fragω(ioa)(sf, af); (s)
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf⌝ , ⌜paf⌝ , aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf⌝ , ⌜paf⌝ , aσ, aα)) ⊦ |
⊦ 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α)⌝ ⌝ )
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf⌝ , ⌜paf⌝ , aσ, aα)) ⊦
Used simplifier rules: ⊦ σ ⊑ σ; (s) Used terms: aren, ren, cstep, cext, aext, aα, cren, paf, aσ, step, pcsf
| ⊦ 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α)⌝ ⌝ ) |
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf⌝ , ⌜paf⌝ , aσ, 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α)⌝ ⌝ )
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )) ⊦
Used terms: aren, ren, cstep, cext, aext, aα, cren, paf, aσ, step, pcsf
| ⊦ 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α)⌝ ⌝ ) |
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )) ⊦ |
⊦ mon(σσ) ∧ σσ ≠ [] → (∀ n. ⌜n⌝ < # σσ → σσ[n] ⊑ lim(σσ)) ∧ (∀ m. ¬ # lim(σσ) < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ ⌜lim(σσ).take(m)⌝ ⊑ σσ[n]))
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )), mon(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) ∧ ⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ≠ [] → (∀ n. ⌜n⌝ < # ⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ → ⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ [n] ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )) ∧ (∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜n⌝ < # ⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ∧ ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ [n])) ⊦
Used terms: ⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα) ⌝ ⌝
| ⊦ mon(σσ) ∧ σσ ≠ [] → (∀ n. ⌜n⌝ < # σσ → σσ[n] ⊑ lim(σσ)) ∧ (∀ m. ¬ # lim(σσ) < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ ⌜lim(σσ).take(m)⌝ ⊑ σσ[n])) |
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )), mon(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) ∧ ⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ≠ [] → (∀ n. ⌜n⌝ < # ⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ → ⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ [n] ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )) ∧ (∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜n⌝ < # ⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ∧ ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ [n])) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )), mon(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) → (∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )) ∧ (∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ )) ⊦
Used simplifier rules: ⊦ σ ⊑ σ; (s) ⊦ ⌜nf⌝ [n] = nf(n); (s) ⊦ ⌜m⌝ < ∞; (s) ⊦ # ⌜nf⌝ = ∞; (s) ⊦ [] ≠ ⌜nf⌝ ; (s)
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )), mon(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) → (∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )) ∧ (∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ )) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )), ¬ mon(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) ⊦
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ) ⊦
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )), ¬ mon(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), 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α)⌝ ⌝ )
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )), ¬ mon(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), 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))) ((pcsf(0)._1, pcsf(0)._2) ' + (λ n. pcsf(n + 1)), paf) ∧ frag(IOAut(astart, astep, aext))(⌜hd(aσ) '⌝ + tl(aσ), aα) ∧ cext !(πra(step, cstep, ren, cren, (pcsf(0)._1, pcsf(0)._2) + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) ⊑ aext !(aα) → mon (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (pcsf(0)._1, pcsf(0)._2) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜hd(aσ) '⌝ + tl(aσ), aα) ⌝ ⌝ ) ⊦
Used terms: aren, ren, cstep, cext, pcsf(0)._1, hd(aσ), aext, aα, ext, astart, cstart, start, cren, astep, paf, pcsf(0)._2, tl(aσ), step, λ n. pcsf(n + 1)
| ⊦ 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α)⌝ ⌝ ) |
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )), ¬ mon(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), 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))) ((pcsf(0)._1, pcsf(0)._2) ' + (λ n. pcsf(n + 1)), paf) ∧ frag(IOAut(astart, astep, aext))(⌜hd(aσ) '⌝ + tl(aσ), aα) ∧ cext !(πra(step, cstep, ren, cren, (pcsf(0)._1, pcsf(0)._2) + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) ⊑ aext !(aα) → mon (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (pcsf(0)._1, pcsf(0)._2) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜hd(aσ) '⌝ + tl(aσ), aα) ⌝ ⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )), ¬ mon(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren))) ((pcsf(0)._1, pcsf(0)._2) ' + (λ n. pcsf(n + 1)), paf) ∧ frag(IOAut(astart, astep, aext))(⌜hd(aσ) '⌝ + tl(aσ), aα) ∧ cext !(πra(step, cstep, ren, cren, ⌜(pcsf(0)._1, pcsf(0)._2) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) ⊑ aext !(aα) → mon (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (pcsf(0)._1, pcsf(0)._2) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜hd(aσ) '⌝ + tl(aσ), aα) ⌝ ⌝ ) ⊦
Used simplifier rules: ⊦ a + σ = ⌜a '⌝ + σ; (s)
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )), ¬ mon(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren))) ((pcsf(0)._1, pcsf(0)._2) ' + (λ n. pcsf(n + 1)), paf) ∧ frag(IOAut(astart, astep, aext))(⌜hd(aσ) '⌝ + tl(aσ), aα) ∧ cext !(πra(step, cstep, ren, cren, ⌜(pcsf(0)._1, pcsf(0)._2) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) ⊑ aext !(aα) → mon (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (pcsf(0)._1, pcsf(0)._2) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜hd(aσ) '⌝ + tl(aσ), aα) ⌝ ⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), aσ = as + σ0, aσ ≠ [], frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )), ¬ mon(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren))) ((pcsf(0)._1, pcsf(0)._2) ' + (λ n. pcsf(n + 1)), paf) ∧ frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα) ∧ cext !(πra(step, cstep, ren, cren, ⌜(pcsf(0)._1, pcsf(0)._2) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) ⊑ aext !(aα) → mon (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (pcsf(0)._1, pcsf(0)._2) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) ⊦
Used simplifier rules: ⊦ ¬ frag(IOAut(start, step, ext))([], α); (s) ⊦ σ ≠ [] → (a = hd(σ) ∧ σ0 = tl(σ) ↔ σ = a + σ0); (elim) Used terms: aσ, as, σ0
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), aσ = as + σ0, aσ ≠ [], frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )), ¬ mon(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren))) ((pcsf(0)._1, pcsf(0)._2) ' + (λ n. pcsf(n + 1)), paf) ∧ frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα) ∧ cext !(πra(step, cstep, ren, cren, ⌜(pcsf(0)._1, pcsf(0)._2) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) ⊑ aext !(aα) → mon (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (pcsf(0)._1, pcsf(0)._2) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ mon(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren))) ((pcsf(0)._1, pcsf(0)._2) ' + (λ n. pcsf(n + 1)), paf) ∧ cext !(πra(step, cstep, ren, cren, ⌜(pcsf(0)._1, pcsf(0)._2) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) ⊑ aext !(aα) → mon (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (pcsf(0)._1, pcsf(0)._2) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) ⊦
Used simplifier rules: ⊦ a + σ = ⌜a '⌝ + σ; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ ⌜a '⌝ + σ ≠ []; (s)
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ mon(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren))) ((pcsf(0)._1, pcsf(0)._2) ' + (λ n. pcsf(n + 1)), paf) ∧ cext !(πra(step, cstep, ren, cren, ⌜(pcsf(0)._1, pcsf(0)._2) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) ⊑ aext !(aα) → mon (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (pcsf(0)._1, pcsf(0)._2) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) ⊦ |
⊦ ⌜nf⌝ = nf(0) + ⌜λ n. nf(n + 1)⌝
cext !(πra(step, cstep, ren, cren, pcsf(0) + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) = aext !(aα), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ mon(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren))) ((pcsf(0)._1, pcsf(0)._2) ' + (λ n. pcsf(n + 1)), paf) ∧ cext !(πra(step, cstep, ren, cren, ⌜(pcsf(0)._1, pcsf(0)._2) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) ⊑ aext !(aα) → mon (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (pcsf(0)._1, pcsf(0)._2) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) ⊦
Used terms: pcsf
| ⊦ ⌜nf⌝ = nf(0) + ⌜λ n. nf(n + 1)⌝ |
| cext !(πra(step, cstep, ren, cren, pcsf(0) + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) = aext !(aα), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ mon(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren))) ((pcsf(0)._1, pcsf(0)._2) ' + (λ n. pcsf(n + 1)), paf) ∧ cext !(πra(step, cstep, ren, cren, ⌜(pcsf(0)._1, pcsf(0)._2) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) ⊑ aext !(aα) → mon (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (pcsf(0)._1, pcsf(0)._2) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf(0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) = aext !(aα), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ mon(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren))) ((pcsf(0)._1, pcsf(0)._2) ' + (λ n. pcsf(n + 1)), paf) ∧ cext !(πra(step, cstep, ren, cren, ⌜(pcsf(0)._1, pcsf(0)._2) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) ⊑ aext !(aα) → mon (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (pcsf(0)._1, pcsf(0)._2) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) ⊦
Used simplifier rules: ⊦ a + σ = ⌜a '⌝ + σ; (s)
| cext !(πra(step, cstep, ren, cren, ⌜pcsf(0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) = aext !(aα), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ mon(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren))) ((pcsf(0)._1, pcsf(0)._2) ' + (λ n. pcsf(n + 1)), paf) ∧ cext !(πra(step, cstep, ren, cren, ⌜(pcsf(0)._1, pcsf(0)._2) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) ⊑ aext !(aα) → mon (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (pcsf(0)._1, pcsf(0)._2) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf(0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ mon(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren))) ((pcsf(0)._1, pcsf(0)._2) ' + (λ n. pcsf(n + 1)), paf) ∧ cext !(πra(step, cstep, ren, cren, ⌜(pcsf(0)._1, pcsf(0)._2) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) ⊑ aext !(aα) → mon (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (pcsf(0)._1, pcsf(0)._2) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) ⊦
| cext !(πra(step, cstep, ren, cren, ⌜pcsf(0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ mon(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren))) ((pcsf(0)._1, pcsf(0)._2) ' + (λ n. pcsf(n + 1)), paf) ∧ cext !(πra(step, cstep, ren, cren, ⌜(pcsf(0)._1, pcsf(0)._2) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) ⊑ aext !(aα) → mon (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (pcsf(0)._1, pcsf(0)._2) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ mon(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + (λ n. pcsf(n + 1)), paf) → mon(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) ⊦
Used simplifier rules: ⊦ σ ⊑ σ; (s)
| cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ mon(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + (λ n. pcsf(n + 1)), paf) → mon(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) ⊦ |
⊦ mon(σσ) ↔ (∀ n. ⌜n⌝ + ⌜1⌝ < # σσ → σσ[n] ⊑ σσ[n + 1])
cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + (λ n. pcsf(n + 1)), paf) → mon(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), ∃ n. ¬ ( ⌜n⌝ + ⌜1⌝ < # ⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ → ⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ [n] ⊑ ⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ [n + 1]) ⊦
Used terms: ⌜λ n. ⌜repls (step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα) ⌝ ⌝
| ⊦ mon(σσ) ↔ (∀ n. ⌜n⌝ + ⌜1⌝ < # σσ → σσ[n] ⊑ σσ[n + 1]) |
| cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + (λ n. pcsf(n + 1)), paf) → mon(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), ∃ n. ¬ ( ⌜n⌝ + ⌜1⌝ < # ⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ → ⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ [n] ⊑ ⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ [n + 1]) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(2 + n), paf.take(n + 1), ⌜as '⌝ + σ0, aα)⌝ , fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + (λ n. pcsf(n + 1)), paf) → mon(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) ⊦
Used simplifier rules: a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ ⌜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)
| cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(2 + n), paf.take(n + 1), ⌜as '⌝ + σ0, aα)⌝ , fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + (λ n. pcsf(n + 1)), paf) → mon(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) ⊦ |
⊦ mon(σσ) ↔ (∀ n. ⌜n⌝ + ⌜1⌝ < # σσ → σσ[n] ⊑ σσ[n + 1])
cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(2 + n), paf.take(n + 1), ⌜as '⌝ + σ0, aα)⌝ , fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + (λ n. pcsf(n + 1)), paf) → (∀ n. ⌜n⌝ + ⌜1⌝ < # ⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ → ⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ [n] ⊑ ⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ [n + 1]) ⊦
Used terms: ⌜λ n. ⌜repls (step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα) ⌝ ⌝
| ⊦ mon(σσ) ↔ (∀ n. ⌜n⌝ + ⌜1⌝ < # σσ → σσ[n] ⊑ σσ[n + 1]) |
| cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(2 + n), paf.take(n + 1), ⌜as '⌝ + σ0, aα)⌝ , fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + (λ n. pcsf(n + 1)), paf) → (∀ n. ⌜n⌝ + ⌜1⌝ < # ⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ → ⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ [n] ⊑ ⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ [n + 1]) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(2 + n), paf.take(n + 1), ⌜as '⌝ + σ0, aα)⌝ , fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + (λ n. pcsf(n + 1)), paf) → (∀ n0. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n0), paf.take(n0), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n0 + 1), paf.take(n0 + 1), ⌜as '⌝ + σ0, aα)⌝ ) ⊦
Used simplifier rules: ⊦ ⌜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)
| cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(2 + n), paf.take(n + 1), ⌜as '⌝ + σ0, aα)⌝ , fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + (λ n. pcsf(n + 1)), paf) → (∀ n0. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n0), paf.take(n0), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n0 + 1), paf.take(n0 + 1), ⌜as '⌝ + σ0, aα)⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), pcsf = (s, cs) ' + (λ n. pcsf(n + 1)), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(2 + n), paf.take(n + 1), ⌜as '⌝ + σ0, aα)⌝ , fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + (λ n. pcsf(n + 1)), paf) → (∀ n0. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n0), paf.take(n0), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n0 + 1), paf.take(n0 + 1), ⌜as '⌝ + σ0, aα)⌝ ) ⊦
cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), pcsf ≠ (s, cs) ' + (λ n. pcsf(n + 1)), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(2 + n), paf.take(n + 1), ⌜as '⌝ + σ0, aα)⌝ , fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + (λ n. pcsf(n + 1)), paf) → (∀ n0. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n0), paf.take(n0), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n0 + 1), paf.take(n0 + 1), ⌜as '⌝ + σ0, aα)⌝ ) ⊦
Used formulas: pcsf = (s, cs) ' + (λ n. pcsf(n + 1))
| cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), pcsf = (s, cs) ' + (λ n. pcsf(n + 1)), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(2 + n), paf.take(n + 1), ⌜as '⌝ + σ0, aα)⌝ , fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + (λ n. pcsf(n + 1)), paf) → (∀ n0. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n0), paf.take(n0), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n0 + 1), paf.take(n0 + 1), ⌜as '⌝ + σ0, aα)⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), pcsf = (s, cs) ' + (λ n. pcsf(n + 1)), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(2 + n), paf.take(n + 1), ⌜as '⌝ + σ0, aα)⌝ , ∀ n0. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n0), paf.take(n0), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n0 + 1), paf.take(n0 + 1), ⌜as '⌝ + σ0, aα)⌝ ⊦
| cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), pcsf = (s, cs) ' + (λ n. pcsf(n + 1)), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(2 + n), paf.take(n + 1), ⌜as '⌝ + σ0, aα)⌝ , ∀ n0. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n0), paf.take(n0), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n0 + 1), paf.take(n0 + 1), ⌜as '⌝ + σ0, aα)⌝ ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), pcsf = (s, cs) ' + (λ n. pcsf(n + 1)), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n + 1), paf.take(n + 1), ⌜as '⌝ + σ0, aα)⌝ , ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(2 + n), paf.take(n + 1), ⌜as '⌝ + σ0, aα)⌝ ⊦
Used terms: n
| cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), pcsf = (s, cs) ' + (λ n. pcsf(n + 1)), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n + 1), paf.take(n + 1), ⌜as '⌝ + σ0, aα)⌝ , ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(2 + n), paf.take(n + 1), ⌜as '⌝ + σ0, aα)⌝ ⊦ |
⊦ nf.take(n + 1) = nf(0) + (λ n. nf(n + 1)).take(n)
cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), pcsf = (s, cs) ' + (λ n. pcsf(n + 1)), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n + 1), paf.take(n + 1), ⌜as '⌝ + σ0, aα)⌝ , ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf(0) + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(2 + n), paf.take(n + 1), ⌜as '⌝ + σ0, aα)⌝ ⊦
Used terms: pcsf, n
| ⊦ nf.take(n + 1) = nf(0) + (λ n. nf(n + 1)).take(n) |
| cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), pcsf = (s, cs) ' + (λ n. pcsf(n + 1)), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n + 1), paf.take(n + 1), ⌜as '⌝ + σ0, aα)⌝ , ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf(0) + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(2 + n), paf.take(n + 1), ⌜as '⌝ + σ0, aα)⌝ ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), pcsf = (s, cs) ' + (λ n. pcsf(n + 1)), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n + 1), paf.take(n + 1), ⌜as '⌝ + σ0, aα)⌝ , ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(2 + n), paf.take(n + 1), ⌜as '⌝ + σ0, aα)⌝ ⊦
Used simplifier rules: ⊦ a + x = a ' + x; (s)
| cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), pcsf = (s, cs) ' + (λ n. pcsf(n + 1)), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n + 1), paf.take(n + 1), ⌜as '⌝ + σ0, aα)⌝ , ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(2 + n), paf.take(n + 1), ⌜as '⌝ + σ0, aα)⌝ ⊦ |
⊦ nf.take(n + 2) = nf(0) + (λ n. nf(n + 1)).take(n + 1)
Used simplifier rules: ⊦ a + x = a ' + x; (s) c: ⊦ m + n = n + m; from specification nat-basic Used terms: pcsf, n
| ⊦ nf.take(n + 2) = nf(0) + (λ n. nf(n + 1)).take(n + 1) |
| cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), pcsf ≠ (s, cs) ' + (λ n. pcsf(n + 1)), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(2 + n), paf.take(n + 1), ⌜as '⌝ + σ0, aα)⌝ , fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + (λ n. pcsf(n + 1)), paf) → (∀ n0. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n0), paf.take(n0), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n0 + 1), paf.take(n0 + 1), ⌜as '⌝ + σ0, aα)⌝ ) ⊦ |
⊦ x + nf = (λ n. (n < # x ⊃ x[n];nf(n - # x)))
cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), pcsf ≠ (λ n. (n < # (s, cs) ' ⊃ (s, cs) '[n];pcsf((n - # (s, cs) ') + 1))), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(2 + n), paf.take(n + 1), ⌜as '⌝ + σ0, aα)⌝ , fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren))) (λ n. (n < # (s, cs) ' ⊃ (s, cs) '[n];pcsf((n - # (s, cs) ') + 1)), paf) → (∀ n0. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n0), paf.take(n0), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n0 + 1), paf.take(n0 + 1), ⌜as '⌝ + σ0, aα)⌝ ) ⊦
Used terms: (s, cs) ', λ n. pcsf(n + 1)
| ⊦ x + nf = (λ n. (n < # x ⊃ x[n];nf(n - # x))) |
| cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), pcsf ≠ (λ n. (n < # (s, cs) ' ⊃ (s, cs) '[n];pcsf((n - # (s, cs) ') + 1))), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(2 + n), paf.take(n + 1), ⌜as '⌝ + σ0, aα)⌝ , fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren))) (λ n. (n < # (s, cs) ' ⊃ (s, cs) '[n];pcsf((n - # (s, cs) ') + 1)), paf) → (∀ n0. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n0), paf.take(n0), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n0 + 1), paf.take(n0 + 1), ⌜as '⌝ + σ0, aα)⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), pcsf(n0) ≠ (n0 = 0 ⊃ (s, cs);pcsf((n0 - 1) + 1)), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(2 + n), paf.take(n + 1), ⌜as '⌝ + σ0, aα)⌝ , fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(λ n1. (n1 = 0 ⊃ (s, cs);pcsf((n1 - 1) + 1)), paf) → (∀ n0. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n0), paf.take(n0), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n0 + 1), paf.take(n0 + 1), ⌜as '⌝ + σ0, aα)⌝ ) ⊦
Used simplifier rules: ⊦ # a ' = 0 +1; (s) ⊦ a '[0] = a; (s) ⊦ m < 1 ↔ m = 0; (s)
| cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), pcsf(n0) ≠ (n0 = 0 ⊃ (s, cs);pcsf((n0 - 1) + 1)), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(2 + n), paf.take(n + 1), ⌜as '⌝ + σ0, aα)⌝ , fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(λ n1. (n1 = 0 ⊃ (s, cs);pcsf((n1 - 1) + 1)), paf) → (∀ n0. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n0), paf.take(n0), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n0 + 1), paf.take(n0 + 1), ⌜as '⌝ + σ0, aα)⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), n0 ≠ 0, pcsf(n0) ≠ pcsf((n0 - 1) + 1), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(2 + n), paf.take(n + 1), ⌜as '⌝ + σ0, aα)⌝ , fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(λ n1. (n1 = 0 ⊃ (s, cs);pcsf((n1 - 1) + 1)), paf) → (∀ n0. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n0), paf.take(n0), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n0 + 1), paf.take(n0 + 1), ⌜as '⌝ + σ0, aα)⌝ ) ⊦
| cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), n0 ≠ 0, pcsf(n0) ≠ pcsf((n0 - 1) + 1), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(2 + n), paf.take(n + 1), ⌜as '⌝ + σ0, aα)⌝ , fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(λ n1. (n1 = 0 ⊃ (s, cs);pcsf((n1 - 1) + 1)), paf) → (∀ n0. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n0), paf.take(n0), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n0 + 1), paf.take(n0 + 1), ⌜as '⌝ + σ0, aα)⌝ ) ⊦ |
Used simplifier rules: n ≠ 0 ⊦ m = n - 1 ↔ n = m + 1; (elim) Used terms: n0, n2
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ) ⊦ |
⊦ mon(σσ) ∧ σσ ≠ [] → (∀ n. ⌜n⌝ < # σσ → σσ[n] ⊑ lim(σσ)) ∧ (∀ m. ¬ # lim(σσ) < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ ⌜lim(σσ).take(m)⌝ ⊑ σσ[n]))
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )), mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) ∧ ⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ≠ [] → (∀ n. ⌜n⌝ < # ⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ → ⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ [n] ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )) ∧ (∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜n⌝ < # ⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ∧ ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ [n])), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) ⊦
Used terms: ⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα) ⌝ ⌝
| ⊦ mon(σσ) ∧ σσ ≠ [] → (∀ n. ⌜n⌝ < # σσ → σσ[n] ⊑ lim(σσ)) ∧ (∀ m. ¬ # lim(σσ) < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ ⌜lim(σσ).take(m)⌝ ⊑ σσ[n])) |
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )), mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) ∧ ⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ≠ [] → (∀ n. ⌜n⌝ < # ⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ → ⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ [n] ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )) ∧ (∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜n⌝ < # ⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ∧ ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ [n])), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )), mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) → (∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )) ∧ (∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ )), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ) ⊦
Used simplifier rules: ⊦ ⌜nf⌝ [n] = nf(n); (s) ⊦ ⌜m⌝ < ∞; (s) ⊦ # ⌜nf⌝ = ∞; (s) ⊦ [] ≠ ⌜nf⌝ ; (s)
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )), mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) → (∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )) ∧ (∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ )), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )), ¬ mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) ⊦
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ) ⊦
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )), ¬ mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), 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α)⌝ ⌝ )
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )), ¬ mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), 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))) ((pcsf(0)._1, pcsf(0)._2) ' + (λ n. pcsf(n + 1)), paf) ∧ frag(IOAut(astart, astep, aext))(⌜hd(aσ) '⌝ + tl(aσ), aα) ∧ cext !(πra(step, cstep, ren, cren, (pcsf(0)._1, pcsf(0)._2) + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) ⊑ aext !(aα) → mon (⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (pcsf(0)._1, pcsf(0)._2) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜hd(aσ) '⌝ + tl(aσ), aα) ⌝ ⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ) ⊦
Used terms: aren, ren, cstep, cext, pcsf(0)._1, hd(aσ), aext, aα, ext, astart, cstart, start, cren, astep, paf, pcsf(0)._2, tl(aσ), step, λ n. pcsf(n + 1)
| ⊦ 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α)⌝ ⌝ ) |
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )), ¬ mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), 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))) ((pcsf(0)._1, pcsf(0)._2) ' + (λ n. pcsf(n + 1)), paf) ∧ frag(IOAut(astart, astep, aext))(⌜hd(aσ) '⌝ + tl(aσ), aα) ∧ cext !(πra(step, cstep, ren, cren, (pcsf(0)._1, pcsf(0)._2) + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) ⊑ aext !(aα) → mon (⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (pcsf(0)._1, pcsf(0)._2) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜hd(aσ) '⌝ + tl(aσ), aα) ⌝ ⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )), ¬ mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren))) ((pcsf(0)._1, pcsf(0)._2) ' + (λ n. pcsf(n + 1)), paf) ∧ frag(IOAut(astart, astep, aext))(⌜hd(aσ) '⌝ + tl(aσ), aα) ∧ cext !(πra(step, cstep, ren, cren, ⌜(pcsf(0)._1, pcsf(0)._2) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) ⊑ aext !(aα) → mon (⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (pcsf(0)._1, pcsf(0)._2) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜hd(aσ) '⌝ + tl(aσ), aα) ⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) ⊦
Used simplifier rules: ⊦ a + σ = ⌜a '⌝ + σ; (s)
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )), ¬ mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren))) ((pcsf(0)._1, pcsf(0)._2) ' + (λ n. pcsf(n + 1)), paf) ∧ frag(IOAut(astart, astep, aext))(⌜hd(aσ) '⌝ + tl(aσ), aα) ∧ cext !(πra(step, cstep, ren, cren, ⌜(pcsf(0)._1, pcsf(0)._2) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) ⊑ aext !(aα) → mon (⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (pcsf(0)._1, pcsf(0)._2) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜hd(aσ) '⌝ + tl(aσ), aα) ⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), aσ = as + σ0, aσ ≠ [], frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )), ¬ mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren))) ((pcsf(0)._1, pcsf(0)._2) ' + (λ n. pcsf(n + 1)), paf) ∧ frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα) ∧ cext !(πra(step, cstep, ren, cren, ⌜(pcsf(0)._1, pcsf(0)._2) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) ⊑ aext !(aα) → mon (⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (pcsf(0)._1, pcsf(0)._2) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ) ⊦
Used simplifier rules: ⊦ ¬ frag(IOAut(start, step, ext))([], α); (s) ⊦ σ ≠ [] → (a = hd(σ) ∧ σ0 = tl(σ) ↔ σ = a + σ0); (elim) Used terms: aσ, as, σ0
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), aσ = as + σ0, aσ ≠ [], frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )), ¬ mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren))) ((pcsf(0)._1, pcsf(0)._2) ' + (λ n. pcsf(n + 1)), paf) ∧ frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα) ∧ cext !(πra(step, cstep, ren, cren, ⌜(pcsf(0)._1, pcsf(0)._2) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) ⊑ aext !(aα) → mon (⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (pcsf(0)._1, pcsf(0)._2) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren))) ((pcsf(0)._1, pcsf(0)._2) ' + (λ n. pcsf(n + 1)), paf) ∧ cext !(πra(step, cstep, ren, cren, ⌜(pcsf(0)._1, pcsf(0)._2) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) ⊑ aext !(aα) → mon (⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (pcsf(0)._1, pcsf(0)._2) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) ⊦
Used simplifier rules: ⊦ a + σ = ⌜a '⌝ + σ; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ ⌜a '⌝ + σ ≠ []; (s)
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren))) ((pcsf(0)._1, pcsf(0)._2) ' + (λ n. pcsf(n + 1)), paf) ∧ cext !(πra(step, cstep, ren, cren, ⌜(pcsf(0)._1, pcsf(0)._2) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) ⊑ aext !(aα) → mon (⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (pcsf(0)._1, pcsf(0)._2) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren))) ((pcsf(0)._1, pcsf(0)._2) ' + (λ n. pcsf(n + 1)), paf) ∧ cext !(πra(step, cstep, ren, cren, ⌜(pcsf(0)._1, pcsf(0)._2) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) ⊑ aext !(aα) → mon (⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (pcsf(0)._1, pcsf(0)._2) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ) ⊦
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren))) ((pcsf(0)._1, pcsf(0)._2) ' + (λ n. pcsf(n + 1)), paf) ∧ cext !(πra(step, cstep, ren, cren, ⌜(pcsf(0)._1, pcsf(0)._2) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) ⊑ aext !(aα) → mon (⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (pcsf(0)._1, pcsf(0)._2) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + (λ n. pcsf(n + 1)), paf) ∧ cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) ⊑ aext !(aα) → mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ) ⊦
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + (λ n. pcsf(n + 1)), paf) ∧ cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) ⊑ aext !(aα) → mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) ⊦ fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + (λ n. pcsf(n + 1)), paf) ∧ cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) ⊑ aext !(aα)
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) ⊦
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) ⊦ fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + (λ n. pcsf(n + 1)), paf) ∧ cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) ⊑ aext !(aα) |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), pcsf = (s, cs) ' + (λ n. pcsf(n + 1)), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ) ⊦ fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + (λ n. pcsf(n + 1)), paf) ∧ cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) ⊑ aext !(aα)
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), pcsf ≠ (s, cs) ' + (λ n. pcsf(n + 1)), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ) ⊦ fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + (λ n. pcsf(n + 1)), paf) ∧ cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) ⊑ aext !(aα)
Used formulas: pcsf = (s, cs) ' + (λ n. pcsf(n + 1))
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), pcsf = (s, cs) ' + (λ n. pcsf(n + 1)), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ) ⊦ fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + (λ n. pcsf(n + 1)), paf) ∧ cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) ⊑ aext !(aα) |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), pcsf = (s, cs) ' + (λ n. pcsf(n + 1)), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), ¬ cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) ⊑ aext !(aα), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ) ⊦
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), pcsf = (s, cs) ' + (λ n. pcsf(n + 1)), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), ¬ cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) ⊑ aext !(aα), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ) ⊦ |
⊦ ⌜nf⌝ = nf(0) + ⌜λ n. nf(n + 1)⌝
Used simplifier rules: ⊦ a + σ = ⌜a '⌝ + σ; (s) ⊦ σ ⊑ σ; (s) Used terms: pcsf
| ⊦ ⌜nf⌝ = nf(0) + ⌜λ n. nf(n + 1)⌝ |
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), pcsf ≠ (s, cs) ' + (λ n. pcsf(n + 1)), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ) ⊦ fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + (λ n. pcsf(n + 1)), paf) ∧ cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) ⊑ aext !(aα) |
⊦ x + nf = (λ n. (n < # x ⊃ x[n];nf(n - # x)))
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), pcsf ≠ (λ n. (n < # (s, cs) ' ⊃ (s, cs) '[n];pcsf((n - # (s, cs) ') + 1))), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) ⊦ fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren))) (λ n. (n < # (s, cs) ' ⊃ (s, cs) '[n];pcsf((n - # (s, cs) ') + 1)), paf) ∧ cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) ⊑ aext !(aα)
Used terms: (s, cs) ', λ n. pcsf(n + 1)
| ⊦ x + nf = (λ n. (n < # x ⊃ x[n];nf(n - # x))) |
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), pcsf ≠ (λ n. (n < # (s, cs) ' ⊃ (s, cs) '[n];pcsf((n - # (s, cs) ') + 1))), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) ⊦ fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren))) (λ n. (n < # (s, cs) ' ⊃ (s, cs) '[n];pcsf((n - # (s, cs) ') + 1)), paf) ∧ cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) ⊑ aext !(aα) |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), pcsf(n) ≠ (n = 0 ⊃ (s, cs);pcsf((n - 1) + 1)), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ) ⊦ fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(λ n0. (n0 = 0 ⊃ (s, cs);pcsf((n0 - 1) + 1)), paf) ∧ cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) ⊑ aext !(aα)
Used simplifier rules: ⊦ # a ' = 0 +1; (s) ⊦ a '[0] = a; (s) ⊦ m < 1 ↔ m = 0; (s)
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), pcsf(n) ≠ (n = 0 ⊃ (s, cs);pcsf((n - 1) + 1)), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ) ⊦ fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(λ n0. (n0 = 0 ⊃ (s, cs);pcsf((n0 - 1) + 1)), paf) ∧ cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) ⊑ aext !(aα) |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), n ≠ 0, pcsf(n) ≠ pcsf((n - 1) + 1), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) ⊦ fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(λ n0. (n0 = 0 ⊃ (s, cs);pcsf((n0 - 1) + 1)), paf) ∧ cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) ⊑ aext !(aα)
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), n ≠ 0, pcsf(n) ≠ pcsf((n - 1) + 1), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) ⊦ fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(λ n0. (n0 = 0 ⊃ (s, cs);pcsf((n0 - 1) + 1)), paf) ∧ cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) ⊑ aext !(aα) |
Used simplifier rules: n ≠ 0 ⊦ m = n - 1 ↔ n = m + 1; (elim) Used terms: n, n1
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) ⊦ |
⊦ mon(σσ) ↔ (∀ n. ⌜n⌝ + ⌜1⌝ < # σσ → σσ[n] ⊑ σσ[n + 1])
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ), ∃ n. ¬ ( ⌜n⌝ + ⌜1⌝ < # ⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ → ⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ [n] ⊑ ⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ [n + 1]) ⊦
Used terms: ⌜λ n. ⌜repla (step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα) ⌝ ⌝
| ⊦ mon(σσ) ↔ (∀ n. ⌜n⌝ + ⌜1⌝ < # σσ → σσ[n] ⊑ σσ[n + 1]) |
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ), ∃ n. ¬ ( ⌜n⌝ + ⌜1⌝ < # ⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ → ⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ [n] ⊑ ⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ [n + 1]) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(2 + n), paf.take(n + 1), ⌜as '⌝ + σ0, aα)⌝ , ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) ⊦
Used simplifier rules: a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ ⌜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)
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(2 + n), paf.take(n + 1), ⌜as '⌝ + σ0, aα)⌝ , ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) ⊦ |
⊦ mon(σσ) ↔ (∀ n. ⌜n⌝ + ⌜1⌝ < # σσ → σσ[n] ⊑ σσ[n + 1])
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(2 + n), paf.take(n + 1), ⌜as '⌝ + σ0, aα)⌝ , ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ), ∀ n. ⌜n⌝ + ⌜1⌝ < # ⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ → ⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ [n] ⊑ ⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ [n + 1] ⊦
Used terms: ⌜λ n. ⌜repla (step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα) ⌝ ⌝
| ⊦ mon(σσ) ↔ (∀ n. ⌜n⌝ + ⌜1⌝ < # σσ → σσ[n] ⊑ σσ[n + 1]) |
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(2 + n), paf.take(n + 1), ⌜as '⌝ + σ0, aα)⌝ , ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ), ∀ n. ⌜n⌝ + ⌜1⌝ < # ⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ → ⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ [n] ⊑ ⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ [n + 1] ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(2 + n), paf.take(n + 1), ⌜as '⌝ + σ0, aα)⌝ , ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), ∀ n0. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n0), paf.take(n0), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n0 + 1), paf.take(n0 + 1), ⌜as '⌝ + σ0, aα)⌝ ⊦
Used simplifier rules: ⊦ ⌜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)
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(2 + n), paf.take(n + 1), ⌜as '⌝ + σ0, aα)⌝ , ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), ∀ n0. ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n0), paf.take(n0), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n0 + 1), paf.take(n0 + 1), ⌜as '⌝ + σ0, aα)⌝ ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n + 1), paf.take(n + 1), ⌜as '⌝ + σ0, aα)⌝ , ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(2 + n), paf.take(n + 1), ⌜as '⌝ + σ0, aα)⌝ , ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ) ⊦
Used terms: n
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n + 1), paf.take(n + 1), ⌜as '⌝ + σ0, aα)⌝ , ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(2 + n), paf.take(n + 1), ⌜as '⌝ + σ0, aα)⌝ , ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ) ⊦ |
⊦ nf.take(n + 1) = nf(0) + (λ n. nf(n + 1)).take(n)
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n + 1), paf.take(n + 1), ⌜as '⌝ + σ0, aα)⌝ , ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf(0) + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(2 + n), paf.take(n + 1), ⌜as '⌝ + σ0, aα)⌝ , ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) ⊦
Used terms: pcsf, n
| ⊦ nf.take(n + 1) = nf(0) + (λ n. nf(n + 1)).take(n) |
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n + 1), paf.take(n + 1), ⌜as '⌝ + σ0, aα)⌝ , ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf(0) + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(2 + n), paf.take(n + 1), ⌜as '⌝ + σ0, aα)⌝ , ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n + 1), paf.take(n + 1), ⌜as '⌝ + σ0, aα)⌝ , ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(2 + n), paf.take(n + 1), ⌜as '⌝ + σ0, aα)⌝ , ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ) ⊦
Used simplifier rules: ⊦ a + x = a ' + x; (s)
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), (s, cs) = pcsf(0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n + 1), paf.take(n + 1), ⌜as '⌝ + σ0, aα)⌝ , ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ )), ¬ ⌜repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (λ n. pcsf(n + 1)).take(n), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(2 + n), paf.take(n + 1), ⌜as '⌝ + σ0, aα)⌝ , ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + σ0, aα)⌝ ) ⊦ |
⊦ nf.take(n + 2) = nf(0) + (λ n. nf(n + 1)).take(n + 1)
Used simplifier rules: ⊦ a + x = a ' + x; (s) c: ⊦ m + n = n + m; from specification nat-basic Used terms: pcsf, n
| ⊦ nf.take(n + 2) = nf(0) + (λ n. nf(n + 1)).take(n + 1) |
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), 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)))(pcσ, pα) ∧ frag(IOAut(astart, astep, aext))(aσ, aα) ∧ cext !(πra(step, cstep, ren, cren, pcσ, pα)) ⊑ aext !(aα) → # repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα) = # repla(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα) + ⌜1⌝
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), 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)))(⌜pcsf⌝ , ⌜paf⌝ ) ∧ frag(IOAut(astart, astep, aext))(aσ, aα) ∧ cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα) → # repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf⌝ , ⌜paf⌝ , aσ, aα) = # repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf⌝ , ⌜paf⌝ , aσ, aα) + ⌜1⌝ , ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ) ⊦
Used terms: aren, ren, cstep, cext, aext, aα, ext, ⌜pcsf⌝ , astart, cstart, start, cren, astep, ⌜paf⌝ , aσ, step
| ⊦ nounsharedextR(cren, cext, ren) ∧ Πok(ext, cext, ren, cren) ∧ frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcσ, pα) ∧ frag(IOAut(astart, astep, aext))(aσ, aα) ∧ cext !(πra(step, cstep, ren, cren, pcσ, pα)) ⊑ aext !(aα) → # repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα) = # repla(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα) + ⌜1⌝ |
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), 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)))(⌜pcsf⌝ , ⌜paf⌝ ) ∧ frag(IOAut(astart, astep, aext))(aσ, aα) ∧ cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα) → # repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf⌝ , ⌜paf⌝ , aσ, aα) = # repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf⌝ , ⌜paf⌝ , aσ, aα) + ⌜1⌝ , ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf⌝ , ⌜paf⌝ , aσ, aα) = # repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf⌝ , ⌜paf⌝ , aσ, aα) + ⌜1⌝ , frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ) ⊦
Used simplifier rules: ⊦ frag(ioa)(⌜sf⌝ , ⌜af⌝ ) ↔ fragω(ioa)(sf, af); (s) ⊦ σ ⊑ σ; (s)
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf⌝ , ⌜paf⌝ , aσ, aα) = # repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf⌝ , ⌜paf⌝ , aσ, aα) + ⌜1⌝ , frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ) ⊦ |
⊦ 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α)⌝ ⌝ )
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf⌝ , ⌜paf⌝ , aσ, aα) + ⌜1⌝ , frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )), ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ) ⊦
Used simplifier rules: ⊦ σ ⊑ σ; (s) Used terms: aren, ren, cstep, cext, aext, aα, cren, paf, aσ, step, pcsf
| ⊦ 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α)⌝ ⌝ ) |
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf⌝ , ⌜paf⌝ , aσ, aα) + ⌜1⌝ , frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )), ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, 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α)⌝ ⌝ )
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ) ⊦
Used terms: aren, ren, cstep, cext, aext, aα, cren, paf, aσ, step, pcsf
| ⊦ 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α)⌝ ⌝ ) |
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ) ⊦
Used simplifier rules: ⊦ σ ⊑ σ; (s)
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ) ⊦ |
⊦ frag(IOAut(start, step, ext))(σ, α) ↔ # σ = # α + ⌜1⌝ ∧ (∀ n. ⌜n⌝ < # α → step(σ[n], α[n], σ[n +1]))
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) ≠ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ ∨ (∃ n. ¬ ( ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) → Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n +1]))) ⊦
Used terms: Π(ext, aext, ren, aren), lim (⌜λ n. ⌜repla (step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα) ⌝ ⌝ ), Π(start, astart), lim (⌜λ n. ⌜repls (step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα) ⌝ ⌝ ), Π(step, astep, ren, aren, ext, aext)
| ⊦ frag(IOAut(start, step, ext))(σ, α) ↔ # σ = # α + ⌜1⌝ ∧ (∀ n. ⌜n⌝ < # α → step(σ[n], α[n], σ[n +1])) |
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) ≠ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ ∨ (∃ n. ¬ ( ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) → Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n +1]))) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ) ⊦
Used simplifier rules: ⊦ m +1 = m + 1; (s)
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜n + 1⌝ → (∃ n0. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(n + 1)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ) ⊦
Used terms: n + 1
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜n + 1⌝ → (∃ n0. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(n + 1)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(n + 1)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) ⊦
Used simplifier rules: 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⌝ + ⌜1⌝ ↔ ¬ ⌜n⌝ < # σ; (s) 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)
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(n + 1)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) ⊦ |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∃ σ1. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(n + 1)⌝ + σ1 = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ ⊦
Used terms: ⌜lim (⌜λ n. ⌜repla (step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα) ⌝ ⌝ ) .take (n + 1 ) ⌝ , ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) ⌝
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∃ σ1. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(n + 1)⌝ + σ1 = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(n + 1)⌝ + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) ⊦
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(n + 1)⌝ + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) ⊦ |
⊦ σ0 = σ1 ↔ # σ0 = # σ1 ∧ (∀ n. ⌜n⌝ < # σ0 → σ0[n] = σ1[n])
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), #(⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(n + 1)⌝ + pα) = # ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n1. ⌜n1⌝ < #(⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(n + 1)⌝ + pα) → (⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(n + 1)⌝ + pα)[n1] = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ [n1] ⊦
Used terms: ⌜lim (⌜λ n. ⌜repla (step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα) ⌝ ⌝ ) .take (n + 1 ) ⌝ + pα, ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) ⌝
| ⊦ σ0 = σ1 ↔ # σ0 = # σ1 ∧ (∀ n. ⌜n⌝ < # σ0 → σ0[n] = σ1[n]) |
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), #(⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(n + 1)⌝ + pα) = # ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n1. ⌜n1⌝ < #(⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(n + 1)⌝ + pα) → (⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(n + 1)⌝ + pα)[n1] = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ [n1] ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , (⌜n⌝ + ⌜1⌝ ) + # pα = ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n1. ¬ ⌜n⌝ + # pα < ⌜n1⌝ → (⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(n + 1)⌝ + pα)[n1] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n1] ⊦
Used simplifier rules: ⊦ ⌜x⌝ [n] = x[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⌝ < ⌜1⌝ + n∞ ↔ ¬ n∞ < ⌜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) ¬ # σ < ⌜n⌝ ⊦ # σ.take(n) = n; (s) ⊦ # σ < ⌜n⌝ + ⌜1⌝ ↔ ¬ ⌜n⌝ < # σ; (s) ⊦ # ⌜σ.take(n)⌝ = ⌜# σ.take(n)⌝ ; (s) ⊦ #(σ + σ1) = # σ + # σ1; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s)
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , (⌜n⌝ + ⌜1⌝ ) + # pα = ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n1. ¬ ⌜n⌝ + # pα < ⌜n1⌝ → (⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(n + 1)⌝ + pα)[n1] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n1] ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , (⌜n⌝ + ⌜1⌝ ) + # pα = ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), ¬ ⌜n⌝ + # pα < ⌜n⌝ → (⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(n + 1)⌝ + pα)[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ) ⊦
Used terms: n
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , (⌜n⌝ + ⌜1⌝ ) + # pα = ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), ¬ ⌜n⌝ + # pα < ⌜n⌝ → (⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(n + 1)⌝ + pα)[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , (⌜n⌝ + ⌜1⌝ ) + # pα = ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , (⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(n + 1)⌝ + pα)[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) ⊦
Used simplifier rules: 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∞ + n∞1 < n∞1; (s)
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , (⌜n⌝ + ⌜1⌝ ) + # pα = ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , (⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(n + 1)⌝ + pα)[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) ⊦ |
⊦ ⌜m⌝ < # σ → (σ + σ1)[m] = σ[m]
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , (⌜n⌝ + ⌜1⌝ ) + # pα = ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(n + 1)⌝ [n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ⌜n⌝ < # ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(n + 1)⌝ , frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ) ⊦
Used simplifier rules: ⊦ ¬ ⌜m⌝ < # σ → (σ + σ1)[m] = σ1[m - (# σ).n]; (s) ⊦ ⌜n⌝ ≠ ∞; (s) n∞ ≠ ∞ ⊦ (⌜m⌝ + n∞).n = m + n∞.n; (s) ⊦ ⌜n⌝ .n = n; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ # ⌜σ.take(n)⌝ = ⌜# σ.take(n)⌝ ; (s) ⊦ # σ < ⌜n⌝ + ⌜1⌝ ↔ ¬ ⌜n⌝ < # σ; (s) ¬ # σ < ⌜n⌝ ⊦ # σ.take(n) = n; (s) ⊦ ⌜m + n⌝ = ⌜m⌝ + ⌜n⌝ ; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ ⌜n⌝ < ⌜1⌝ + n∞ ↔ ¬ n∞ < ⌜n⌝ ; (s) ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ ¬ n < n; (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 Used terms: ⌜lim (⌜λ n. ⌜repla (step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα) ⌝ ⌝ ) .take (n + 1 ) ⌝ , pα, n
| ⊦ ⌜m⌝ < # σ → (σ + σ1)[m] = σ[m] |
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , (⌜n⌝ + ⌜1⌝ ) + # pα = ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(n + 1)⌝ [n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ⌜n⌝ < # ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(n + 1)⌝ , frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , (⌜n⌝ + ⌜1⌝ ) + # pα = ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) ⊦
Used simplifier rules: 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 < n; (s) ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ ⌜n⌝ < ⌜1⌝ + n∞ ↔ ¬ n∞ < ⌜n⌝ ; (s) 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) ¬ # σ < ⌜n⌝ ⊦ # σ.take(n) = n; (s) ⊦ # σ < ⌜n⌝ + ⌜1⌝ ↔ ¬ ⌜n⌝ < # σ; (s) ⊦ # ⌜σ.take(n)⌝ = ⌜# σ.take(n)⌝ ; (s) m < n, ¬ # σ < ⌜n⌝ ⊦ σ.take(n)[m] = σ[m]; (s) ⊦ m < n + 1 ↔ ¬ n < m; (s) ⊦ ⌜x⌝ [n] = x[n]; (s)
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , (⌜n⌝ + ⌜1⌝ ) + # pα = ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), 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)))(pcsl, pal) ∧ frag(IOAut(astart, astep, aext))(aσ, aα) ∧ cext !(πra(step, cstep, ren, cren, ⌜pcsl⌝ , ⌜pal⌝ )) ⊑ aext !(aα) → # repls(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα) = # repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα) + 1
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , (⌜n⌝ + ⌜1⌝ ) + # pα = ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), nounsharedextR(cren, cext, ren) ∧ Πok(ext, cext, ren, cren) ∧ frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf.take(n0 + 1), paf.take(n0)) ∧ frag(IOAut(astart, astep, aext))(aσ, aα) ∧ cext !(πra(step, cstep, ren, cren, ⌜pcsf.take(n0 + 1)⌝ , ⌜paf.take(n0)⌝ )) ⊑ aext !(aα) → # repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) = # repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) + 1, ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ) ⊦
Used terms: aren, ren, cstep, cext, aext, aα, ext, astart, cstart, start, paf.take(n0), cren, astep, pcsf.take(n0 + 1), aσ, step
| ⊦ nounsharedextR(cren, cext, ren) ∧ Πok(ext, cext, ren, cren) ∧ frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsl, pal) ∧ frag(IOAut(astart, astep, aext))(aσ, aα) ∧ cext !(πra(step, cstep, ren, cren, ⌜pcsl⌝ , ⌜pal⌝ )) ⊑ aext !(aα) → # repls(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα) = # repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα) + 1 |
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , (⌜n⌝ + ⌜1⌝ ) + # pα = ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), nounsharedextR(cren, cext, ren) ∧ Πok(ext, cext, ren, cren) ∧ frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf.take(n0 + 1), paf.take(n0)) ∧ frag(IOAut(astart, astep, aext))(aσ, aα) ∧ cext !(πra(step, cstep, ren, cren, ⌜pcsf.take(n0 + 1)⌝ , ⌜paf.take(n0)⌝ )) ⊑ aext !(aα) → # repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) = # repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) + 1, ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , (⌜n⌝ + ⌜1⌝ ) + # pα = ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), 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)))(pcsf.take(n0 + 1), paf.take(n0)) ∧ frag(IOAut(astart, astep, aext))(aσ, aα) ∧ cext !(πra(step, cstep, ren, cren, ⌜pcsf.take(n0 + 1)⌝ , ⌜paf.take(n0)⌝ )) ⊑ aext !(aα)
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , # repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) = # repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) + 1, (⌜n⌝ + ⌜1⌝ ) + # pα = ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) ⊦
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , (⌜n⌝ + ⌜1⌝ ) + # pα = ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), 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)))(pcsf.take(n0 + 1), paf.take(n0)) ∧ frag(IOAut(astart, astep, aext))(aσ, aα) ∧ cext !(πra(step, cstep, ren, cren, ⌜pcsf.take(n0 + 1)⌝ , ⌜paf.take(n0)⌝ )) ⊑ aext !(aα) |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , (⌜n⌝ + ⌜1⌝ ) + # pα = ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), ¬ cext !(πra(step, cstep, ren, cren, ⌜pcsf.take(n0 + 1)⌝ , ⌜paf.take(n0)⌝ )) ⊑ aext !(aα), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ) ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ fragω(IOAut(start, step, ext))(sf, af) → (frag*(IOAut(start, step, ext))(sf.take(n + 1), af.take(n)) ↔ true); (ss)
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , (⌜n⌝ + ⌜1⌝ ) + # pα = ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), ¬ cext !(πra(step, cstep, ren, cren, ⌜pcsf.take(n0 + 1)⌝ , ⌜paf.take(n0)⌝ )) ⊑ aext !(aα), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ) ⊦ |
⊦ πra(lstep, rstep, lren, rren, ⌜psf⌝ , ⌜paf⌝ ) = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ )
cext !(lim(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , (⌜n⌝ + ⌜1⌝ ) + # pα = ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), ¬ cext !(πra(step, cstep, ren, cren, ⌜pcsf.take(n0 + 1)⌝ , ⌜paf.take(n0)⌝ )) ⊑ aext !(aα), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) ⊦
Used terms: cstep, pcsf, ren, cren, step, paf
| ⊦ πra(lstep, rstep, lren, rren, ⌜psf⌝ , ⌜paf⌝ ) = lim(⌜λ n. ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⌝ ) |
| cext !(lim(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , (⌜n⌝ + ⌜1⌝ ) + # pα = ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), ¬ cext !(πra(step, cstep, ren, cren, ⌜pcsf.take(n0 + 1)⌝ , ⌜paf.take(n0)⌝ )) ⊑ aext !(aα), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) ⊦ |
⊦ mon(σσ) ∧ σσ ≠ [] → (∀ n. ⌜n⌝ < # σσ → σσ[n] ⊑ lim(σσ)) ∧ (∀ m. ¬ # lim(σσ) < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ ⌜lim(σσ).take(m)⌝ ⊑ σσ[n]))
cext !(lim(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , (⌜n⌝ + ⌜1⌝ ) + # pα = ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), ¬ cext !(πra(step, cstep, ren, cren, ⌜pcsf.take(n0 + 1)⌝ , ⌜paf.take(n0)⌝ )) ⊑ aext !(aα), mon(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ ) ∧ ⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ ≠ [] → (∀ n. ⌜n⌝ < # ⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ → ⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ [n] ⊑ lim(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ )) ∧ (∀ m. ¬ # lim(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜n⌝ < # ⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ ∧ ⌜lim(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ [n])), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ) ⊦
Used terms: ⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝
| ⊦ mon(σσ) ∧ σσ ≠ [] → (∀ n. ⌜n⌝ < # σσ → σσ[n] ⊑ lim(σσ)) ∧ (∀ m. ¬ # lim(σσ) < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ ⌜lim(σσ).take(m)⌝ ⊑ σσ[n])) |
| cext !(lim(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , (⌜n⌝ + ⌜1⌝ ) + # pα = ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), ¬ cext !(πra(step, cstep, ren, cren, ⌜pcsf.take(n0 + 1)⌝ , ⌜paf.take(n0)⌝ )) ⊑ aext !(aα), mon(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ ) ∧ ⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ ≠ [] → (∀ n. ⌜n⌝ < # ⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ → ⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ [n] ⊑ lim(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ )) ∧ (∀ m. ¬ # lim(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜n⌝ < # ⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ ∧ ⌜lim(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ [n])), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ) ⊦ |
cext !(lim(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , (⌜n⌝ + ⌜1⌝ ) + # pα = ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), ¬ cext !(πra(step, cstep, ren, cren, ⌜pcsf.take(n0 + 1)⌝ , ⌜paf.take(n0)⌝ )) ⊑ aext !(aα), mon(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ ) → (∀ n1. ⌜πra(step, cstep, ren, cren, pcsf.take(n1 + 1), paf.take(n1))⌝ ⊑ lim(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ )) ∧ (∀ m. ¬ # lim(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n1. ⌜lim(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜πra(step, cstep, ren, cren, pcsf.take(n1 + 1), paf.take(n1))⌝ )), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) ⊦
Used simplifier rules: ⊦ ⌜nf⌝ [n] = nf(n); (s) ⊦ ⌜m⌝ < ∞; (s) ⊦ # ⌜nf⌝ = ∞; (s) ⊦ [] ≠ ⌜nf⌝ ; (s)
| cext !(lim(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , (⌜n⌝ + ⌜1⌝ ) + # pα = ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), ¬ cext !(πra(step, cstep, ren, cren, ⌜pcsf.take(n0 + 1)⌝ , ⌜paf.take(n0)⌝ )) ⊑ aext !(aα), mon(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ ) → (∀ n1. ⌜πra(step, cstep, ren, cren, pcsf.take(n1 + 1), paf.take(n1))⌝ ⊑ lim(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ )) ∧ (∀ m. ¬ # lim(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n1. ⌜lim(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜πra(step, cstep, ren, cren, pcsf.take(n1 + 1), paf.take(n1))⌝ )), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) ⊦ |
cext !(lim(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , (⌜n⌝ + ⌜1⌝ ) + # pα = ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ mon(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ ), ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), ¬ cext !(πra(step, cstep, ren, cren, ⌜pcsf.take(n0 + 1)⌝ , ⌜paf.take(n0)⌝ )) ⊑ aext !(aα), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ) ⊦
cext !(lim(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , (⌜n⌝ + ⌜1⌝ ) + # pα = ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), ¬ cext !(πra(step, cstep, ren, cren, ⌜pcsf.take(n0 + 1)⌝ , ⌜paf.take(n0)⌝ )) ⊑ aext !(aα), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n1. ⌜πra(step, cstep, ren, cren, pcsf.take(n1 + 1), paf.take(n1))⌝ ⊑ lim(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n1. ⌜lim(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜πra(step, cstep, ren, cren, pcsf.take(n1 + 1), paf.take(n1))⌝ ) ⊦
| cext !(lim(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , (⌜n⌝ + ⌜1⌝ ) + # pα = ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ mon(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ ), ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), ¬ cext !(πra(step, cstep, ren, cren, ⌜pcsf.take(n0 + 1)⌝ , ⌜paf.take(n0)⌝ )) ⊑ aext !(aα), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ) ⊦ |
⊦ 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: cext, cstart, cstep, pcsf, ren, ext, cren, step, start, paf
| ⊦ 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))⌝ ⌝ ) |
| cext !(lim(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , (⌜n⌝ + ⌜1⌝ ) + # pα = ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), ¬ cext !(πra(step, cstep, ren, cren, ⌜pcsf.take(n0 + 1)⌝ , ⌜paf.take(n0)⌝ )) ⊑ aext !(aα), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n1. ⌜πra(step, cstep, ren, cren, pcsf.take(n1 + 1), paf.take(n1))⌝ ⊑ lim(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n1. ⌜lim(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜πra(step, cstep, ren, cren, pcsf.take(n1 + 1), paf.take(n1))⌝ ) ⊦ |
cext !(lim(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , (⌜n⌝ + ⌜1⌝ ) + # pα = ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ⌜πra(step, cstep, ren, cren, pcsf.take(n0 + 1), paf.take(n0))⌝ ⊑ lim(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ ), ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), ¬ cext !(πra(step, cstep, ren, cren, ⌜pcsf.take(n0 + 1)⌝ , ⌜paf.take(n0)⌝ )) ⊑ aext !(aα), ∀ m. ¬ # lim(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n1. ⌜lim(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜πra(step, cstep, ren, cren, pcsf.take(n1 + 1), paf.take(n1))⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) ⊦
Used terms: n0
| cext !(lim(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , (⌜n⌝ + ⌜1⌝ ) + # pα = ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ⌜πra(step, cstep, ren, cren, pcsf.take(n0 + 1), paf.take(n0))⌝ ⊑ lim(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ ), ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), ¬ cext !(πra(step, cstep, ren, cren, ⌜pcsf.take(n0 + 1)⌝ , ⌜paf.take(n0)⌝ )) ⊑ aext !(aα), ∀ m. ¬ # lim(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n1. ⌜lim(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜πra(step, cstep, ren, cren, pcsf.take(n1 + 1), paf.take(n1))⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) ⊦ |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
cext !(lim(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , (⌜n⌝ + ⌜1⌝ ) + # pα = ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), ¬ cext !(πra(step, cstep, ren, cren, ⌜pcsf.take(n0 + 1)⌝ , ⌜paf.take(n0)⌝ )) ⊑ aext !(aα), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n1. ⌜lim(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜πra(step, cstep, ren, cren, pcsf.take(n1 + 1), paf.take(n1))⌝ ), ∃ σ1. ⌜πra(step, cstep, ren, cren, pcsf.take(n0 + 1), paf.take(n0))⌝ + σ1 = lim(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ ) ⊦
Used terms: ⌜πra(step, cstep, ren, cren, pcsf.take(n0 + 1), paf.take(n0))⌝ , lim(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ )
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| cext !(lim(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , (⌜n⌝ + ⌜1⌝ ) + # pα = ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), ¬ cext !(πra(step, cstep, ren, cren, ⌜pcsf.take(n0 + 1)⌝ , ⌜paf.take(n0)⌝ )) ⊑ aext !(aα), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ ) < ⌜m⌝ → (∃ n1. ⌜lim(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ ).take(m)⌝ ⊑ ⌜πra(step, cstep, ren, cren, pcsf.take(n1 + 1), paf.take(n1))⌝ ), ∃ σ1. ⌜πra(step, cstep, ren, cren, pcsf.take(n0 + 1), paf.take(n0))⌝ + σ1 = lim(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ ) ⊦ |
# lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , (⌜n⌝ + ⌜1⌝ ) + # pα = ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , ⌜πra(step, cstep, ren, cren, pcsf.take(n0 + 1), paf.take(n0))⌝ + cα = lim(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜cext !(πra(step, cstep, ren, cren, pcsf.take(n0 + 1), paf.take(n0)))⌝ + cext !(cα) = aext !(aα), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), ¬ cext !(πra(step, cstep, ren, cren, ⌜pcsf.take(n0 + 1)⌝ , ⌜paf.take(n0)⌝ )) ⊑ aext !(aα), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ m. ¬ ⌜# πra(step, cstep, ren, cren, pcsf.take(n0 + 1), paf.take(n0))⌝ + # cα < ⌜m⌝ → (∃ n1. ⌜(⌜πra(step, cstep, ren, cren, pcsf.take(n0 + 1), paf.take(n0))⌝ + cα).take(m)⌝ ⊑ ⌜πra(step, cstep, ren, cren, pcsf.take(n1 + 1), paf.take(n1))⌝ ) ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ #(σ + σ1) = # σ + # σ1; (s) ⊦ ext !(⌜al⌝ + α2) = ⌜ext !(al)⌝ + ext !(α2); (s)
| # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , (⌜n⌝ + ⌜1⌝ ) + # pα = ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , ⌜πra(step, cstep, ren, cren, pcsf.take(n0 + 1), paf.take(n0))⌝ + cα = lim(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜cext !(πra(step, cstep, ren, cren, pcsf.take(n0 + 1), paf.take(n0)))⌝ + cext !(cα) = aext !(aα), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), ¬ cext !(πra(step, cstep, ren, cren, ⌜pcsf.take(n0 + 1)⌝ , ⌜paf.take(n0)⌝ )) ⊑ aext !(aα), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ m. ¬ ⌜# πra(step, cstep, ren, cren, pcsf.take(n0 + 1), paf.take(n0))⌝ + # cα < ⌜m⌝ → (∃ n1. ⌜(⌜πra(step, cstep, ren, cren, pcsf.take(n0 + 1), paf.take(n0))⌝ + cα).take(m)⌝ ⊑ ⌜πra(step, cstep, ren, cren, pcsf.take(n1 + 1), paf.take(n1))⌝ ) ⊦ |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
# lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , ⌜cext !(πra(step, cstep, ren, cren, pcsf.take(n0 + 1), paf.take(n0)))⌝ + cext !(cα) = aext !(aα), ⌜πra(step, cstep, ren, cren, pcsf.take(n0 + 1), paf.take(n0))⌝ + cα = lim(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ ), (⌜n⌝ + ⌜1⌝ ) + # pα = ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), ∀ m. ¬ ⌜# πra(step, cstep, ren, cren, pcsf.take(n0 + 1), paf.take(n0))⌝ + # cα < ⌜m⌝ → (∃ n1. ⌜(⌜πra(step, cstep, ren, cren, pcsf.take(n0 + 1), paf.take(n0))⌝ + cα).take(m)⌝ ⊑ ⌜πra(step, cstep, ren, cren, pcsf.take(n1 + 1), paf.take(n1))⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ σ1. cext !(πra(step, cstep, ren, cren, ⌜pcsf.take(n0 + 1)⌝ , ⌜paf.take(n0)⌝ )) + σ1 ≠ aext !(aα) ⊦
Used terms: cext !(πra(step, cstep, ren, cren, ⌜pcsf.take(n0 + 1)⌝ , ⌜paf.take(n0)⌝ )), aext !(aα)
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , ⌜cext !(πra(step, cstep, ren, cren, pcsf.take(n0 + 1), paf.take(n0)))⌝ + cext !(cα) = aext !(aα), ⌜πra(step, cstep, ren, cren, pcsf.take(n0 + 1), paf.take(n0))⌝ + cα = lim(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ ), (⌜n⌝ + ⌜1⌝ ) + # pα = ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), ∀ m. ¬ ⌜# πra(step, cstep, ren, cren, pcsf.take(n0 + 1), paf.take(n0))⌝ + # cα < ⌜m⌝ → (∃ n1. ⌜(⌜πra(step, cstep, ren, cren, pcsf.take(n0 + 1), paf.take(n0))⌝ + cα).take(m)⌝ ⊑ ⌜πra(step, cstep, ren, cren, pcsf.take(n1 + 1), paf.take(n1))⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ σ1. cext !(πra(step, cstep, ren, cren, ⌜pcsf.take(n0 + 1)⌝ , ⌜paf.take(n0)⌝ )) + σ1 ≠ aext !(aα) ⊦ |
# lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , (⌜n⌝ + ⌜1⌝ ) + # pα = ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , ⌜πra(step, cstep, ren, cren, pcsf.take(n0 + 1), paf.take(n0))⌝ + cα = lim(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜cext !(πra(step, cstep, ren, cren, pcsf.take(n0 + 1), paf.take(n0)))⌝ + cext !(cα) = aext !(aα), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], cext !(πra(step, cstep, ren, cren, ⌜pcsf.take(n0 + 1)⌝ , ⌜paf.take(n0)⌝ )) + cext !(cα) ≠ aext !(aα), ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ m. ¬ ⌜# πra(step, cstep, ren, cren, pcsf.take(n0 + 1), paf.take(n0))⌝ + # cα < ⌜m⌝ → (∃ n1. ⌜(⌜πra(step, cstep, ren, cren, pcsf.take(n0 + 1), paf.take(n0))⌝ + cα).take(m)⌝ ⊑ ⌜πra(step, cstep, ren, cren, pcsf.take(n1 + 1), paf.take(n1))⌝ ) ⊦
Used terms: cext !(cα)
| # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , (⌜n⌝ + ⌜1⌝ ) + # pα = ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , ⌜πra(step, cstep, ren, cren, pcsf.take(n0 + 1), paf.take(n0))⌝ + cα = lim(⌜λ n. ⌜πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n))⌝ ⌝ ), ⌜cext !(πra(step, cstep, ren, cren, pcsf.take(n0 + 1), paf.take(n0)))⌝ + cext !(cα) = aext !(aα), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], cext !(πra(step, cstep, ren, cren, ⌜pcsf.take(n0 + 1)⌝ , ⌜paf.take(n0)⌝ )) + cext !(cα) ≠ aext !(aα), ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ m. ¬ ⌜# πra(step, cstep, ren, cren, pcsf.take(n0 + 1), paf.take(n0))⌝ + # cα < ⌜m⌝ → (∃ n1. ⌜(⌜πra(step, cstep, ren, cren, pcsf.take(n0 + 1), paf.take(n0))⌝ + cα).take(m)⌝ ⊑ ⌜πra(step, cstep, ren, cren, pcsf.take(n1 + 1), paf.take(n1))⌝ ) ⊦ |
⊦ # psl = # pal + 1 → πra(lstep, rstep, lren, rren, ⌜psl⌝ , ⌜pal⌝ ) = ⌜πra(lstep, rstep, lren, rren, psl, pal)⌝
Used simplifier rules: ⊦ # nf.take(n) = n; (s) ⊦ m + n = m + n0 ↔ n = n0; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ ext !(⌜al⌝ ) = ⌜ext !(al)⌝ ; (s) Used terms: pcsf.take(n0 + 1), cstep, paf.take(n0), ren, cren, step
| ⊦ # psl = # pal + 1 → πra(lstep, rstep, lren, rren, ⌜psl⌝ , ⌜pal⌝ ) = ⌜πra(lstep, rstep, lren, rren, psl, pal)⌝ |
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , # repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) = # repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) + 1, (⌜n⌝ + ⌜1⌝ ) + # pα = ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) = # repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) + 1, # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , (⌜n⌝ + ⌜1⌝ ) + # pα = ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ) ⊦
Used terms: n0
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) = # repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) + 1, # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , (⌜n⌝ + ⌜1⌝ ) + # pα = ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ) ⊦ |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , # repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) = # repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) + 1, (⌜n⌝ + ⌜1⌝ ) + # pα = ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∃ σ1. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + σ1 = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) ⊦
Used terms: ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) ⌝ , lim (⌜λ n. ⌜repls (step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα) ⌝ ⌝ )
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , # repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) = # repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) + 1, (⌜n⌝ + ⌜1⌝ ) + # pα = ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(step, astep, ren, aren, ext, aext) (lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1]), ∀ m. ¬ # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∃ σ1. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + σ1 = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) = # repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) + 1, (⌜n⌝ + ⌜1⌝ ) + # pα = ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ = 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, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + # paσ = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(step, astep, ren, aren, ext, aext) ((⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], (⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n + 1]), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ ⌜# repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + # paσ < ⌜m⌝ → (∃ n. ⌜(⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ) ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ #(σ + σ1) = # σ + # σ1; (s)
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) = # repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) + 1, (⌜n⌝ + ⌜1⌝ ) + # pα = ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ = 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, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + # paσ = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(step, astep, ren, aren, ext, aext) ((⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], (⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n + 1]), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ ⌜# repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + # paσ < ⌜m⌝ → (∃ n. ⌜(⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) = # repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) + 1, ⌜# repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + # paσ = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), (⌜n⌝ + ⌜1⌝ ) + # pα = ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], pα = ⌜pal⌝ , ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(step, astep, ren, aren, ext, aext) ((⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], (⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n + 1]), ∀ m. ¬ ⌜# repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + # paσ < ⌜m⌝ → (∃ n. ⌜(⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) ⊦
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)
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) = # repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) + 1, ⌜# repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + # paσ = # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) + ⌜1⌝ , ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), (⌜n⌝ + ⌜1⌝ ) + # pα = ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], pα = ⌜pal⌝ , ⌜n⌝ < # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(step, astep, ren, aren, ext, aext) ((⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], (⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n + 1]), ∀ m. ¬ ⌜# repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + # paσ < ⌜m⌝ → (∃ n. ⌜(⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = ⌜1⌝ + ⌜n⌝ + ⌜# pal⌝ + # paσ, # repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) = 2 + n + # pal, n + 1 + # pal = # repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα), ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(step, astep, ren, aren, ext, aext) ((⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], (⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n + 1]), ∀ m. ¬ (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ < ⌜m⌝ → (∃ n. ⌜(⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) ⊦
Used simplifier rules: 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∞ + n∞1 < n∞1; (s) ⊦ ⌜n⌝ < ⌜1⌝ + n∞ ↔ ¬ n∞ < ⌜n⌝ ; (s) 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) ⊦ n < m → (⌜(* n)⌝ + n∞1 = ⌜(* m)⌝ + n∞2 ↔ n∞1 = ⌜m - n⌝ + n∞2); (s) ⊦ ⌜n1⌝ + ⌜n⌝ + ⌜m⌝ = ⌜n0⌝ ↔ n1 + n + m = n0; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s)
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = ⌜1⌝ + ⌜n⌝ + ⌜# pal⌝ + # paσ, # repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) = 2 + n + # pal, n + 1 + # pal = # repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα), ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(step, astep, ren, aren, ext, aext) ((⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], (⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n + 1]), ∀ m. ¬ (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ < ⌜m⌝ → (∃ n. ⌜(⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) ⊦ |
⊦ σ0 = σ1 ↔ # σ0 = # σ1 ∧ (∀ n. ⌜n⌝ < # σ0 → σ0[n] = σ1[n])
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), #(⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ) = # 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, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) = 2 + n + # pal, # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = ⌜1⌝ + ⌜n⌝ + ⌜# pal⌝ + # paσ, n + 1 + # pal = # repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(step, astep, ren, aren, ext, aext) ((⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], (⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n + 1]), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ < ⌜m⌝ → (∃ n. ⌜(⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜n⌝ < #(⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ) → (⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n] = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] ⊦
Used terms: ⌜repls (step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) ⌝ + paσ, lim (⌜λ n. ⌜repls (step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα) ⌝ ⌝ )
| ⊦ σ0 = σ1 ↔ # σ0 = # σ1 ∧ (∀ n. ⌜n⌝ < # σ0 → σ0[n] = σ1[n]) |
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), #(⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ) = # 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, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) = 2 + n + # pal, # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = ⌜1⌝ + ⌜n⌝ + ⌜# pal⌝ + # paσ, n + 1 + # pal = # repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(step, astep, ren, aren, ext, aext) ((⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], (⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n + 1]), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ < ⌜m⌝ → (∃ n. ⌜(⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜n⌝ < #(⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ) → (⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n] = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) = 2 + n + # pal, # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = ⌜1⌝ + ⌜n⌝ + ⌜# pal⌝ + # paσ, n + 1 + # pal = # repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα), (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ = # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(step, astep, ren, aren, ext, aext) ((⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], (⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n + 1]), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ < ⌜m⌝ → (∃ n. ⌜(⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n1. ⌜n1⌝ < (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ → (⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n1] = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n1] ⊦
Used simplifier rules: add-assoc: ⊦ (n∞ + n∞1) + n∞2 = n∞ + n∞1 + n∞2; from specification nat-inf 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) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ #(σ + σ1) = # σ + # σ1; (s)
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) = 2 + n + # pal, # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = ⌜1⌝ + ⌜n⌝ + ⌜# pal⌝ + # paσ, n + 1 + # pal = # repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα), (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ = # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(step, astep, ren, aren, ext, aext) ((⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], (⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n + 1]), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ < ⌜m⌝ → (∃ n. ⌜(⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n1. ⌜n1⌝ < (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ → (⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n1] = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n1] ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = ⌜1⌝ + ⌜n⌝ + ⌜# pal⌝ + # paσ, # repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) = 2 + n + # pal, (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ = # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), n + 1 + # pal = # repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(step, astep, ren, aren, ext, aext) ((⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], (⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n + 1]), ⌜n + 1⌝ < (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ → (⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n + 1] = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1], ∀ n1. ⌜n1⌝ < (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ → (⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n1] = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n1], ∀ m. ¬ (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ < ⌜m⌝ → (∃ n. ⌜(⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) ⊦
Used terms: n + 1
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = ⌜1⌝ + ⌜n⌝ + ⌜# pal⌝ + # paσ, # repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) = 2 + n + # pal, (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ = # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), n + 1 + # pal = # repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(step, astep, ren, aren, ext, aext) ((⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], (⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n + 1]), ⌜n + 1⌝ < (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ → (⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n + 1] = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1], ∀ n1. ⌜n1⌝ < (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ → (⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n1] = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n1], ∀ m. ¬ (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ < ⌜m⌝ → (∃ n. ⌜(⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) = 2 + n + # pal, # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = ⌜1⌝ + ⌜n⌝ + ⌜# pal⌝ + # paσ, n + 1 + # pal = # repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα), (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ = # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], (⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n + 1] = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1], frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(step, astep, ren, aren, ext, aext) ((⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], (⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n + 1]), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ < ⌜m⌝ → (∃ n. ⌜(⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n1. ⌜n1⌝ < (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ → (⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n1] = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n1] ⊦
Used simplifier rules: 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∞ + n∞1 < n∞1; (s) ⊦ ⌜n⌝ < ⌜1⌝ + n∞ ↔ ¬ n∞ < ⌜n⌝ ; (s) ⊦ m ≤ n → (⌜(* m)⌝ + n∞2 < ⌜(* n)⌝ + n∞1 ↔ n∞2 < ⌜n - m⌝ + n∞1); (s) 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)
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) = 2 + n + # pal, # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = ⌜1⌝ + ⌜n⌝ + ⌜# pal⌝ + # paσ, n + 1 + # pal = # repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα), (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ = # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], (⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n + 1] = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1], frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(step, astep, ren, aren, ext, aext) ((⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], (⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n + 1]), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ < ⌜m⌝ → (∃ n. ⌜(⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n1. ⌜n1⌝ < (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ → (⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n1] = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n1] ⊦ |
⊦ ⌜m⌝ < # σ → (σ + σ1)[m] = σ[m]
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = ⌜1⌝ + ⌜n⌝ + ⌜# pal⌝ + # paσ, # repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) = 2 + n + # pal, (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ = # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), n + 1 + # pal = # repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα), ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ [n + 1] = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1], lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], ⌜n + 1⌝ < # ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(step, astep, ren, aren, ext, aext) ((⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ [n + 1]), ∀ n1. ⌜n1⌝ < (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ → (⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n1] = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n1], ∀ m. ¬ (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ < ⌜m⌝ → (∃ n. ⌜(⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) ⊦
Used simplifier rules: ⊦ ¬ ⌜m⌝ < # σ → (σ + σ1)[m] = σ1[m - (# σ).n]; (s) ⊦ ⌜n⌝ .n = n; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ ⌜m + n⌝ = ⌜m⌝ + ⌜n⌝ ; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ ⌜n⌝ + ⌜m⌝ < ⌜n0⌝ ↔ n + m < n0; (s) ⊦ m < n ↔ ¬ n ≤ m; (ss) 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 ⊦ m + n - n + n1 = m - n1; (s) ⊦ m + n ≤ m + n0 ↔ n ≤ n0; (s) ⊦ m ≠ 0 → (m + n ≤ 1 ↔ m = 1 ∧ n = 0); (ws) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) ⌝ , paσ, n + 1
| ⊦ ⌜m⌝ < # σ → (σ + σ1)[m] = σ[m] |
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = ⌜1⌝ + ⌜n⌝ + ⌜# pal⌝ + # paσ, # repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) = 2 + n + # pal, (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ = # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), n + 1 + # pal = # repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα), ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ [n + 1] = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1], lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], ⌜n + 1⌝ < # ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(step, astep, ren, aren, ext, aext) ((⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ [n + 1]), ∀ n1. ⌜n1⌝ < (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ → (⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n1] = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n1], ∀ m. ¬ (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ < ⌜m⌝ → (∃ n. ⌜(⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) = 2 + n + # pal, # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = ⌜1⌝ + ⌜n⌝ + ⌜# pal⌝ + # paσ, n + 1 + # pal = # repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα), (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ = # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n + 1] = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1], frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(step, astep, ren, aren, ext, aext) ((⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n + 1]), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ < ⌜m⌝ → (∃ n. ⌜(⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n1. ⌜n1⌝ < (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ → (⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n1] = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n1] ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic n < n0 ⊦ (* n) ≠ m0 + (* n0); (s) ⊦ 1 < m ↔ ¬(m = 0 ∨ m = 1); (s) ⊦ m + n < m + n0 ↔ n < n0; (s) lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ ⌜x⌝ [n] = x[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⌝ + ⌜m⌝ < ⌜n0⌝ ↔ n + m < n0; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ ⌜m + n⌝ = ⌜m⌝ + ⌜n⌝ ; (s)
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) = 2 + n + # pal, # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = ⌜1⌝ + ⌜n⌝ + ⌜# pal⌝ + # paσ, n + 1 + # pal = # repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα), (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ = # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n + 1] = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1], frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(step, astep, ren, aren, ext, aext) ((⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n + 1]), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ < ⌜m⌝ → (∃ n. ⌜(⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n1. ⌜n1⌝ < (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ → (⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n1] = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n1] ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = ⌜1⌝ + ⌜n⌝ + ⌜# pal⌝ + # paσ, # repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) = 2 + n + # pal, (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ = # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), n + 1 + # pal = # repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα), repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n + 1] = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1], lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(step, astep, ren, aren, ext, aext) ((⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n + 1]), ⌜n⌝ < (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ → (⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n] = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], ∀ m. ¬ (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ < ⌜m⌝ → (∃ n. ⌜(⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) ⊦
Used terms: n
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = ⌜1⌝ + ⌜n⌝ + ⌜# pal⌝ + # paσ, # repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) = 2 + n + # pal, (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ = # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), n + 1 + # pal = # repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα), repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n + 1] = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1], lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(step, astep, ren, aren, ext, aext) ((⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n + 1]), ⌜n⌝ < (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ → (⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n] = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], ∀ m. ¬ (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ < ⌜m⌝ → (∃ n. ⌜(⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) = 2 + n + # pal, # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = ⌜1⌝ + ⌜n⌝ + ⌜# pal⌝ + # paσ, n + 1 + # pal = # repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα), (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ = # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n + 1] = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1], (⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n] = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(step, astep, ren, aren, ext, aext) ((⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n + 1]), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ < ⌜m⌝ → (∃ n. ⌜(⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ) ⊦
Used simplifier rules: 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 → (⌜(* n)⌝ = ⌜(* m)⌝ + n∞2 ↔ false); (s) ⊦ ⌜n⌝ < n∞ + ⌜n⌝ ↔ n∞ ≠ ⌜0⌝ ; (s)
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) = 2 + n + # pal, # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = ⌜1⌝ + ⌜n⌝ + ⌜# pal⌝ + # paσ, n + 1 + # pal = # repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα), (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ = # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n + 1] = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1], (⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n] = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(step, astep, ren, aren, ext, aext) ((⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ)[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n + 1]), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ < ⌜m⌝ → (∃ n. ⌜(⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ) ⊦ |
⊦ ⌜m⌝ < # σ → (σ + σ1)[m] = σ[m]
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = ⌜1⌝ + ⌜n⌝ + ⌜# pal⌝ + # paσ, # repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) = 2 + n + # pal, (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ = # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), n + 1 + # pal = # repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα), ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ [n] = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n + 1] = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1], lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], ⌜n⌝ < # ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(step, astep, ren, aren, ext, aext) (⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ [n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n + 1]), ∀ m. ¬ (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ < ⌜m⌝ → (∃ n. ⌜(⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) ⊦
Used simplifier rules: ⊦ ¬ ⌜m⌝ < # σ → (σ + σ1)[m] = σ1[m - (# σ).n]; (s) ⊦ ⌜n⌝ .n = n; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ m + m0 ≤ m ↔ m0 = 0; (s) ⊦ m + n = 0 ↔ m = 0 ∧ n = 0; (ws) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) ⌝ , paσ, n
| ⊦ ⌜m⌝ < # σ → (σ + σ1)[m] = σ[m] |
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = ⌜1⌝ + ⌜n⌝ + ⌜# pal⌝ + # paσ, # repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) = 2 + n + # pal, (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ = # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), n + 1 + # pal = # repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα), ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ [n] = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n + 1] = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1], lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], ⌜n⌝ < # ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ , frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(step, astep, ren, aren, ext, aext) (⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ [n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n + 1]), ∀ m. ¬ (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ < ⌜m⌝ → (∃ n. ⌜(⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) = 2 + n + # pal, # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = ⌜1⌝ + ⌜n⌝ + ⌜# pal⌝ + # paσ, n + 1 + # pal = # repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα), (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ = # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n + 1] = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n] = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(step, astep, ren, aren, ext, aext) (repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n + 1]), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ < ⌜m⌝ → (∃ n. ⌜(⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ) ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic n < n0 ⊦ (* n) ≠ m0 + (* n0); (s) ⊦ m < m + n ↔ n ≠ 0; (s) lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic ⊦ ⌜x⌝ [n] = x[n]; (s) ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s)
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) = 2 + n + # pal, # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ) = ⌜1⌝ + ⌜n⌝ + ⌜# pal⌝ + # paσ, n + 1 + # pal = # repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα), (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ = # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n + 1] = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n] = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(step, astep, ren, aren, ext, aext) (repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n + 1]), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), ∀ m. ¬ (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ < ⌜m⌝ → (∃ n. ⌜(⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)⌝ + paσ).take(m)⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) = 2 + n + # pal, (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ = # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), n + 1 + # pal = # repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα), repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n] = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n + 1] = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1], lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(step, astep, ren, aren, ext, aext) (repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n + 1]) ⊦
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) = 2 + n + # pal, (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ = # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), n + 1 + # pal = # repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα), repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n] = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n + 1] = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1], lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(step, astep, ren, aren, ext, aext) (repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n + 1]) ⊦ |
⊦ nounsharedextR(cren, cext, ren) ∧ Πok(ext, cext, ren, cren) ∧ Πok(ext, aext, ren, aren) ∧ oinj(cext) ∧ oinj(aext) ∧ oinj(ext) ∧ frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsl, pal) ∧ frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα) ∧ cext !(⌜πra(step, cstep, ren, cren, pcsl, pal)⌝ ) ⊑ aext !(aα) ∧ sameshared(cren, aren, ren) → frag*(Π(IOAut(start, step, ext), IOAut(astart, astep, aext), ren, aren)) (repls(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, ⌜as '⌝ + aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, ⌜as '⌝ + aσ, aα))
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) = 2 + n + # pal, n + 1 + # pal = # repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα), (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ = # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n + 1] = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n] = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(step, astep, ren, aren, ext, aext) (repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n + 1]), nounsharedextR(cren, cext, ren) ∧ Πok(ext, cext, ren, cren) ∧ Πok(ext, aext, ren, aren) ∧ oinj(cext) ∧ oinj(aext) ∧ oinj(ext) ∧ frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf.take(n0 + 1), paf.take(n0)) ∧ frag(IOAut(astart, astep, aext))(⌜hd(aσ) '⌝ + tl(aσ), aα) ∧ cext !(⌜πra(step, cstep, ren, cren, pcsf.take(n0 + 1), paf.take(n0))⌝ ) ⊑ aext !(aα) ∧ sameshared(cren, aren, ren) → frag*(Π(IOAut(start, step, ext), IOAut(astart, astep, aext), ren, aren)) (repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜hd(aσ) '⌝ + tl(aσ), aα), repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜hd(aσ) '⌝ + tl(aσ), aα)) ⊦
Used terms: aren, ren, cstep, cext, hd(aσ), aext, aα, ext, astart, cstart, start, paf.take(n0), cren, astep, pcsf.take(n0 + 1), tl(aσ), step
| ⊦ nounsharedextR(cren, cext, ren) ∧ Πok(ext, cext, ren, cren) ∧ Πok(ext, aext, ren, aren) ∧ oinj(cext) ∧ oinj(aext) ∧ oinj(ext) ∧ frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsl, pal) ∧ frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα) ∧ cext !(⌜πra(step, cstep, ren, cren, pcsl, pal)⌝ ) ⊑ aext !(aα) ∧ sameshared(cren, aren, ren) → frag*(Π(IOAut(start, step, ext), IOAut(astart, astep, aext), ren, aren)) (repls(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, ⌜as '⌝ + aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, ⌜as '⌝ + aσ, aα)) |
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) = 2 + n + # pal, n + 1 + # pal = # repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα), (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ = # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n + 1] = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n] = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(step, astep, ren, aren, ext, aext) (repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n + 1]), nounsharedextR(cren, cext, ren) ∧ Πok(ext, cext, ren, cren) ∧ Πok(ext, aext, ren, aren) ∧ oinj(cext) ∧ oinj(aext) ∧ oinj(ext) ∧ frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf.take(n0 + 1), paf.take(n0)) ∧ frag(IOAut(astart, astep, aext))(⌜hd(aσ) '⌝ + tl(aσ), aα) ∧ cext !(⌜πra(step, cstep, ren, cren, pcsf.take(n0 + 1), paf.take(n0))⌝ ) ⊑ aext !(aα) ∧ sameshared(cren, aren, ren) → frag*(Π(IOAut(start, step, ext), IOAut(astart, astep, aext), ren, aren)) (repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜hd(aσ) '⌝ + tl(aσ), aα), repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜hd(aσ) '⌝ + tl(aσ), aα)) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) = 2 + n + # pal, (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ = # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), n + 1 + # pal = # repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα), repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n] = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n + 1] = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1], lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(step, astep, ren, aren, ext, aext) (repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n + 1]), frag(IOAut(astart, astep, aext))(⌜hd(aσ) '⌝ + tl(aσ), aα) ∧ ⌜cext !(πra(step, cstep, ren, cren, pcsf.take(n0 + 1), paf.take(n0)))⌝ ⊑ aext !(aα) → frag*(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜hd(aσ) '⌝ + tl(aσ), aα), repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜hd(aσ) '⌝ + tl(aσ), aα)) ⊦
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) ⊦ ext !(⌜al⌝ ) = ⌜ext !(al)⌝ ; (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ fragω(IOAut(start, step, ext))(sf, af) → (frag*(IOAut(start, step, ext))(sf.take(n + 1), af.take(n)) ↔ true); (ss)
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) = 2 + n + # pal, (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ = # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), n + 1 + # pal = # repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα), repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n] = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n + 1] = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1], lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(step, astep, ren, aren, ext, aext) (repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n + 1]), frag(IOAut(astart, astep, aext))(⌜hd(aσ) '⌝ + tl(aσ), aα) ∧ ⌜cext !(πra(step, cstep, ren, cren, pcsf.take(n0 + 1), paf.take(n0)))⌝ ⊑ aext !(aα) → frag*(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜hd(aσ) '⌝ + tl(aσ), aα), repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜hd(aσ) '⌝ + tl(aσ), aα)) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) = 2 + n + # pal, n + 1 + # pal = # repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα), (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ = # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n + 1] = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n] = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], aσ = as + σ0, aσ ≠ [], frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(step, astep, ren, aren, ext, aext) (repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n + 1]), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα) ∧ ⌜cext !(πra(step, cstep, ren, cren, pcsf.take(n0 + 1), paf.take(n0)))⌝ ⊑ aext !(aα) → frag*(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα), repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα)) ⊦
Used simplifier rules: ⊦ ¬ frag(IOAut(start, step, ext))([], α); (s) ⊦ σ ≠ [] → (a = hd(σ) ∧ σ0 = tl(σ) ↔ σ = a + σ0); (elim) Used terms: aσ, as, σ0
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα) = 2 + n + # pal, n + 1 + # pal = # repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα), (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ = # lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n + 1] = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n + 1], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n] = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), aσ, aα)⌝ ⌝ )[n], aσ = as + σ0, aσ ≠ [], frag(IOAut(astart, astep, aext))(aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(step, astep, ren, aren, ext, aext) (repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), aσ, aα)[n + 1]), frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα) ∧ ⌜cext !(πra(step, cstep, ren, cren, pcsf.take(n0 + 1), paf.take(n0)))⌝ ⊑ aext !(aα) → frag*(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα), repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα)) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα) = 2 + n + # pal, (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ = # lim(⌜λ n1. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n1 + 1), paf.take(n1), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), n + 1 + # pal = # repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα), repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα)[n] = lim(⌜λ n1. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n1 + 1), paf.take(n1), ⌜as '⌝ + σ0, aα)⌝ ⌝ )[n], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα)[n + 1] = lim(⌜λ n1. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n1 + 1), paf.take(n1), ⌜as '⌝ + σ0, aα)⌝ ⌝ )[n + 1], lim(⌜λ n1. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n1 + 1), paf.take(n1), ⌜as '⌝ + σ0, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα)[n], frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), frag*(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα), repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα)), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(step, astep, ren, aren, ext, aext) (repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα)[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα)[n], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα)[n + 1]) ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ rext !(πra(lstep, rstep, lren, rren, ⌜psf⌝ , ⌜paf⌝ )) = β ∧ fragω (IOAut (Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren))) (psf, paf) → ⌜rext !(πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n)))⌝ ⊑ β; (ss) ⊦ a + σ = ⌜a '⌝ + σ; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ ⌜a '⌝ + σ ≠ []; (s)
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα) = 2 + n + # pal, (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ = # lim(⌜λ n1. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n1 + 1), paf.take(n1), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), n + 1 + # pal = # repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα), repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα)[n] = lim(⌜λ n1. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n1 + 1), paf.take(n1), ⌜as '⌝ + σ0, aα)⌝ ⌝ )[n], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα)[n + 1] = lim(⌜λ n1. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n1 + 1), paf.take(n1), ⌜as '⌝ + σ0, aα)⌝ ⌝ )[n + 1], lim(⌜λ n1. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n1 + 1), paf.take(n1), ⌜as '⌝ + σ0, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα)[n], frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), frag*(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα), repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα)), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(step, astep, ren, aren, ext, aext) (repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα)[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα)[n], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα)[n + 1]) ⊦ |
⊦ frag*(ioa)(sl, al) ↔ # sl = # al + 1 ∧ (∀ n. n < # al → ioa.step(sl[n], al[n], sl[n +1]))
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα) = # repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα) + 1, # repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα) = 2 + n + # pal, n + 1 + # pal = # repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα), (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ = # lim(⌜λ n1. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n1 + 1), paf.take(n1), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n1. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n1 + 1), paf.take(n1), ⌜as '⌝ + σ0, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα)[n], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα)[n + 1] = lim(⌜λ n1. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n1 + 1), paf.take(n1), ⌜as '⌝ + σ0, aα)⌝ ⌝ )[n + 1], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα)[n] = lim(⌜λ n1. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n1 + 1), paf.take(n1), ⌜as '⌝ + σ0, aα)⌝ ⌝ )[n], frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(step, astep, ren, aren, ext, aext) (repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα)[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα)[n], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα)[n + 1]), ∀ n. n < # repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα) → IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren)).step (repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα)[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα)[n], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα)[n +1]) ⊦
Used terms: IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren)), repls (step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα), repla (step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα)
| ⊦ frag*(ioa)(sl, al) ↔ # sl = # al + 1 ∧ (∀ n. n < # al → ioa.step(sl[n], al[n], sl[n +1])) |
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα) = # repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα) + 1, # repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα) = 2 + n + # pal, n + 1 + # pal = # repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα), (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ = # lim(⌜λ n1. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n1 + 1), paf.take(n1), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n1. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n1 + 1), paf.take(n1), ⌜as '⌝ + σ0, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα)[n], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα)[n + 1] = lim(⌜λ n1. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n1 + 1), paf.take(n1), ⌜as '⌝ + σ0, aα)⌝ ⌝ )[n + 1], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα)[n] = lim(⌜λ n1. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n1 + 1), paf.take(n1), ⌜as '⌝ + σ0, aα)⌝ ⌝ )[n], frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(step, astep, ren, aren, ext, aext) (repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα)[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα)[n], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα)[n + 1]), ∀ n. n < # repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα) → IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren)).step (repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα)[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα)[n], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα)[n +1]) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα) = 2 + n + # pal, n + 1 + # pal = # repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα), (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ = # lim(⌜λ n1. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n1 + 1), paf.take(n1), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n1. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n1 + 1), paf.take(n1), ⌜as '⌝ + σ0, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα)[n], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα)[n + 1] = lim(⌜λ n1. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n1 + 1), paf.take(n1), ⌜as '⌝ + σ0, aα)⌝ ⌝ )[n + 1], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα)[n] = lim(⌜λ n1. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n1 + 1), paf.take(n1), ⌜as '⌝ + σ0, aα)⌝ ⌝ )[n], frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(step, astep, ren, aren, ext, aext) (repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα)[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα)[n], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα)[n + 1]), ∀ n1. ¬ n + # pal < n1 → Π(step, astep, ren, aren, ext, aext) (repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα)[n1], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα)[n1], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα)[n1 + 1]) ⊦
Used simplifier rules: 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 + n0 ↔ n = n0; (s) ⊦ IOAut(start, step, ext).step = step; (s) ⊦ m +1 = m + 1; (s)
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα) = 2 + n + # pal, n + 1 + # pal = # repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα), (⌜2⌝ + ⌜n⌝ + ⌜# pal⌝ ) + # paσ = # lim(⌜λ n1. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n1 + 1), paf.take(n1), ⌜as '⌝ + σ0, aα)⌝ ⌝ ), lim(⌜λ n1. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n1 + 1), paf.take(n1), ⌜as '⌝ + σ0, aα)⌝ ⌝ )[n] = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα)[n], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα)[n + 1] = lim(⌜λ n1. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n1 + 1), paf.take(n1), ⌜as '⌝ + σ0, aα)⌝ ⌝ )[n + 1], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα)[n] = lim(⌜λ n1. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n1 + 1), paf.take(n1), ⌜as '⌝ + σ0, aα)⌝ ⌝ )[n], frag(IOAut(astart, astep, aext))(⌜as '⌝ + σ0, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(step, astep, ren, aren, ext, aext) (repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα)[n], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα)[n], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα)[n + 1]), ∀ n1. ¬ n + # pal < n1 → Π(step, astep, ren, aren, ext, aext) (repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα)[n1], repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα)[n1], repls(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + σ0, aα)[n1 + 1]) ⊦ |
Used simplifier rules: ⊦ ¬ m + n < m; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: n
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.