| ⊦ nounsharedextR(cren, cext, ren) ∧ nounsharedextR(aren, aext, 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))(⌜as '⌝ + aσ, aα) ∧ cext !(πra(step, cstep, ren, cren, pcσ, pα)) = aext !(aα) → Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(pα) |
cext !(πra(step, cstep, ren, cren, pcσ, pα)) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pα), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcσ, pα), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, 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, pcσ, pα)) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pα), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcσ, pα), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, 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, pcσ, pα)) = aext !(aα), pcσ = ⌜pcsl⌝ , Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pα), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcσ, pα), nounsharedextR(aren, aext, ren), 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, pcσ, pα)) = aext !(aα), pcσ = ⌜pcsf⌝ , Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pα), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcσ, pα), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren) ⊦
Used simplifier rules: Stream('a) freely generated by ⌜ ⌝, ⌜ ⌝;;
| cext !(πra(step, cstep, ren, cren, pcσ, pα)) = aext !(aα), pcσ = ⌜pcsl⌝ , Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pα), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcσ, pα), nounsharedextR(aren, aext, ren), 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, ⌜pcsl⌝ , ⌜pal⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcsl⌝ , ⌜pal⌝ , ⌜as '⌝ + aσ, aα)) ≠ ⌜Π(ext, cext, ren, cren) !(pal)⌝ , frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsl, pal), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren) ⊦
Used simplifier rules: ⊦ ⌜x⌝ .l = x; (s) ⊦ ext !(⌜al⌝ ) = ⌜ext !(al)⌝ ; (s) ⊦ finp(σ) ↔ (∃ x. ⌜x⌝ = σ); (as) ⊦ frag(ioa)(⌜sl⌝ , α) ↔ frag*(ioa)(sl, α.l) ∧ finp(α); (s)
| cext !(πra(step, cstep, ren, cren, ⌜pcsl⌝ , ⌜pal⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcsl⌝ , ⌜pal⌝ , ⌜as '⌝ + aσ, aα)) ≠ ⌜Π(ext, cext, ren, cren) !(pal)⌝ , frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsl, pal), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren) ⊦ |
⊦ nounsharedextR(cren, cext, ren) ∧ nounsharedextR(aren, aext, ren) ∧ Πok(ext, cext, ren, cren) ∧ Πok(ext, aext, ren, aren) ∧ 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α) → Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)) = Π(ext, cext, ren, cren) !(pal)
cext !(πra(step, cstep, ren, cren, ⌜pcsl⌝ , ⌜pal⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcsl⌝ , ⌜pal⌝ , ⌜as '⌝ + aσ, aα)) ≠ ⌜Π(ext, cext, ren, cren) !(pal)⌝ , frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsl, pal), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), nounsharedextR(cren, cext, ren) ∧ nounsharedextR(aren, aext, ren) ∧ Πok(ext, cext, ren, cren) ∧ Πok(ext, aext, ren, aren) ∧ 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α) → Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(pal) ⊦
Used terms: aren, ren, cstep, cext, aext, aα, ext, astart, cstart, start, pal, cren, astep, pcsl, ⌜as '⌝ + aσ, step
| ⊦ nounsharedextR(cren, cext, ren) ∧ nounsharedextR(aren, aext, ren) ∧ Πok(ext, cext, ren, cren) ∧ Πok(ext, aext, ren, aren) ∧ 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α) → Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)) = Π(ext, cext, ren, cren) !(pal) |
| cext !(πra(step, cstep, ren, cren, ⌜pcsl⌝ , ⌜pal⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcsl⌝ , ⌜pal⌝ , ⌜as '⌝ + aσ, aα)) ≠ ⌜Π(ext, cext, ren, cren) !(pal)⌝ , frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsl, pal), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), nounsharedextR(cren, cext, ren) ∧ nounsharedextR(aren, aext, ren) ∧ Πok(ext, cext, ren, cren) ∧ Πok(ext, aext, ren, aren) ∧ 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α) → Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(pal) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsl⌝ , ⌜pal⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcsl⌝ , ⌜pal⌝ , ⌜as '⌝ + aσ, aα)) ≠ ⌜Π(ext, cext, ren, cren) !(pal)⌝ , frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsl, pal), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren) ⊦ nounsharedextR(cren, cext, ren) ∧ nounsharedextR(aren, aext, ren) ∧ Πok(ext, cext, ren, cren) ∧ Πok(ext, aext, ren, aren) ∧ 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α)
cext !(πra(step, cstep, ren, cren, ⌜pcsl⌝ , ⌜pal⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(pal), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcsl⌝ , ⌜pal⌝ , ⌜as '⌝ + aσ, aα)) ≠ ⌜Π(ext, cext, ren, cren) !(pal)⌝ , frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsl, pal), nounsharedextR(aren, aext, ren), 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, ⌜pcsl⌝ , ⌜pal⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcsl⌝ , ⌜pal⌝ , ⌜as '⌝ + aσ, aα)) ≠ ⌜Π(ext, cext, ren, cren) !(pal)⌝ , frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsl, pal), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren) ⊦ nounsharedextR(cren, cext, ren) ∧ nounsharedextR(aren, aext, ren) ∧ Πok(ext, cext, ren, cren) ∧ Πok(ext, aext, ren, aren) ∧ 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α) |
cext !(πra(step, cstep, ren, cren, ⌜pcsl⌝ , ⌜pal⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcsl⌝ , ⌜pal⌝ , ⌜as '⌝ + aσ, aα)) ≠ ⌜Π(ext, cext, ren, cren) !(pal)⌝ , frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsl, pal), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, 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, pcsl, pal))⌝ ⊑ aext !(aα) ⊦
| cext !(πra(step, cstep, ren, cren, ⌜pcsl⌝ , ⌜pal⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcsl⌝ , ⌜pal⌝ , ⌜as '⌝ + aσ, aα)) ≠ ⌜Π(ext, cext, ren, cren) !(pal)⌝ , frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsl, pal), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, 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, pcsl, pal))⌝ ⊑ aext !(aα) ⊦ |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
cext !(πra(step, cstep, ren, cren, ⌜pcsl⌝ , ⌜pal⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcsl⌝ , ⌜pal⌝ , ⌜as '⌝ + aσ, aα)) ≠ ⌜Π(ext, cext, ren, cren) !(pal)⌝ , frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsl, pal), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ∀ σ1. ⌜cext !(πra(step, cstep, ren, cren, pcsl, pal))⌝ + σ1 ≠ aext !(aα) ⊦
Used terms: ⌜cext !(πra(step, cstep, ren, cren, pcsl, pal))⌝ , aext !(aα)
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| cext !(πra(step, cstep, ren, cren, ⌜pcsl⌝ , ⌜pal⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcsl⌝ , ⌜pal⌝ , ⌜as '⌝ + aσ, aα)) ≠ ⌜Π(ext, cext, ren, cren) !(pal)⌝ , frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsl, pal), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ∀ σ1. ⌜cext !(πra(step, cstep, ren, cren, pcsl, pal))⌝ + σ1 ≠ aext !(aα) ⊦ |
⊦ # psl = # pal + 1 → πra(lstep, rstep, lren, rren, ⌜psl⌝ , ⌜pal⌝ ) = ⌜πra(lstep, rstep, lren, rren, psl, pal)⌝
Used simplifier rules: ⊦ ext !(⌜al⌝ ) = ⌜ext !(al)⌝ ; (s) ⊦ σ + σ0 = σ ↔ σ0 = [] ∨ # σ = ∞; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ ⌜n⌝ ≠ ∞; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ 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: 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α), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(pal), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcsl⌝ , ⌜pal⌝ , ⌜as '⌝ + aσ, aα)) ≠ ⌜Π(ext, cext, ren, cren) !(pal)⌝ , frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsl, pal), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren) ⊦ |
⊦ # 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α)⌝
Used simplifier rules: ⊦ ext !(⌜al⌝ ) = ⌜ext !(al)⌝ ; (s) ⊦ ⌜x⌝ = ⌜x0⌝ ↔ x = x0; (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, ⌜as '⌝ + 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, pcσ, pα)) = aext !(aα), pcσ = ⌜pcsf⌝ , Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pα), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcσ, pα), nounsharedextR(aren, aext, ren), 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α), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren) ⊦
Used simplifier rules: ⊦ ⌜nf⌝ .f = nf; (s) ⊦ finp(σ) ↔ ¬(∃ nf. ⌜nf⌝ = σ); (ss) ⊦ frag(ioa)(⌜sf⌝ , α) ↔ fragω(ioa)(sf, α.f) ∧ ¬ finp(α); (s)
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren) ⊦ |
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, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα)), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren) ⊦
Used simplifier rules: ⊦ frag(ioa)(⌜sf⌝ , ⌜af⌝ ) ↔ fragω(ioa)(sf, af); (s) Used terms: aren, ren, cstep, cext, aext, aα, ext, ⌜pcsf⌝ , astart, cstart, start, cren, astep, ⌜paf⌝ , ⌜as '⌝ + aσ, step
| 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, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα)), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, 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α) → 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α), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) ≠ Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), 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α) ⊦
Used simplifier rules: ⊦ σ ⊑ σ; (s) Used terms: aren, ren, cstep, cext, aext, aα, cren, paf, ⌜as '⌝ + 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α), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) ≠ Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), 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α) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) ≠ Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren) ⊦
Used simplifier rules: ⊦ σ ⊑ σ; (s)
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) ≠ Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), 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α) → 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α), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) ≠ Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, 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α) ⊦
Used simplifier rules: ⊦ σ ⊑ σ; (s) Used terms: aren, ren, cstep, cext, aext, aα, cren, paf, ⌜as '⌝ + 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α), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) ≠ Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, 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α) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) ≠ Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren) ⊦
Used simplifier rules: ⊦ σ ⊑ σ; (s)
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) ≠ Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren) ⊦ |
⊦ mon(σσ) ∧ σσ ≠ [] → (∀ n. ⌜n⌝ < # σσ → σσ[n] ⊑ lim(σσ)) ∧ (∀ m. ¬ # lim(σσ) < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ ⌜lim(σσ).take(m)⌝ ⊑ σσ[n]))
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) ≠ Π(ext, cext, ren, cren) !(⌜paf⌝ ), 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ∧ ⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ≠ [] → (∀ n. ⌜n⌝ < # ⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ → ⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ [n] ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) ∧ (∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜n⌝ < # ⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ∧ ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ [n])) ⊦
Used terms: ⌜λ n. ⌜repla (step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + 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α), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) ≠ Π(ext, cext, ren, cren) !(⌜paf⌝ ), 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ∧ ⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ≠ [] → (∀ n. ⌜n⌝ < # ⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ → ⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ [n] ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) ∧ (∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜n⌝ < # ⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ∧ ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ [n])) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) ≠ Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) → (∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) ∧ (∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + 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α), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) ≠ Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) → (∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) ∧ (∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ )) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) ≠ Π(ext, cext, ren, cren) !(⌜paf⌝ ), 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) ≠ Π(ext, cext, ren, cren) !(⌜paf⌝ ), 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ) ⊦
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) ≠ Π(ext, cext, ren, cren) !(⌜paf⌝ ), 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦ |
⊦ nounsharedextR(cren, cext, ren) ∧ Πok(ext, cext, ren, cren) ∧ fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf) ∧ frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα) ∧ cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα) → mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )
Used simplifier rules: ⊦ σ ⊑ σ; (s) Used terms: aren, ren, cstep, cext, as, aext, aα, ext, astart, cstart, start, cren, astep, paf, aσ, step, pcsf
| ⊦ nounsharedextR(cren, cext, ren) ∧ Πok(ext, cext, ren, cren) ∧ fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf) ∧ frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα) ∧ cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα) → mon(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) |
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) ≠ Π(ext, cext, ren, cren) !(⌜paf⌝ ), 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ) ⊦ |
⊦ σ0 = σ1 ↔ # σ0 = # σ1 ∧ (∀ n. ¬ # σ0 < ⌜n⌝ → σ0.take(n) = σ1.take(n))
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, 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), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) ≠ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) ∨ (∃ n. ¬ ( ¬ # Π(ext, aext, ren, aren) ! (lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) < ⌜n⌝ → Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) .take (n ) = Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n))) ⊦
Used terms: Π(ext, aext, ren, aren) ! (lim (⌜λ n. ⌜repla (step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα) ⌝ ⌝ )), Π(ext, cext, ren, cren) !(⌜paf⌝ )
| ⊦ σ0 = σ1 ↔ # σ0 = # σ1 ∧ (∀ n. ¬ # σ0 < ⌜n⌝ → σ0.take(n) = σ1.take(n)) |
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, 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), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) ≠ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) ∨ (∃ n. ¬ ( ¬ # Π(ext, aext, ren, aren) ! (lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) < ⌜n⌝ → Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) .take (n ) = Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n))) ⊦ |
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), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) ≠ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) ∨ ¬ ( ¬ # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) < ⌜n⌝ → Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) .take (n ) = Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n)) ⊦
| 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), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) ≠ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) ∨ ¬ ( ¬ # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) < ⌜n⌝ → Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) .take (n ) = Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n)) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) ≠ # Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, 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), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) ≠ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) ∨ ¬ ( ¬ # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) < ⌜n⌝ → Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) .take (n ) = Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n)) ⊦
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = # Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, 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), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) ≠ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) ∨ ¬ ( ¬ # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) < ⌜n⌝ → Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) .take (n ) = Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n)) ⊦
Used formulas: # Π(ext, aext, ren, aren) ! (lim (⌜λ n. ⌜repla (step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα) ⌝ ⌝ )) ≠ # Π(ext, cext, ren, cren) !(⌜paf⌝ )
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) ≠ # Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, 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), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) ≠ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) ∨ ¬ ( ¬ # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) < ⌜n⌝ → Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) .take (n ) = Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n)) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) ≠ # Π(ext, cext, ren, cren) !(⌜paf⌝ ), 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ) ⊦
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) ≠ # Π(ext, cext, ren, cren) !(⌜paf⌝ ), 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) ≠ # Π(ext, cext, ren, cren) !(⌜paf⌝ ), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) < # Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, 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), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) ≠ # Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) < # Π(ext, cext, ren, cren) !(⌜paf⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦
Used formulas: # Π(ext, aext, ren, aren) ! (lim (⌜λ n. ⌜repla (step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα) ⌝ ⌝ )) < # Π(ext, cext, ren, cren) !(⌜paf⌝ )
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) ≠ # Π(ext, cext, ren, cren) !(⌜paf⌝ ), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) < # Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, 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), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), ⌜n⌝ = # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) ≠ # Π(ext, cext, ren, cren) !(⌜paf⌝ ), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) < # Π(ext, cext, ren, cren) !(⌜paf⌝ ), 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ) ⊦
Used simplifier rules: Natinf freely generated by ∞, ⌜ ⌝;; ⊦ ¬ ∞ < n∞; (s)
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), ⌜n⌝ = # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) ≠ # Π(ext, cext, ren, cren) !(⌜paf⌝ ), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) < # Π(ext, cext, ren, cren) !(⌜paf⌝ ), 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), ⌜n⌝ = # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), ⌜n⌝ ≠ # Π(ext, cext, ren, cren) !(⌜paf⌝ ), ⌜n⌝ < # Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, 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), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), ⌜n⌝ = # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), ⌜n⌝ ≠ # Π(ext, cext, ren, cren) !(⌜paf⌝ ), ⌜n⌝ < # Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, 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), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦ |
⊦ ¬ # ext !(α) < ⌜n⌝ → (∃ m. ¬ # α < ⌜m⌝ ∧ ext !(α).take(n) = ext !(α.take(m)))
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), ⌜n⌝ = # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), ⌜n⌝ ≠ # Π(ext, cext, ren, cren) !(⌜paf⌝ ), ⌜n⌝ < # Π(ext, cext, ren, cren) !(⌜paf⌝ ), 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜n + 1⌝ → (∃ m. ¬ # ⌜paf⌝ < ⌜m⌝ ∧ Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n + 1) = Π(ext, cext, ren, cren) !(⌜paf⌝ .take(m))), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ) ⊦
Used terms: Π(ext, cext, ren, cren), ⌜paf⌝ , n + 1
| ⊦ ¬ # ext !(α) < ⌜n⌝ → (∃ m. ¬ # α < ⌜m⌝ ∧ ext !(α).take(n) = ext !(α.take(m))) |
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), ⌜n⌝ = # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), ⌜n⌝ ≠ # Π(ext, cext, ren, cren) !(⌜paf⌝ ), ⌜n⌝ < # Π(ext, cext, ren, cren) !(⌜paf⌝ ), 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜n + 1⌝ → (∃ m. ¬ # ⌜paf⌝ < ⌜m⌝ ∧ Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n + 1) = Π(ext, cext, ren, cren) !(⌜paf⌝ .take(m))), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n + 1) = Π(ext, cext, ren, cren) !(paf.take(n0)), ⌜n⌝ = # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), ⌜n⌝ ≠ # Π(ext, cext, ren, cren) !(⌜paf⌝ ), ⌜n⌝ < # Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, 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), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦
Used simplifier rules: ⊦ ⌜nf⌝ .take(n) = nf.take(n); (s) ⊦ ¬ ∞ < n∞; (s) ⊦ # ⌜nf⌝ = ∞; (s) add-comm: ⊦ n∞1 + n∞2 = n∞2 + n∞1; from specification nat-inf add-assoc: ⊦ (n∞ + n∞1) + n∞2 = n∞ + n∞1 + n∞2; from specification nat-inf ⊦ # σ < ⌜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α), Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n + 1) = Π(ext, cext, ren, cren) !(paf.take(n0)), ⌜n⌝ = # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), ⌜n⌝ ≠ # Π(ext, cext, ren, cren) !(⌜paf⌝ ), ⌜n⌝ < # Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, 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), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦ |
⊦ nounsharedextR(cren, cext, ren) ∧ nounsharedextR(aren, aext, ren) ∧ Πok(ext, cext, ren, cren) ∧ Πok(ext, aext, ren, aren) ∧ 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α) → Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)) = Π(ext, cext, ren, cren) !(pal)
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n + 1) = Π(ext, cext, ren, cren) !(paf.take(n0)), ⌜n⌝ = # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), ⌜n⌝ ≠ # Π(ext, cext, ren, cren) !(⌜paf⌝ ), ⌜n⌝ < # Π(ext, cext, ren, cren) !(⌜paf⌝ ), 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), nounsharedextR(cren, cext, ren) ∧ nounsharedextR(aren, aext, ren) ∧ Πok(ext, cext, ren, cren) ∧ Πok(ext, aext, ren, aren) ∧ 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))(⌜as '⌝ + aσ, aα) ∧ ⌜cext !(πra(step, cstep, ren, cren, pcsf.take(n0 + 1), paf.take(n0)))⌝ ⊑ aext !(aα) → Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ) ⊦
Used terms: aren, ren, cstep, cext, aext, aα, ext, astart, cstart, start, paf.take(n0), cren, astep, pcsf.take(n0 + 1), ⌜as '⌝ + aσ, step
| ⊦ nounsharedextR(cren, cext, ren) ∧ nounsharedextR(aren, aext, ren) ∧ Πok(ext, cext, ren, cren) ∧ Πok(ext, aext, ren, aren) ∧ 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α) → Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)) = Π(ext, cext, ren, cren) !(pal) |
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n + 1) = Π(ext, cext, ren, cren) !(paf.take(n0)), ⌜n⌝ = # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), ⌜n⌝ ≠ # Π(ext, cext, ren, cren) !(⌜paf⌝ ), ⌜n⌝ < # Π(ext, cext, ren, cren) !(⌜paf⌝ ), 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), nounsharedextR(cren, cext, ren) ∧ nounsharedextR(aren, aext, ren) ∧ Πok(ext, cext, ren, cren) ∧ Πok(ext, aext, ren, aren) ∧ 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))(⌜as '⌝ + aσ, aα) ∧ ⌜cext !(πra(step, cstep, ren, cren, pcsf.take(n0 + 1), paf.take(n0)))⌝ ⊑ aext !(aα) → Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n + 1) = Π(ext, cext, ren, cren) !(paf.take(n0)), ⌜n⌝ = # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), ⌜n⌝ ≠ # Π(ext, cext, ren, cren) !(⌜paf⌝ ), ⌜n⌝ < # Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, 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), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦
Used simplifier rules: ⊦ fragω(IOAut(start, step, ext))(sf, af) → (frag*(IOAut(start, step, ext))(sf.take(n + 1), af.take(n)) ↔ true); (ss) ⊦ 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: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n + 1) = Π(ext, cext, ren, cren) !(paf.take(n0)), ⌜n⌝ = # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), ⌜n⌝ ≠ # Π(ext, cext, ren, cren) !(⌜paf⌝ ), ⌜n⌝ < # Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, 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), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦ |
Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n + 1) = Π(ext, cext, ren, cren) !(paf.take(n0)), ⌜n⌝ = # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), ⌜n⌝ ≠ # Π(ext, cext, ren, cren) !(⌜paf⌝ ), ⌜n⌝ < # Π(ext, cext, ren, cren) !(⌜paf⌝ ), 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ) ⊦
| Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n + 1) = Π(ext, cext, ren, cren) !(paf.take(n0)), ⌜n⌝ = # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), ⌜n⌝ ≠ # Π(ext, cext, ren, cren) !(⌜paf⌝ ), ⌜n⌝ < # Π(ext, cext, ren, cren) !(⌜paf⌝ ), 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ) ⊦ |
⊦ x = y ↔ # x = # y ∧ (∀ n. n < # x → x[n] = y[n])
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), # Π(ext, cext, ren, cren) !(paf.take(n0)) = # Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n + 1), ⌜n⌝ = # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), ⌜n⌝ ≠ # Π(ext, cext, ren, cren) !(⌜paf⌝ ), ⌜n⌝ < # Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, 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), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∀ n1. n1 < # Π(ext, cext, ren, cren) !(paf.take(n0)) → Π(ext, cext, ren, cren) !(paf.take(n0))[n1] = Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n + 1)[n1] ⊦
Used terms: Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n + 1), Π(ext, cext, ren, cren) !(paf.take(n0))
| ⊦ x = y ↔ # x = # y ∧ (∀ n. n < # x → x[n] = y[n]) |
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), # Π(ext, cext, ren, cren) !(paf.take(n0)) = # Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n + 1), ⌜n⌝ = # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), ⌜n⌝ ≠ # Π(ext, cext, ren, cren) !(⌜paf⌝ ), ⌜n⌝ < # Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, 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), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∀ n1. n1 < # Π(ext, cext, ren, cren) !(paf.take(n0)) → Π(ext, cext, ren, cren) !(paf.take(n0))[n1] = Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n + 1)[n1] ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), # Π(ext, cext, ren, cren) !(paf.take(n0)) = n + 1, ⌜n⌝ = # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), ⌜n⌝ ≠ # Π(ext, cext, ren, cren) !(⌜paf⌝ ), ⌜n⌝ < # Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, 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), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∀ n1. ¬ n < n1 → Π(ext, cext, ren, cren) !(paf.take(n0))[n1] = Π(ext, cext, ren, cren) !(⌜paf⌝ )[n1] ⊦
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, ¬ # σ < ⌜n⌝ ⊦ σ.take(n)[m] = σ[m]; (s) ⊦ m < n → (n ≤ m ↔ false); (s) ⊦ m < n → n ≠ 0; (s) ⊦ # x = 0 ↔ x = []; (s) trans-Nat: ⊦ n < n0 ∧ n0 < n1 → n < n1; (forward) from specification nat-basic lf: ⊦ m < n ∧ n < n0 → m +1 < n0; (forward) from specification nat-basic f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic eqle-one: ⊦ m = n + 1 ∧ n < n0 → m ≤ n0; (forward) from specification nat 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) ⊦ ⌜m + n⌝ = ⌜m⌝ + ⌜n⌝ ; (s) ¬ # σ < ⌜n⌝ ⊦ # σ.take(n) = n; (s)
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), # Π(ext, cext, ren, cren) !(paf.take(n0)) = n + 1, ⌜n⌝ = # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), ⌜n⌝ ≠ # Π(ext, cext, ren, cren) !(⌜paf⌝ ), ⌜n⌝ < # Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, 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), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∀ n1. ¬ n < n1 → Π(ext, cext, ren, cren) !(paf.take(n0))[n1] = Π(ext, cext, ren, cren) !(⌜paf⌝ )[n1] ⊦ |
Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, cext, ren, cren) !(paf.take(n0)) = n + 1, ⌜n⌝ = # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), ⌜n⌝ ≠ # Π(ext, cext, ren, cren) !(⌜paf⌝ ), ⌜n⌝ < # Π(ext, cext, ren, cren) !(⌜paf⌝ ), 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), 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, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∀ n1. ¬ n < n1 → Π(ext, cext, ren, cren) !(paf.take(n0))[n1] = Π(ext, cext, ren, cren) !(⌜paf⌝ )[n1], ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ) ⊦
Used terms: n0
| Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, cext, ren, cren) !(paf.take(n0)) = n + 1, ⌜n⌝ = # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), ⌜n⌝ ≠ # Π(ext, cext, ren, cren) !(⌜paf⌝ ), ⌜n⌝ < # Π(ext, cext, ren, cren) !(⌜paf⌝ ), 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), 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, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∀ n1. ¬ n < n1 → Π(ext, cext, ren, cren) !(paf.take(n0))[n1] = Π(ext, cext, ren, cren) !(⌜paf⌝ )[n1], ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ) ⊦ |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
Used simplifier rules: ⊦ ext !(⌜al⌝ + α2) = ⌜ext !(al)⌝ + ext !(α2); (s) ⊦ #(σ + σ1) = # σ + # σ1; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ ⌜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⌝ + n∞ = ⌜n⌝ ↔ n∞ = ⌜0⌝ ; (s) ⊦ ⌜n⌝ + n∞ = ⌜0⌝ ↔ n∞ = ⌜0⌝ ∧ n = 0; (ws) ⊦ # σ = ⌜0⌝ ↔ σ = []; (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: ⌜repla (step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα) ⌝ , lim (⌜λ n. ⌜repla (step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα) ⌝ ⌝ )
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) ≠ # Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) < # Π(ext, cext, ren, cren) !(⌜paf⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦ |
⊦ ¬ n∞1 < n∞ → (n∞ < n∞1 ↔ n∞ ≠ n∞1)
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) ≠ # Π(ext, cext, ren, cren) !(⌜paf⌝ ), # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) < # Π(ext, cext, ren, cren) !(⌜paf⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ) ⊦
Used terms: # Π(ext, aext, ren, aren) ! (lim (⌜λ n. ⌜repla (step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα) ⌝ ⌝ )), # Π(ext, cext, ren, cren) !(⌜paf⌝ )
| ⊦ ¬ n∞1 < n∞ → (n∞ < n∞1 ↔ n∞ ≠ n∞1) |
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) ≠ # Π(ext, cext, ren, cren) !(⌜paf⌝ ), # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) < # Π(ext, cext, ren, cren) !(⌜paf⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) ≠ # Π(ext, cext, ren, cren) !(⌜paf⌝ ), # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, 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), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦
Used simplifier rules: ⊦ n∞ < n∞0 → ¬ n∞0 < n∞; (s)
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) ≠ # Π(ext, cext, ren, cren) !(⌜paf⌝ ), # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, 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), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ) ⊦
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), ⌜el⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, 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), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦
Used simplifier rules: Stream('a) freely generated by ⌜ ⌝, ⌜ ⌝;; ⊦ # ⌜nf⌝ = ∞; (s) ⊦ ¬ ∞ < n∞; (s)
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), ⌜el⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, 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), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), ⌜el⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), ⌜# el⌝ < # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, 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), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦
Used simplifier rules: ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s)
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), ⌜el⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), ⌜# el⌝ < # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, 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), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦ |
⊦ ¬ # ext !(α) < ⌜n⌝ → (∃ m. ¬ # α < ⌜m⌝ ∧ ext !(α).take(n) = ext !(α.take(m)))
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), ⌜el⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), ⌜# el⌝ < # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜# el⌝ → (∃ m. ¬ # ⌜paf⌝ < ⌜m⌝ ∧ Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(# el) = Π(ext, cext, ren, cren) !(⌜paf⌝ .take(m))), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ) ⊦
Used terms: Π(ext, cext, ren, cren), ⌜paf⌝ , # el
| ⊦ ¬ # ext !(α) < ⌜n⌝ → (∃ m. ¬ # α < ⌜m⌝ ∧ ext !(α).take(n) = ext !(α.take(m))) |
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), ⌜el⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), ⌜# el⌝ < # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜# el⌝ → (∃ m. ¬ # ⌜paf⌝ < ⌜m⌝ ∧ Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(# el) = Π(ext, cext, ren, cren) !(⌜paf⌝ .take(m))), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), ⌜# Π(ext, cext, ren, cren) !(paf.take(n))⌝ < # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, 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), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦
Used simplifier rules: ⊦ # x = n → x.take(n) = x; (s) ⊦ ⌜x⌝ .take(n) = x.take(n); (s) ⊦ ¬ n < n; (s) ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ ⌜nf⌝ .take(n) = nf.take(n); (s) ⊦ ¬ ∞ < n∞; (s) ⊦ # ⌜nf⌝ = ∞; (s)
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), ⌜# Π(ext, cext, ren, cren) !(paf.take(n))⌝ < # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, 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), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦ |
⊦ nounsharedextR(cren, cext, ren) ∧ nounsharedextR(aren, aext, ren) ∧ Πok(ext, cext, ren, cren) ∧ Πok(ext, aext, ren, aren) ∧ 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α) → Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)) = Π(ext, cext, ren, cren) !(pal)
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), ⌜# Π(ext, cext, ren, cren) !(paf.take(n))⌝ < # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), nounsharedextR(cren, cext, ren) ∧ nounsharedextR(aren, aext, ren) ∧ Πok(ext, cext, ren, cren) ∧ Πok(ext, aext, ren, aren) ∧ frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf.take(n + 1), paf.take(n)) ∧ frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα) ∧ ⌜cext !(πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n)))⌝ ⊑ aext !(aα) → Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ) ⊦
Used terms: aren, ren, cstep, cext, aext, aα, ext, astart, cstart, start, paf.take(n), cren, astep, pcsf.take(n + 1), ⌜as '⌝ + aσ, step
| ⊦ nounsharedextR(cren, cext, ren) ∧ nounsharedextR(aren, aext, ren) ∧ Πok(ext, cext, ren, cren) ∧ Πok(ext, aext, ren, aren) ∧ 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α) → Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)) = Π(ext, cext, ren, cren) !(pal) |
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), ⌜# Π(ext, cext, ren, cren) !(paf.take(n))⌝ < # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), nounsharedextR(cren, cext, ren) ∧ nounsharedextR(aren, aext, ren) ∧ Πok(ext, cext, ren, cren) ∧ Πok(ext, aext, ren, aren) ∧ frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf.take(n + 1), paf.take(n)) ∧ frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα) ∧ ⌜cext !(πra(step, cstep, ren, cren, pcsf.take(n + 1), paf.take(n)))⌝ ⊑ aext !(aα) → Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), ⌜# Π(ext, cext, ren, cren) !(paf.take(n))⌝ < # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, 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), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦
Used simplifier rules: ⊦ fragω(IOAut(start, step, ext))(sf, af) → (frag*(IOAut(start, step, ext))(sf.take(n + 1), af.take(n)) ↔ true); (ss) ⊦ 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: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), ⌜# Π(ext, cext, ren, cren) !(paf.take(n))⌝ < # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, 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), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦ |
Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), ⌜# Π(ext, cext, ren, cren) !(paf.take(n))⌝ < # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ) ⊦
| Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), ⌜# Π(ext, cext, ren, cren) !(paf.take(n))⌝ < # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), ⌜# Π(ext, cext, ren, cren) !(paf.take(n))⌝ < # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, 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, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦
Used terms: n
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), ⌜# Π(ext, cext, ren, cren) !(paf.take(n))⌝ < # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, 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, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦ |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), ⌜# Π(ext, cext, ren, cren) !(paf.take(n))⌝ < # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ), ∃ σ1. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + σ1 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦
Used terms: ⌜repla (step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα) ⌝ , lim (⌜λ n. ⌜repla (step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα) ⌝ ⌝ )
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), ⌜# Π(ext, cext, ren, cren) !(paf.take(n))⌝ < # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ), ∃ σ1. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + σ1 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + pα = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), Π(ext, aext, ren, aren) !(pα) ≠ [], frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + pα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ∀ m. ¬ ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + # pα < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + 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 ⊦ # σ = ⌜0⌝ ↔ σ = []; (s) ⊦ ⌜n⌝ < n∞ + ⌜n⌝ ↔ n∞ ≠ ⌜0⌝ ; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ #(σ + σ1) = # σ + # σ1; (s) ⊦ ext !(⌜al⌝ + α2) = ⌜ext !(al)⌝ + ext !(α2); (s)
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + pα = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), Π(ext, aext, ren, aren) !(pα) ≠ [], frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + pα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ∀ m. ¬ ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + # pα < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦ |
Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + pα) = Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + pα = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), Π(ext, aext, ren, aren) !(pα) ≠ [], 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + pα), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∀ m. ¬ ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + # pα < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ) ⊦
Used simplifier rules: ⊦ ext !(⌜al⌝ + α2) = ⌜ext !(al)⌝ + ext !(α2); (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream Used formulas: Π(ext, aext, ren, aren) ! ( ⌜repla (step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα) ⌝ + pα) = Π(ext, aext, ren, aren) ! (lim (⌜λ n. ⌜repla (step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα) ⌝ ⌝ ))
| Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + pα) = Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + pα = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), Π(ext, aext, ren, aren) !(pα) ≠ [], 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + pα), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∀ m. ¬ ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + # pα < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ) ⊦ |
⊦ ext !(⌜al⌝ + α2) = ⌜ext !(al)⌝ + ext !(α2)
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + pα = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ⌜Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα))⌝ + Π(ext, aext, ren, aren) !(pα) = Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), Π(ext, aext, ren, aren) !(pα) ≠ [], frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + pα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ∀ m. ¬ ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + # pα < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦
Used terms: Π(ext, aext, ren, aren), repla (step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα), pα
| ⊦ ext !(⌜al⌝ + α2) = ⌜ext !(al)⌝ + ext !(α2) |
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + pα = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ⌜Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα))⌝ + Π(ext, aext, ren, aren) !(pα) = Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), Π(ext, aext, ren, aren) !(pα) ≠ [], frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + pα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ∀ m. ¬ ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + # pα < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦ |
Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), ⌜Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα))⌝ + Π(ext, aext, ren, aren) !(pα) = Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + pα = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), Π(ext, aext, ren, aren) !(pα) ≠ [], 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + pα), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∀ m. ¬ ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + # pα < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ) ⊦
Used formulas: Π(ext, aext, ren, aren) !(pα) = []
| Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), ⌜Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα))⌝ + Π(ext, aext, ren, aren) !(pα) = Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + pα = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), Π(ext, aext, ren, aren) !(pα) ≠ [], 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + pα), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∀ m. ¬ ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + # pα < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ) ⊦ |
⊦ ext !(α) = ⌜e '⌝ + β ↔ (∃ al, a, α0. α = ⌜al⌝ + ⌜a '⌝ + α0 ∧ ext(a) = Some(e) ∧ ext !(⌜al⌝ ) = [] ∧ ext !(α0) = β)
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + pα = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ⌜Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα))⌝ + Π(ext, aext, ren, aren) !(pα) = Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), Π(ext, aext, ren, aren) !(pα) ≠ [], frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + pα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), Π(ext, aext, ren, aren) !(pα) = ⌜hd(Π(ext, aext, ren, aren) !(pα)) '⌝ + tl(Π(ext, aext, ren, aren) !(pα)) ↔ (∃ al, pa, α0. pα = ⌜al⌝ + ⌜pa '⌝ + α0 ∧ Π(ext, aext, ren, aren)(pa) = Some(hd(Π(ext, aext, ren, aren) !(pα))) ∧ Π(ext, aext, ren, aren) !(⌜al⌝ ) = [] ∧ Π(ext, aext, ren, aren) !(α0) = tl(Π(ext, aext, ren, aren) !(pα))), ∀ m. ¬ ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + # pα < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦
Used terms: Π(ext, aext, ren, aren), pα, hd(Π(ext, aext, ren, aren) !(pα)), tl(Π(ext, aext, ren, aren) !(pα))
| ⊦ ext !(α) = ⌜e '⌝ + β ↔ (∃ al, a, α0. α = ⌜al⌝ + ⌜a '⌝ + α0 ∧ ext(a) = Some(e) ∧ ext !(⌜al⌝ ) = [] ∧ ext !(α0) = β) |
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + pα = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ⌜Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα))⌝ + Π(ext, aext, ren, aren) !(pα) = Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), Π(ext, aext, ren, aren) !(pα) ≠ [], frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + pα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), Π(ext, aext, ren, aren) !(pα) = ⌜hd(Π(ext, aext, ren, aren) !(pα)) '⌝ + tl(Π(ext, aext, ren, aren) !(pα)) ↔ (∃ al, pa, α0. pα = ⌜al⌝ + ⌜pa '⌝ + α0 ∧ Π(ext, aext, ren, aren)(pa) = Some(hd(Π(ext, aext, ren, aren) !(pα))) ∧ Π(ext, aext, ren, aren) !(⌜al⌝ ) = [] ∧ Π(ext, aext, ren, aren) !(α0) = tl(Π(ext, aext, ren, aren) !(pα))), ∀ m. ¬ ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + # pα < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦ |
Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(pα) = e + σ0, ⌜Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα))⌝ + Π(ext, aext, ren, aren) !(pα) = Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + pα = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), Π(ext, aext, ren, aren) !(pα) ≠ [], 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + pα), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), Π(ext, aext, ren, aren) !(pα) = ⌜e '⌝ + σ0 ↔ (∃ al, pa, α0. pα = ⌜al⌝ + ⌜pa '⌝ + α0 ∧ Π(ext, aext, ren, aren)(pa) = Some(e) ∧ Π(ext, aext, ren, aren) !(⌜al⌝ ) = [] ∧ Π(ext, aext, ren, aren) !(α0) = σ0), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∀ m. ¬ ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + # pα < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ) ⊦
Used simplifier rules: ⊦ σ ≠ [] → (a = hd(σ) ∧ σ0 = tl(σ) ↔ σ = a + σ0); (elim) Used terms: Π(ext, aext, ren, aren) !(pα), e, σ0
| Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(pα) = e + σ0, ⌜Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα))⌝ + Π(ext, aext, ren, aren) !(pα) = Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + pα = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), Π(ext, aext, ren, aren) !(pα) ≠ [], 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + pα), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), Π(ext, aext, ren, aren) !(pα) = ⌜e '⌝ + σ0 ↔ (∃ al, pa, α0. pα = ⌜al⌝ + ⌜pa '⌝ + α0 ∧ Π(ext, aext, ren, aren)(pa) = Some(e) ∧ Π(ext, aext, ren, aren) !(⌜al⌝ ) = [] ∧ Π(ext, aext, ren, aren) !(α0) = σ0), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∀ m. ¬ ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + # pα < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ) ⊦ |
Π(ext, aext, ren, aren) !(pα) = e + σ0, cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), Π(ext, aext, ren, aren) !(pα) = ⌜e '⌝ + σ0, ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + pα = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ⌜Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα))⌝ + Π(ext, aext, ren, aren) !(pα) = Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), Π(ext, aext, ren, aren) !(pα) ≠ [], frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + pα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ∀ m. ¬ ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + # pα < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∃ al, pa, α0. pα = ⌜al⌝ + ⌜pa '⌝ + α0 ∧ Π(ext, aext, ren, aren)(pa) = Some(e) ∧ Π(ext, aext, ren, aren) !(⌜al⌝ ) = [] ∧ Π(ext, aext, ren, aren) !(α0) = σ0 ⊦
Used simplifier rules: ⊦ a + σ = ⌜a '⌝ + σ; (s)
| Π(ext, aext, ren, aren) !(pα) = e + σ0, cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), Π(ext, aext, ren, aren) !(pα) = ⌜e '⌝ + σ0, ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + pα = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ⌜Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα))⌝ + Π(ext, aext, ren, aren) !(pα) = Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), Π(ext, aext, ren, aren) !(pα) ≠ [], frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + pα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ∀ m. ¬ ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + # pα < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∃ al, pa, α0. pα = ⌜al⌝ + ⌜pa '⌝ + α0 ∧ Π(ext, aext, ren, aren)(pa) = Some(e) ∧ Π(ext, aext, ren, aren) !(⌜al⌝ ) = [] ∧ Π(ext, aext, ren, aren) !(α0) = σ0 ⊦ |
Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(pal) = [], ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), (Some(e) = None ⊃ [];⌜Some(e).get '⌝ ) + Π(ext, aext, ren, aren) !(pα0) = ⌜e '⌝ + Π(ext, aext, ren, aren) !(pα0), Π(ext, aext, ren, aren)(pa) = Some(e), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∀ m. ¬ ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜# pal⌝ + ⌜1⌝ + # pα0 < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ) ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ # x = # y → (⌜x⌝ + σ = ⌜y⌝ + σ0 ↔ x = y ∧ σ = σ0); (s) ⊦ [] + σ = σ; (s) ⊦ ⌜[]⌝ = []; (s) ⊦ ⌜a '⌝ + σ ≠ []; (s) ⊦ oe + β = (oe = None ⊃ [];⌜oe.get '⌝ ) + β; (s) ⊦ ext !(⌜a '⌝ + α) = ext(a) + ext !(α); (s) ⊦ ext !(⌜al⌝ + α2) = ⌜ext !(al)⌝ + ext !(α2); (s) add-assoc: ⊦ (n∞ + n∞1) + n∞2 = n∞ + n∞1 + n∞2; from specification nat-inf ⊦ # a ' = 0 +1; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ #(σ + σ1) = # σ + # σ1; (s) ⊦ a + σ = ⌜a '⌝ + σ; (s) ⊦ ⌜x⌝ = [] ↔ x = []; (s) ⊦ ext !(⌜al⌝ ) = ⌜ext !(al)⌝ ; (s)
| Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(pal) = [], ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), (Some(e) = None ⊃ [];⌜Some(e).get '⌝ ) + Π(ext, aext, ren, aren) !(pα0) = ⌜e '⌝ + Π(ext, aext, ren, aren) !(pα0), Π(ext, aext, ren, aren)(pa) = Some(e), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∀ m. ¬ ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜# pal⌝ + ⌜1⌝ + # pα0 < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ) ⊦ |
Π(ext, aext, ren, aren) !(pal) = [], cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), (Some(e) = None ⊃ [];⌜Some(e).get '⌝ ) + Π(ext, aext, ren, aren) !(pα0) = ⌜e '⌝ + Π(ext, aext, ren, aren) !(pα0), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), Π(ext, aext, ren, aren)(pa) = Some(e), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, 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, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜# pal⌝ + ⌜1⌝ + # pα0 < ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα) + # pal + 1⌝ → (∃ n0. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) .take (# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα) + # pal + 1 ) ⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦
Used terms: # repla (step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα) + # pal + 1
| Π(ext, aext, ren, aren) !(pal) = [], cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), (Some(e) = None ⊃ [];⌜Some(e).get '⌝ ) + Π(ext, aext, ren, aren) !(pα0) = ⌜e '⌝ + Π(ext, aext, ren, aren) !(pα0), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), Π(ext, aext, ren, aren)(pa) = Some(e), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, 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, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜# pal⌝ + ⌜1⌝ + # pα0 < ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα) + # pal + 1⌝ → (∃ n0. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) .take (# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα) + # pal + 1 ) ⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦ |
Π(ext, aext, ren, aren) !(pal) = [], cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), (Some(e) = None ⊃ [];⌜Some(e).get '⌝ ) + Π(ext, aext, ren, aren) !(pα0) = ⌜e '⌝ + Π(ext, aext, ren, aren) !(pα0), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), Π(ext, aext, ren, aren)(pa) = Some(e), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, 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, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ , ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ⌜x + y⌝ = ⌜x⌝ + ⌜y⌝ ; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ (⌜a '⌝ + σ).take(1) = a '; (s) ⊦ (⌜x⌝ + σ).take(m + # x) = x + σ.take(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∞ + n∞1 < n∞1; (s) ⊦ ⌜n⌝ + n∞1 < ⌜n⌝ + n∞2 ↔ n∞1 < n∞2; (s) ⊦ n∞ + ⌜0⌝ = n∞; (s) ⊦ m ≤ n → (⌜(* m)⌝ + n∞2 < ⌜(* n)⌝ + n∞1 ↔ n∞2 < ⌜n - m⌝ + n∞1); (s) ⊦ ⌜m + n⌝ = ⌜m⌝ + ⌜n⌝ ; (s)
| Π(ext, aext, ren, aren) !(pal) = [], cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), (Some(e) = None ⊃ [];⌜Some(e).get '⌝ ) + Π(ext, aext, ren, aren) !(pα0) = ⌜e '⌝ + Π(ext, aext, ren, aren) !(pα0), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), Π(ext, aext, ren, aren)(pa) = Some(e), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, 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, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ , ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦ |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(pal) = [], ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), (Some(e) = None ⊃ [];⌜Some(e).get '⌝ ) + Π(ext, aext, ren, aren) !(pα0) = ⌜e '⌝ + Π(ext, aext, ren, aren) !(pα0), Π(ext, aext, ren, aren)(pa) = Some(e), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∃ σ1. (⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ ) + σ1 = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ ⊦
Used terms: ⌜repla (step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα) ⌝ + ⌜pal⌝ + ⌜pa '⌝ , ⌜repla (step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα) ⌝
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(pal) = [], ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), (Some(e) = None ⊃ [];⌜Some(e).get '⌝ ) + Π(ext, aext, ren, aren) !(pα0) = ⌜e '⌝ + Π(ext, aext, ren, aren) !(pα0), Π(ext, aext, ren, aren)(pa) = Some(e), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∃ σ1. (⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ ) + σ1 = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ ⊦ |
Π(ext, aext, ren, aren) !(pal) = [], cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), (⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ ) + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ , (Some(e) = None ⊃ [];⌜Some(e).get '⌝ ) + Π(ext, aext, ren, aren) !(pα0) = ⌜e '⌝ + Π(ext, aext, ren, aren) !(pα0), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), Π(ext, aext, ren, aren)(pa) = Some(e), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦
| Π(ext, aext, ren, aren) !(pal) = [], cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), (⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ ) + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ , (Some(e) = None ⊃ [];⌜Some(e).get '⌝ ) + Π(ext, aext, ren, aren) !(pα0) = ⌜e '⌝ + Π(ext, aext, ren, aren) !(pα0), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), Π(ext, aext, ren, aren)(pa) = Some(e), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦ |
Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(pal) = [], ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), (Some(e) = None ⊃ [];⌜Some(e).get '⌝ ) + Π(ext, aext, ren, aren) !(pα0) = ⌜e '⌝ + Π(ext, aext, ren, aren) !(pα0), (⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ ) + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ , Π(ext, aext, ren, aren)(pa) = Some(e), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), 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, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦
Used terms: n0
| Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(pal) = [], ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), (Some(e) = None ⊃ [];⌜Some(e).get '⌝ ) + Π(ext, aext, ren, aren) !(pα0) = ⌜e '⌝ + Π(ext, aext, ren, aren) !(pα0), (⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ ) + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ , Π(ext, aext, ren, aren)(pa) = Some(e), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), 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, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦ |
Π(ext, aext, ren, aren) !(pal) = [], cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), (⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ ) + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ , (Some(e) = None ⊃ [];⌜Some(e).get '⌝ ) + Π(ext, aext, ren, aren) !(pα0) = ⌜e '⌝ + Π(ext, aext, ren, aren) !(pα0), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), Π(ext, aext, ren, aren)(pa) = Some(e), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, 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, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 ⊦
| Π(ext, aext, ren, aren) !(pal) = [], cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), (⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ ) + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ , (Some(e) = None ⊃ [];⌜Some(e).get '⌝ ) + Π(ext, aext, ren, aren) !(pα0) = ⌜e '⌝ + Π(ext, aext, ren, aren) !(pα0), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), Π(ext, aext, ren, aren)(pa) = Some(e), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, 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, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 ⊦ |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(pal) = [], ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), (Some(e) = None ⊃ [];⌜Some(e).get '⌝ ) + Π(ext, aext, ren, aren) !(pα0) = ⌜e '⌝ + Π(ext, aext, ren, aren) !(pα0), (⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ ) + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ , Π(ext, aext, ren, aren)(pa) = Some(e), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ∃ σ1. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + σ1 = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 ⊦
Used terms: ⌜repla (step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα) ⌝ , ⌜repla (step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα) ⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(pal) = [], ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), (Some(e) = None ⊃ [];⌜Some(e).get '⌝ ) + Π(ext, aext, ren, aren) !(pα0) = ⌜e '⌝ + Π(ext, aext, ren, aren) !(pα0), (⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ ) + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ , Π(ext, aext, ren, aren)(pa) = Some(e), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ∃ σ1. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + σ1 = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 ⊦ |
Π(ext, aext, ren, aren) !(pal) = [], cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα1 = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0, (⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ ) + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ , (Some(e) = None ⊃ [];⌜Some(e).get '⌝ ) + Π(ext, aext, ren, aren) !(pα0) = ⌜e '⌝ + Π(ext, aext, ren, aren) !(pα0), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), Π(ext, aext, ren, aren)(pa) = Some(e), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren) ⊦
| Π(ext, aext, ren, aren) !(pal) = [], cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα1 = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0, (⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ ) + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ , (Some(e) = None ⊃ [];⌜Some(e).get '⌝ ) + Π(ext, aext, ren, aren) !(pα0) = ⌜e '⌝ + Π(ext, aext, ren, aren) !(pα0), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), Π(ext, aext, ren, aren)(pa) = Some(e), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren) ⊦ |
⊦ nounsharedextR(cren, cext, ren) ∧ nounsharedextR(aren, aext, ren) ∧ Πok(ext, cext, ren, cren) ∧ Πok(ext, aext, ren, aren) ∧ 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α) → Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)) = Π(ext, cext, ren, cren) !(pal)
Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(pal) = [], ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), (Some(e) = None ⊃ [];⌜Some(e).get '⌝ ) + Π(ext, aext, ren, aren) !(pα0) = ⌜e '⌝ + Π(ext, aext, ren, aren) !(pα0), (⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ ) + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ , ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα1 = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0, Π(ext, aext, ren, aren)(pa) = Some(e), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), nounsharedextR(cren, cext, ren) ∧ nounsharedextR(aren, aext, ren) ∧ Πok(ext, cext, ren, cren) ∧ Πok(ext, aext, ren, aren) ∧ 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))(⌜as '⌝ + aσ, aα) ∧ ⌜cext !(πra(step, cstep, ren, cren, pcsf.take(n0 + 1), paf.take(n0)))⌝ ⊑ aext !(aα) → Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)) ⊦
Used terms: aren, ren, cstep, cext, aext, aα, ext, astart, cstart, start, paf.take(n0), cren, astep, pcsf.take(n0 + 1), ⌜as '⌝ + aσ, step
| ⊦ nounsharedextR(cren, cext, ren) ∧ nounsharedextR(aren, aext, ren) ∧ Πok(ext, cext, ren, cren) ∧ Πok(ext, aext, ren, aren) ∧ 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α) → Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)) = Π(ext, cext, ren, cren) !(pal) |
| Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(pal) = [], ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), (Some(e) = None ⊃ [];⌜Some(e).get '⌝ ) + Π(ext, aext, ren, aren) !(pα0) = ⌜e '⌝ + Π(ext, aext, ren, aren) !(pα0), (⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ ) + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ , ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα1 = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0, Π(ext, aext, ren, aren)(pa) = Some(e), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), nounsharedextR(cren, cext, ren) ∧ nounsharedextR(aren, aext, ren) ∧ Πok(ext, cext, ren, cren) ∧ Πok(ext, aext, ren, aren) ∧ 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))(⌜as '⌝ + aσ, aα) ∧ ⌜cext !(πra(step, cstep, ren, cren, pcsf.take(n0 + 1), paf.take(n0)))⌝ ⊑ aext !(aα) → Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)) ⊦ |
Π(ext, aext, ren, aren) !(pal) = [], cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα1 = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0, (⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ ) + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ , (Some(e) = None ⊃ [];⌜Some(e).get '⌝ ) + Π(ext, aext, ren, aren) !(pα0) = ⌜e '⌝ + Π(ext, aext, ren, aren) !(pα0), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), Π(ext, aext, ren, aren)(pa) = Some(e), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren) ⊦
Used simplifier rules: ⊦ fragω(IOAut(start, step, ext))(sf, af) → (frag*(IOAut(start, step, ext))(sf.take(n + 1), af.take(n)) ↔ true); (ss) ⊦ 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: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic
| Π(ext, aext, ren, aren) !(pal) = [], cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα1 = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0, (⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ ) + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ , (Some(e) = None ⊃ [];⌜Some(e).get '⌝ ) + Π(ext, aext, ren, aren) !(pα0) = ⌜e '⌝ + Π(ext, aext, ren, aren) !(pα0), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), Π(ext, aext, ren, aren)(pa) = Some(e), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren) ⊦ |
Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(pal) = [], ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), (Some(e) = None ⊃ [];⌜Some(e).get '⌝ ) + Π(ext, aext, ren, aren) !(pα0) = ⌜e '⌝ + Π(ext, aext, ren, aren) !(pα0), (⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ ) + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ , ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα1 = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0, Π(ext, aext, ren, aren)(pa) = Some(e), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), Π(ext, cext, ren, cren) !(⌜paf.take(n0)⌝ ) ⊑ Π(ext, cext, ren, cren) !(⌜paf⌝ ) ⊦
Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(pal) = [], ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), (Some(e) = None ⊃ [];⌜Some(e).get '⌝ ) + Π(ext, aext, ren, aren) !(pα0) = ⌜e '⌝ + Π(ext, aext, ren, aren) !(pα0), (⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ ) + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ , ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα1 = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0, Π(ext, aext, ren, aren)(pa) = Some(e), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(ext, cext, ren, cren) !(⌜paf.take(n0)⌝ ) ⊑ Π(ext, cext, ren, cren) !(⌜paf⌝ ) ⊦
Used formulas: Π(ext, cext, ren, cren) !(⌜paf.take(n0)⌝ ) ⊑ Π(ext, cext, ren, cren) !(⌜paf⌝ )
| Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(pal) = [], ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), (Some(e) = None ⊃ [];⌜Some(e).get '⌝ ) + Π(ext, aext, ren, aren) !(pα0) = ⌜e '⌝ + Π(ext, aext, ren, aren) !(pα0), (⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ ) + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ , ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα1 = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0, Π(ext, aext, ren, aren)(pa) = Some(e), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), Π(ext, cext, ren, cren) !(⌜paf.take(n0)⌝ ) ⊑ Π(ext, cext, ren, cren) !(⌜paf⌝ ) ⊦ |
Π(ext, aext, ren, aren) !(pal) = [], cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα1 = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0, (⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ ) + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ , (Some(e) = None ⊃ [];⌜Some(e).get '⌝ ) + Π(ext, aext, ren, aren) !(pα0) = ⌜e '⌝ + Π(ext, aext, ren, aren) !(pα0), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), Π(ext, aext, ren, aren)(pa) = Some(e), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ⌜Π(ext, cext, ren, cren) !(paf.take(n0))⌝ ⊑ ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ ⊦
Used simplifier rules: ⊦ ext !(⌜al⌝ ) = ⌜ext !(al)⌝ ; (s)
| Π(ext, aext, ren, aren) !(pal) = [], cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα1 = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0, (⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ ) + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ , (Some(e) = None ⊃ [];⌜Some(e).get '⌝ ) + Π(ext, aext, ren, aren) !(pα0) = ⌜e '⌝ + Π(ext, aext, ren, aren) !(pα0), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), Π(ext, aext, ren, aren)(pa) = Some(e), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ⌜Π(ext, cext, ren, cren) !(paf.take(n0))⌝ ⊑ ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ ⊦ |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(pal) = [], ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), (Some(e) = None ⊃ [];⌜Some(e).get '⌝ ) + Π(ext, aext, ren, aren) !(pα0) = ⌜e '⌝ + Π(ext, aext, ren, aren) !(pα0), (⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ ) + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ , ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα1 = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0, Π(ext, aext, ren, aren)(pa) = Some(e), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ∃ σ1. ⌜Π(ext, cext, ren, cren) !(paf.take(n0))⌝ + σ1 = ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ ⊦
Used terms: ⌜Π(ext, cext, ren, cren) !(paf.take(n0))⌝ , ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(pal) = [], ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), (Some(e) = None ⊃ [];⌜Some(e).get '⌝ ) + Π(ext, aext, ren, aren) !(pα0) = ⌜e '⌝ + Π(ext, aext, ren, aren) !(pα0), (⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ ) + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ , ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα1 = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0, Π(ext, aext, ren, aren)(pa) = Some(e), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ∃ σ1. ⌜Π(ext, cext, ren, cren) !(paf.take(n0))⌝ + σ1 = ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ ⊦ |
Π(ext, aext, ren, aren) !(pal) = [], cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), ⌜Π(ext, cext, ren, cren) !(paf.take(n0))⌝ + β = ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ , ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα1 = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0, (⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ ) + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ , (Some(e) = None ⊃ [];⌜Some(e).get '⌝ ) + Π(ext, aext, ren, aren) !(pα0) = ⌜e '⌝ + Π(ext, aext, ren, aren) !(pα0), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), Π(ext, aext, ren, aren)(pa) = Some(e), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren) ⊦
| Π(ext, aext, ren, aren) !(pal) = [], cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), ⌜Π(ext, cext, ren, cren) !(paf.take(n0))⌝ + β = ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ , ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα1 = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0, (⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ ) + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ , (Some(e) = None ⊃ [];⌜Some(e).get '⌝ ) + Π(ext, aext, ren, aren) !(pα0) = ⌜e '⌝ + Π(ext, aext, ren, aren) !(pα0), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), Π(ext, aext, ren, aren)(pa) = Some(e), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren) ⊦ |
Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(pal) = [], ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), (Some(e) = None ⊃ [];⌜Some(e).get '⌝ ) + Π(ext, aext, ren, aren) !(pα0) = ⌜e '⌝ + Π(ext, aext, ren, aren) !(pα0), (⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ ) + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ , ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα1 = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0, ⌜Π(ext, cext, ren, cren) !(paf.take(n0))⌝ + β = ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ , Π(ext, aext, ren, aren)(pa) = Some(e), β = ⌜el⌝ , ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren) ⊦
Used simplifier rules: Stream('a) freely generated by ⌜ ⌝, ⌜ ⌝;; ⊦ ⌜x⌝ ≠ σ + ⌜nf0⌝ ; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream
| Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(pal) = [], ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), (Some(e) = None ⊃ [];⌜Some(e).get '⌝ ) + Π(ext, aext, ren, aren) !(pα0) = ⌜e '⌝ + Π(ext, aext, ren, aren) !(pα0), (⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ ) + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ , ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα1 = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0, ⌜Π(ext, cext, ren, cren) !(paf.take(n0))⌝ + β = ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ , Π(ext, aext, ren, aren)(pa) = Some(e), β = ⌜el⌝ , ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren) ⊦ |
Π(ext, aext, ren, aren) !(pal) = [], cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα1 = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0, (⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ ) + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ , (Some(e) = None ⊃ [];⌜Some(e).get '⌝ ) + Π(ext, aext, ren, aren) !(pα0) = ⌜e '⌝ + Π(ext, aext, ren, aren) !(pα0), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), Π(ext, cext, ren, cren) !(paf.take(n0)) + el = Π(ext, cext, ren, cren) !(paf.take(n)), Π(ext, aext, ren, aren)(pa) = Some(e), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren) ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ ⌜x⌝ + ⌜y⌝ = ⌜z⌝ ↔ x + y = z; (s)
| Π(ext, aext, ren, aren) !(pal) = [], cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα1 = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0, (⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ ) + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ , (Some(e) = None ⊃ [];⌜Some(e).get '⌝ ) + Π(ext, aext, ren, aren) !(pα0) = ⌜e '⌝ + Π(ext, aext, ren, aren) !(pα0), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), Π(ext, cext, ren, cren) !(paf.take(n0)) + el = Π(ext, cext, ren, cren) !(paf.take(n)), Π(ext, aext, ren, aren)(pa) = Some(e), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren) ⊦ |
Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(pal) = [], Π(ext, aext, ren, aren) ! ((⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ ) + pα) = Π(ext, aext, ren, aren) !(⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ ), Π(ext, cext, ren, cren) !(paf.take(n0)) + el = Π(ext, cext, ren, cren) !(paf.take(n)), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), (Some(e) = None ⊃ [];⌜Some(e).get '⌝ ) + Π(ext, aext, ren, aren) !(pα0) = ⌜e '⌝ + Π(ext, aext, ren, aren) !(pα0), (⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ ) + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ , ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα1 = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0, Π(ext, aext, ren, aren)(pa) = Some(e), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren) ⊦
Used formulas: Π(ext, aext, ren, aren) ! ( ( ⌜repla (step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα) ⌝ + ⌜pal⌝ + ⌜pa '⌝ ) + pα) = Π(ext, aext, ren, aren) ! (⌜repla (step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα) ⌝ )
| Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(pal) = [], Π(ext, aext, ren, aren) ! ((⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ ) + pα) = Π(ext, aext, ren, aren) !(⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ ), Π(ext, cext, ren, cren) !(paf.take(n0)) + el = Π(ext, cext, ren, cren) !(paf.take(n)), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), (Some(e) = None ⊃ [];⌜Some(e).get '⌝ ) + Π(ext, aext, ren, aren) !(pα0) = ⌜e '⌝ + Π(ext, aext, ren, aren) !(pα0), (⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ ) + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ , ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα1 = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0, Π(ext, aext, ren, aren)(pa) = Some(e), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren) ⊦ |
⊦ ext !(⌜al⌝ + α2) = ⌜ext !(al)⌝ + ext !(α2)
Π(ext, aext, ren, aren) !(pal) = [], cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα1 = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0, (⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ ) + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ , (Some(e) = None ⊃ [];⌜Some(e).get '⌝ ) + Π(ext, aext, ren, aren) !(pα0) = ⌜e '⌝ + Π(ext, aext, ren, aren) !(pα0), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), Π(ext, cext, ren, cren) !(paf.take(n0)) + el = Π(ext, cext, ren, cren) !(paf.take(n)), ⌜Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα))⌝ + Π(ext, aext, ren, aren) !(⌜pal⌝ + ⌜pa '⌝ + pα) = Π(ext, aext, ren, aren) !(⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ ), Π(ext, aext, ren, aren)(pa) = Some(e), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren) ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream Used terms: Π(ext, aext, ren, aren), repla (step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα), ⌜pal⌝ + ⌜pa '⌝ + pα
| ⊦ ext !(⌜al⌝ + α2) = ⌜ext !(al)⌝ + ext !(α2) |
| Π(ext, aext, ren, aren) !(pal) = [], cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα1 = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0, (⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ ) + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ , (Some(e) = None ⊃ [];⌜Some(e).get '⌝ ) + Π(ext, aext, ren, aren) !(pα0) = ⌜e '⌝ + Π(ext, aext, ren, aren) !(pα0), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), Π(ext, cext, ren, cren) !(paf.take(n0)) + el = Π(ext, cext, ren, cren) !(paf.take(n)), ⌜Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα))⌝ + Π(ext, aext, ren, aren) !(⌜pal⌝ + ⌜pa '⌝ + pα) = Π(ext, aext, ren, aren) !(⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ ), Π(ext, aext, ren, aren)(pa) = Some(e), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren) ⊦ |
Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(pal) = [], Π(ext, cext, ren, cren) !(paf.take(n)) + e ' + Π(ext, aext, ren, aren) !(pal2) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, cext, ren, cren) !(paf.take(n0)) + el = Π(ext, cext, ren, cren) !(paf.take(n)), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα) + pal + pa ' + pal2 = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα1 = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0, Π(ext, aext, ren, aren)(pa) = Some(e), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ a ∈ a0 ' + x ↔ a = a0 ∨ a ∈ x; (s) ⊦ ⌜x⌝ .l = x; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ (⌜x⌝ + ⌜y⌝ ).l = x + y; (s) ⊦ [] + σ = σ; (s) ⊦ ⌜[]⌝ = []; (s) ⊦ (⌜x⌝ + ⌜y⌝ + ⌜y0⌝ ).l = x + y + y0; (s) ⊦ ⌜x⌝ = ⌜x0⌝ ↔ x = x0; (s) ⊦ Some(a).get = a; (s) ⊦ Some(a) ≠ None; (s) ⊦ ext !(⌜al⌝ ) = ⌜ext !(al)⌝ ; (s) in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list ⊦ finp(σ) ↔ (∃ x. ⌜x⌝ = σ); (as) ⊦ finp(⌜x⌝ ); (s) ⊦ σ0 + σ = ⌜z⌝ ↔ finp(σ0) ∧ finp(σ) ∧ σ0.l + σ.l = z; (as) ⊦ # x = # y → (⌜x⌝ + σ = ⌜y⌝ + σ0 ↔ x = y ∧ σ = σ0); (s) ⊦ oe + β = (oe = None ⊃ [];⌜oe.get '⌝ ) + β; (s) ⊦ ext !(⌜a '⌝ + α) = ext(a) + ext !(α); (s) ⊦ ext !(⌜al⌝ + α2) = ⌜ext !(al)⌝ + ext !(α2); (s)
| Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(pal) = [], Π(ext, cext, ren, cren) !(paf.take(n)) + e ' + Π(ext, aext, ren, aren) !(pal2) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, cext, ren, cren) !(paf.take(n0)) + el = Π(ext, cext, ren, cren) !(paf.take(n)), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα) + pal + pa ' + pal2 = repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα1 = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0, Π(ext, aext, ren, aren)(pa) = Some(e), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren) ⊦ |
Used simplifier rules: ⊦ x = x + y ↔ y = []; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) ⊦ a ' ≠ []; (s) a: ⊦ (x + y) + z = x + y + z; from specification list
| Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(pal) = [], ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), (Some(e) = None ⊃ [];⌜Some(e).get '⌝ ) + Π(ext, aext, ren, aren) !(pα0) = ⌜e '⌝ + Π(ext, aext, ren, aren) !(pα0), (⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ ) + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ , ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα1 = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0, Π(ext, aext, ren, aren)(pa) = Some(e), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(ext, cext, ren, cren) !(⌜paf.take(n0)⌝ ) ⊑ Π(ext, cext, ren, cren) !(⌜paf⌝ ) ⊦ |
Π(ext, aext, ren, aren) !(pal) = [], cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα1 = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0, (⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ ) + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ , (Some(e) = None ⊃ [];⌜Some(e).get '⌝ ) + Π(ext, aext, ren, aren) !(pα0) = ⌜e '⌝ + Π(ext, aext, ren, aren) !(pα0), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), Π(ext, aext, ren, aren)(pa) = Some(e), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ ⌜Π(ext, cext, ren, cren) !(paf.take(n0))⌝ ⊑ ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ ⊦
Used simplifier rules: ⊦ ext !(⌜al⌝ ) = ⌜ext !(al)⌝ ; (s)
| Π(ext, aext, ren, aren) !(pal) = [], cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα1 = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0, (⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ ) + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ , (Some(e) = None ⊃ [];⌜Some(e).get '⌝ ) + Π(ext, aext, ren, aren) !(pα0) = ⌜e '⌝ + Π(ext, aext, ren, aren) !(pα0), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), Π(ext, aext, ren, aren)(pa) = Some(e), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ ⌜Π(ext, cext, ren, cren) !(paf.take(n0))⌝ ⊑ ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ ⊦ |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(pal) = [], ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), (Some(e) = None ⊃ [];⌜Some(e).get '⌝ ) + Π(ext, aext, ren, aren) !(pα0) = ⌜e '⌝ + Π(ext, aext, ren, aren) !(pα0), (⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ ) + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ , ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα1 = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0, Π(ext, aext, ren, aren)(pa) = Some(e), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ∀ σ1. ⌜Π(ext, cext, ren, cren) !(paf.take(n0))⌝ + σ1 ≠ ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ ⊦
Used terms: ⌜Π(ext, cext, ren, cren) !(paf.take(n0))⌝ , ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(pal) = [], ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), (Some(e) = None ⊃ [];⌜Some(e).get '⌝ ) + Π(ext, aext, ren, aren) !(pα0) = ⌜e '⌝ + Π(ext, aext, ren, aren) !(pα0), (⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ ) + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ , ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα1 = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0, Π(ext, aext, ren, aren)(pa) = Some(e), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf⌝ ), 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ∀ σ1. ⌜Π(ext, cext, ren, cren) !(paf.take(n0))⌝ + σ1 ≠ ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ ⊦ |
⊦ ⌜nf.take(n)⌝ + ⌜nf.drop(n)⌝ = ⌜nf⌝
Π(ext, aext, ren, aren) !(pal) = [], cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf.take(n0)⌝ + ⌜paf.drop(n0)⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα1 = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0, (⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ ) + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ , (Some(e) = None ⊃ [];⌜Some(e).get '⌝ ) + Π(ext, aext, ren, aren) !(pα0) = ⌜e '⌝ + Π(ext, aext, ren, aren) !(pα0), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), Π(ext, aext, ren, aren)(pa) = Some(e), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf.take(n0)⌝ + ⌜paf.drop(n0)⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ∀ σ1. ⌜Π(ext, cext, ren, cren) !(paf.take(n0))⌝ + σ1 ≠ ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ ⊦
Used terms: paf, n0
| ⊦ ⌜nf.take(n)⌝ + ⌜nf.drop(n)⌝ = ⌜nf⌝ |
| Π(ext, aext, ren, aren) !(pal) = [], cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf.take(n0)⌝ + ⌜paf.drop(n0)⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα1 = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0, (⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ ) + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ , (Some(e) = None ⊃ [];⌜Some(e).get '⌝ ) + Π(ext, aext, ren, aren) !(pα0) = ⌜e '⌝ + Π(ext, aext, ren, aren) !(pα0), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), Π(ext, aext, ren, aren)(pa) = Some(e), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = Π(ext, cext, ren, cren) !(⌜paf.take(n0)⌝ + ⌜paf.drop(n0)⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ∀ σ1. ⌜Π(ext, cext, ren, cren) !(paf.take(n0))⌝ + σ1 ≠ ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ ⊦ |
Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf.take(n0)⌝ + ⌜paf.drop(n0)⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(pal) = [], ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), (Some(e) = None ⊃ [];⌜Some(e).get '⌝ ) + Π(ext, aext, ren, aren) !(pα0) = ⌜e '⌝ + Π(ext, aext, ren, aren) !(pα0), (⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ ) + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ , ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα1 = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0, Π(ext, aext, ren, aren)(pa) = Some(e), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = ⌜Π(ext, cext, ren, cren) !(paf.take(n0))⌝ + Π(ext, cext, ren, cren) !(⌜paf.drop(n0)⌝ ), 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ∀ σ1. ⌜Π(ext, cext, ren, cren) !(paf.take(n0))⌝ + σ1 ≠ ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ ext !(⌜al⌝ + α2) = ⌜ext !(al)⌝ + ext !(α2); (s)
| Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n)), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf.take(n0)⌝ + ⌜paf.drop(n0)⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(pal) = [], ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), (Some(e) = None ⊃ [];⌜Some(e).get '⌝ ) + Π(ext, aext, ren, aren) !(pα0) = ⌜e '⌝ + Π(ext, aext, ren, aren) !(pα0), (⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ ) + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ , ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα1 = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0, Π(ext, aext, ren, aren)(pa) = Some(e), ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ = ⌜Π(ext, cext, ren, cren) !(paf.take(n0))⌝ + Π(ext, cext, ren, cren) !(⌜paf.drop(n0)⌝ ), 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ + ⌜pal⌝ + ⌜pa '⌝ + pα0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ∀ σ1. ⌜Π(ext, cext, ren, cren) !(paf.take(n0))⌝ + σ1 ≠ ⌜Π(ext, cext, ren, cren) !(paf.take(n))⌝ ⊦ |
Used terms: Π(ext, cext, ren, cren) !(⌜paf.drop(n0)⌝ )
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = # Π(ext, cext, ren, cren) !(⌜paf⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, 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), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) ≠ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) ∨ ¬ ( ¬ # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) < ⌜n⌝ → Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) .take (n ) = Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n)) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = # Π(ext, cext, ren, cren) !(⌜paf⌝ ), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) ≠ Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n), 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜n⌝ , ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ) ⊦
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = # Π(ext, cext, ren, cren) !(⌜paf⌝ ), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) ≠ Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n), 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜n⌝ , ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ) ⊦ |
⊦ ¬ # ext !(α) < ⌜n⌝ → (∃ m. ¬ # α < ⌜m⌝ ∧ ext !(α).take(n) = ext !(α.take(m)))
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = # Π(ext, cext, ren, cren) !(⌜paf⌝ ), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) ≠ Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜n⌝ , ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜n⌝ → (∃ m. ¬ # ⌜paf⌝ < ⌜m⌝ ∧ Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n) = Π(ext, cext, ren, cren) !(⌜paf⌝ .take(m))), ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦
Used terms: Π(ext, cext, ren, cren), ⌜paf⌝ , n
| ⊦ ¬ # ext !(α) < ⌜n⌝ → (∃ m. ¬ # α < ⌜m⌝ ∧ ext !(α).take(n) = ext !(α.take(m))) |
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = # Π(ext, cext, ren, cren) !(⌜paf⌝ ), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) ≠ Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜n⌝ , ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜n⌝ → (∃ m. ¬ # ⌜paf⌝ < ⌜m⌝ ∧ Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n) = Π(ext, cext, ren, cren) !(⌜paf⌝ .take(m))), ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = # Π(ext, cext, ren, cren) !(⌜paf⌝ ), Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) ≠ Π(ext, cext, ren, cren) !(paf.take(n0)), 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜n⌝ , ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ) ⊦
Used simplifier rules: ⊦ ⌜nf⌝ .take(n) = nf.take(n); (s) ⊦ ¬ ∞ < n∞; (s) ⊦ # ⌜nf⌝ = ∞; (s)
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = # Π(ext, cext, ren, cren) !(⌜paf⌝ ), Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) ≠ Π(ext, cext, ren, cren) !(paf.take(n0)), 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜n⌝ , ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ) ⊦ |
⊦ ¬ # ext !(α) < ⌜n⌝ → (∃ m. ¬ # α < ⌜m⌝ ∧ ext !(α).take(n) = ext !(α.take(m)))
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = # Π(ext, cext, ren, cren) !(⌜paf⌝ ), Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) ≠ Π(ext, cext, ren, cren) !(paf.take(n0)), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜n⌝ , ¬ # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) < ⌜n⌝ → (∃ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ ∧ Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) .take (n ) = Π(ext, aext, ren, aren) ! (lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m))), ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦
Used terms: Π(ext, aext, ren, aren), lim (⌜λ n. ⌜repla (step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα) ⌝ ⌝ ), n
| ⊦ ¬ # ext !(α) < ⌜n⌝ → (∃ m. ¬ # α < ⌜m⌝ ∧ ext !(α).take(n) = ext !(α.take(m))) |
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = # Π(ext, cext, ren, cren) !(⌜paf⌝ ), Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) ≠ Π(ext, cext, ren, cren) !(paf.take(n0)), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜n⌝ , ¬ # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) < ⌜n⌝ → (∃ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ ∧ Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) .take (n ) = Π(ext, aext, ren, aren) ! (lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m))), ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = # Π(ext, cext, ren, cren) !(⌜paf⌝ ), Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) = Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) ≠ Π(ext, cext, ren, cren) !(paf.take(n0)), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜n⌝ , ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜n1⌝ , ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = # Π(ext, cext, ren, cren) !(⌜paf⌝ ), Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) = Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) ≠ Π(ext, cext, ren, cren) !(paf.take(n0)), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜n⌝ , ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜n1⌝ , ∀ m. ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(m)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = # Π(ext, cext, ren, cren) !(⌜paf⌝ ), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) = Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)), Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) ≠ Π(ext, cext, ren, cren) !(paf.take(n0)), 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜n⌝ , ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜n1⌝ , ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜n1⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦
Used terms: n1
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = # Π(ext, cext, ren, cren) !(⌜paf⌝ ), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) = Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)), Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) ≠ Π(ext, cext, ren, cren) !(paf.take(n0)), 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜n⌝ , ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜n1⌝ , ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜n1⌝ → (∃ n. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = # Π(ext, cext, ren, cren) !(⌜paf⌝ ), Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) = Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) ≠ Π(ext, cext, ren, cren) !(paf.take(n0)), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)⌝ , ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜n⌝ , ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜n1⌝ , ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = # Π(ext, cext, ren, cren) !(⌜paf⌝ ), Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) = Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) ≠ Π(ext, cext, ren, cren) !(paf.take(n0)), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)⌝ ⊑ ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)⌝ , ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜n⌝ , ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜n1⌝ , ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦ |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = # Π(ext, cext, ren, cren) !(⌜paf⌝ ), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) = Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)), Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) ≠ Π(ext, cext, ren, cren) !(paf.take(n0)), 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜n⌝ , ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜n1⌝ , ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∃ σ1. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)⌝ + σ1 = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)⌝ ⊦
Used terms: ⌜lim (⌜λ n. ⌜repla (step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα) ⌝ ⌝ ) .take (n1 ) ⌝ , ⌜repla (step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα) ⌝
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = # Π(ext, cext, ren, cren) !(⌜paf⌝ ), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) = Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)), Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) ≠ Π(ext, cext, ren, cren) !(paf.take(n0)), 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜n⌝ , ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜n1⌝ , ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∃ σ1. ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)⌝ + σ1 = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)⌝ ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = # Π(ext, cext, ren, cren) !(⌜paf⌝ ), ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)⌝ + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)⌝ , Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) = Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) ≠ Π(ext, cext, ren, cren) !(paf.take(n0)), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜n⌝ , ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜n1⌝ , ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = # Π(ext, cext, ren, cren) !(⌜paf⌝ ), ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)⌝ + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)⌝ , Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) = Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) ≠ Π(ext, cext, ren, cren) !(paf.take(n0)), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜n⌝ , ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜n1⌝ , ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = # Π(ext, cext, ren, cren) !(⌜paf⌝ ), # Π(ext, cext, ren, cren) ! (⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)⌝ + pα) = # Π(ext, cext, ren, cren) !(⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)⌝ ), ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)⌝ + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)⌝ , Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) = Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)), Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) ≠ Π(ext, cext, ren, cren) !(paf.take(n0)), 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜n⌝ , ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜n1⌝ , ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = # Π(ext, cext, ren, cren) !(⌜paf⌝ ), ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)⌝ + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)⌝ , Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) = Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)), Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n) = Π(ext, cext, ren, cren) !(paf.take(n0)), # Π(ext, cext, ren, cren) ! (⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)⌝ + pα) ≠ # Π(ext, cext, ren, cren) !(⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)⌝ ), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) ≠ Π(ext, cext, ren, cren) !(paf.take(n0)), 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜n⌝ , ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜n1⌝ , ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦
Used formulas: # Π(ext, cext, ren, cren) ! ( ⌜lim (⌜λ n. ⌜repla (step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα) ⌝ ⌝ ) .take (n1 ) ⌝ + pα) = # Π(ext, cext, ren, cren) ! (⌜repla (step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα) ⌝ )
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = # Π(ext, cext, ren, cren) !(⌜paf⌝ ), # Π(ext, cext, ren, cren) ! (⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)⌝ + pα) = # Π(ext, cext, ren, cren) !(⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)⌝ ), ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)⌝ + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)⌝ , Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) = Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)), Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) ≠ Π(ext, cext, ren, cren) !(paf.take(n0)), 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜n⌝ , ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜n1⌝ , ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦ |
⊦ ext !(⌜al⌝ + α2) = ⌜ext !(al)⌝ + ext !(α2)
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # ( ⌜Π(ext, cext, ren, cren) ! (lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)) ⌝ + Π(ext, cext, ren, cren) !(pα)) = # Π(ext, cext, ren, cren) !(⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)⌝ ), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = # Π(ext, cext, ren, cren) !(⌜paf⌝ ), ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)⌝ + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)⌝ , Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) = Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) ≠ Π(ext, cext, ren, cren) !(paf.take(n0)), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜n⌝ , ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜n1⌝ , ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦
Used terms: Π(ext, cext, ren, cren), lim (⌜λ n. ⌜repla (step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα) ⌝ ⌝ ) .take (n1 ), pα
| ⊦ ext !(⌜al⌝ + α2) = ⌜ext !(al)⌝ + ext !(α2) |
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # ( ⌜Π(ext, cext, ren, cren) ! (lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)) ⌝ + Π(ext, cext, ren, cren) !(pα)) = # Π(ext, cext, ren, cren) !(⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)⌝ ), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = # Π(ext, cext, ren, cren) !(⌜paf⌝ ), ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)⌝ + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)⌝ , Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) = Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) ≠ Π(ext, cext, ren, cren) !(paf.take(n0)), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜n⌝ , ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜n1⌝ , ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦ |
⊦ #(σ + σ1) = # σ + # σ1
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = # Π(ext, cext, ren, cren) !(⌜paf⌝ ), ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)⌝ + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)⌝ , # ⌜Π(ext, cext, ren, cren) ! (lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)) ⌝ + # Π(ext, cext, ren, cren) !(pα) = # Π(ext, cext, ren, cren) !(⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)⌝ ), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) = Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)), Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) ≠ Π(ext, cext, ren, cren) !(paf.take(n0)), 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜n⌝ , ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜n1⌝ , ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦
Used terms: ⌜Π(ext, cext, ren, cren) ! (lim (⌜λ n. ⌜repla (step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα) ⌝ ⌝ ) .take (n1 )) ⌝ , Π(ext, cext, ren, cren) !(pα)
| ⊦ #(σ + σ1) = # σ + # σ1 |
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = # Π(ext, cext, ren, cren) !(⌜paf⌝ ), ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)⌝ + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)⌝ , # ⌜Π(ext, cext, ren, cren) ! (lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)) ⌝ + # Π(ext, cext, ren, cren) !(pα) = # Π(ext, cext, ren, cren) !(⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)⌝ ), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) = Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)), Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) ≠ Π(ext, cext, ren, cren) !(paf.take(n0)), 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜n⌝ , ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜n1⌝ , ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = # Π(ext, cext, ren, cren) !(⌜paf⌝ ), # ⌜Π(ext, cext, ren, cren) ! (lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)) ⌝ + # Π(ext, cext, ren, cren) !(pα) = # Π(ext, cext, ren, cren) !(⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)⌝ ), ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)⌝ + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)⌝ , Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) = Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)), ⌜el⌝ = Π(ext, cext, ren, cren) !(pα), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) ≠ Π(ext, cext, ren, cren) !(paf.take(n0)), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜n⌝ , ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜n1⌝ , ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦
Used simplifier rules: Stream('a) freely generated by ⌜ ⌝, ⌜ ⌝;; ⊦ ext !(⌜al⌝ ) = ⌜ext !(al)⌝ ; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ # ⌜nf⌝ = ∞; (s) ⊦ ⌜m⌝ + ∞ = ∞; (s) add-assoc: ⊦ (n∞ + n∞1) + n∞2 = n∞ + n∞1 + n∞2; from specification nat-inf add-comm: ⊦ n∞1 + n∞2 = n∞2 + n∞1; from specification nat-inf ⊦ ⌜n⌝ ≠ ∞; (s)
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = # Π(ext, cext, ren, cren) !(⌜paf⌝ ), # ⌜Π(ext, cext, ren, cren) ! (lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)) ⌝ + # Π(ext, cext, ren, cren) !(pα) = # Π(ext, cext, ren, cren) !(⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)⌝ ), ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)⌝ + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)⌝ , Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) = Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)), ⌜el⌝ = Π(ext, cext, ren, cren) !(pα), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) ≠ Π(ext, cext, ren, cren) !(paf.take(n0)), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜n⌝ , ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜n1⌝ , ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = # Π(ext, cext, ren, cren) !(⌜paf⌝ ), ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)⌝ + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)⌝ , # Π(ext, cext, ren, cren) ! (lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)) + # el = # Π(ext, cext, ren, cren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)), Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) = Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)), ⌜el⌝ = Π(ext, cext, ren, cren) !(pα), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) ≠ Π(ext, cext, ren, cren) !(paf.take(n0)), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜n1⌝ , ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜n⌝ , ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + 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⌝ = ⌜n0⌝ ↔ n + m = n0; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ ext !(⌜al⌝ ) = ⌜ext !(al)⌝ ; (s)
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = # Π(ext, cext, ren, cren) !(⌜paf⌝ ), ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)⌝ + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)⌝ , # Π(ext, cext, ren, cren) ! (lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)) + # el = # Π(ext, cext, ren, cren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)), Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) = Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)), ⌜el⌝ = Π(ext, cext, ren, cren) !(pα), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) ≠ Π(ext, cext, ren, cren) !(paf.take(n0)), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜n1⌝ , ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜n⌝ , ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦ |
⊦ nounsharedextR(cren, cext, ren) ∧ nounsharedextR(aren, aext, ren) ∧ Πok(ext, cext, ren, cren) ∧ Πok(ext, aext, ren, aren) ∧ 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α) → Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)) = Π(ext, cext, ren, cren) !(pal)
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = # Π(ext, cext, ren, cren) !(⌜paf⌝ ), # Π(ext, cext, ren, cren) ! (lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)) + # el = # Π(ext, cext, ren, cren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)), ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)⌝ + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)⌝ , Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) = Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)), Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n) = Π(ext, cext, ren, cren) !(paf.take(n0)), ⌜el⌝ = Π(ext, cext, ren, cren) !(pα), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) ≠ Π(ext, cext, ren, cren) !(paf.take(n0)), 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), 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), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜n1⌝ , ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜n⌝ , nounsharedextR(cren, cext, ren) ∧ nounsharedextR(aren, aext, ren) ∧ Πok(ext, cext, ren, cren) ∧ Πok(ext, aext, ren, aren) ∧ frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf.take(n2 + 1), paf.take(n2)) ∧ frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα) ∧ ⌜cext !(πra(step, cstep, ren, cren, pcsf.take(n2 + 1), paf.take(n2)))⌝ ⊑ aext !(aα) → Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n2)), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦
Used terms: aren, ren, cstep, cext, aext, aα, ext, astart, cstart, start, paf.take(n2), cren, astep, pcsf.take(n2 + 1), ⌜as '⌝ + aσ, step
| ⊦ nounsharedextR(cren, cext, ren) ∧ nounsharedextR(aren, aext, ren) ∧ Πok(ext, cext, ren, cren) ∧ Πok(ext, aext, ren, aren) ∧ 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α) → Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)) = Π(ext, cext, ren, cren) !(pal) |
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = # Π(ext, cext, ren, cren) !(⌜paf⌝ ), # Π(ext, cext, ren, cren) ! (lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)) + # el = # Π(ext, cext, ren, cren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)), ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)⌝ + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)⌝ , Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) = Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)), Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n) = Π(ext, cext, ren, cren) !(paf.take(n0)), ⌜el⌝ = Π(ext, cext, ren, cren) !(pα), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) ≠ Π(ext, cext, ren, cren) !(paf.take(n0)), 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), 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), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜n1⌝ , ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜n⌝ , nounsharedextR(cren, cext, ren) ∧ nounsharedextR(aren, aext, ren) ∧ Πok(ext, cext, ren, cren) ∧ Πok(ext, aext, ren, aren) ∧ frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf.take(n2 + 1), paf.take(n2)) ∧ frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα) ∧ ⌜cext !(πra(step, cstep, ren, cren, pcsf.take(n2 + 1), paf.take(n2)))⌝ ⊑ aext !(aα) → Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n2)), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n2)), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = # Π(ext, cext, ren, cren) !(⌜paf⌝ ), ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)⌝ + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)⌝ , # Π(ext, cext, ren, cren) ! (lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)) + # el = # Π(ext, cext, ren, cren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)), Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) = Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)), ⌜el⌝ = Π(ext, cext, ren, cren) !(pα), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) ≠ Π(ext, cext, ren, cren) !(paf.take(n0)), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜n1⌝ , ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜n⌝ , ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦
Used simplifier rules: ⊦ fragω(IOAut(start, step, ext))(sf, af) → (frag*(IOAut(start, step, ext))(sf.take(n + 1), af.take(n)) ↔ true); (ss) ⊦ 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: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n2)), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = # Π(ext, cext, ren, cren) !(⌜paf⌝ ), ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)⌝ + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)⌝ , # Π(ext, cext, ren, cren) ! (lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)) + # el = # Π(ext, cext, ren, cren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)), Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) = Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)), ⌜el⌝ = Π(ext, cext, ren, cren) !(pα), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) ≠ Π(ext, cext, ren, cren) !(paf.take(n0)), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜n1⌝ , ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜n⌝ , ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦ |
⊦ nounsharedextR(cren, cext, ren) ∧ nounsharedextR(aren, aext, ren) ∧ Πok(ext, cext, ren, cren) ∧ Πok(ext, aext, ren, aren) ∧ 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α) → Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)) = Π(ext, cext, ren, cren) !(pal)
Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n2)), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = # Π(ext, cext, ren, cren) !(⌜paf⌝ ), # Π(ext, cext, ren, cren) ! (lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)) + # el = # Π(ext, cext, ren, cren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)), ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)⌝ + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)⌝ , Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) = Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)), Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n) = Π(ext, cext, ren, cren) !(paf.take(n0)), ⌜el⌝ = Π(ext, cext, ren, cren) !(pα), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) ≠ Π(ext, cext, ren, cren) !(paf.take(n0)), 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), 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), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜n1⌝ , ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜n⌝ , nounsharedextR(cren, cext, ren) ∧ nounsharedextR(aren, aext, ren) ∧ Πok(ext, cext, ren, cren) ∧ Πok(ext, aext, ren, aren) ∧ 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))(⌜as '⌝ + aσ, aα) ∧ ⌜cext !(πra(step, cstep, ren, cren, pcsf.take(n0 + 1), paf.take(n0)))⌝ ⊑ aext !(aα) → Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦
Used terms: aren, ren, cstep, cext, aext, aα, ext, astart, cstart, start, paf.take(n0), cren, astep, pcsf.take(n0 + 1), ⌜as '⌝ + aσ, step
| ⊦ nounsharedextR(cren, cext, ren) ∧ nounsharedextR(aren, aext, ren) ∧ Πok(ext, cext, ren, cren) ∧ Πok(ext, aext, ren, aren) ∧ 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α) → Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)) = Π(ext, cext, ren, cren) !(pal) |
| Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n2)), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = # Π(ext, cext, ren, cren) !(⌜paf⌝ ), # Π(ext, cext, ren, cren) ! (lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)) + # el = # Π(ext, cext, ren, cren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)), ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)⌝ + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)⌝ , Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) = Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)), Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n) = Π(ext, cext, ren, cren) !(paf.take(n0)), ⌜el⌝ = Π(ext, cext, ren, cren) !(pα), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) ≠ Π(ext, cext, ren, cren) !(paf.take(n0)), 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), 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), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜n1⌝ , ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜n⌝ , nounsharedextR(cren, cext, ren) ∧ nounsharedextR(aren, aext, ren) ∧ Πok(ext, cext, ren, cren) ∧ Πok(ext, aext, ren, aren) ∧ 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))(⌜as '⌝ + aσ, aα) ∧ ⌜cext !(πra(step, cstep, ren, cren, pcsf.take(n0 + 1), paf.take(n0)))⌝ ⊑ aext !(aα) → Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n2)), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = # Π(ext, cext, ren, cren) !(⌜paf⌝ ), ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)⌝ + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)⌝ , # Π(ext, cext, ren, cren) ! (lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)) + # el = # Π(ext, cext, ren, cren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)), Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) = Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)), ⌜el⌝ = Π(ext, cext, ren, cren) !(pα), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) ≠ Π(ext, cext, ren, cren) !(paf.take(n0)), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜n1⌝ , ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜n⌝ , ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦
Used simplifier rules: ⊦ fragω(IOAut(start, step, ext))(sf, af) → (frag*(IOAut(start, step, ext))(sf.take(n + 1), af.take(n)) ↔ true); (ss) ⊦ 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: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n2)), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = # Π(ext, cext, ren, cren) !(⌜paf⌝ ), ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)⌝ + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)⌝ , # Π(ext, cext, ren, cren) ! (lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)) + # el = # Π(ext, cext, ren, cren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)), Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) = Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)), ⌜el⌝ = Π(ext, cext, ren, cren) !(pα), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) ≠ Π(ext, cext, ren, cren) !(paf.take(n0)), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜n1⌝ , ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜n⌝ , ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦ |
Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n2)), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = # Π(ext, cext, ren, cren) !(⌜paf⌝ ), # Π(ext, cext, ren, cren) ! (lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)) + # el = # Π(ext, cext, ren, cren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)), ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)⌝ + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)⌝ , Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) = Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)), Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n) = Π(ext, cext, ren, cren) !(paf.take(n0)), ⌜el⌝ = Π(ext, cext, ren, cren) !(pα), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) ≠ Π(ext, cext, ren, cren) !(paf.take(n0)), 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), 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), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜n1⌝ , ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜n⌝ , ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦
| Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n2)), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = # Π(ext, cext, ren, cren) !(⌜paf⌝ ), # Π(ext, cext, ren, cren) ! (lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)) + # el = # Π(ext, cext, ren, cren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)), ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)⌝ + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)⌝ , Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) = Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)), Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n) = Π(ext, cext, ren, cren) !(paf.take(n0)), ⌜el⌝ = Π(ext, cext, ren, cren) !(pα), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) ≠ Π(ext, cext, ren, cren) !(paf.take(n0)), 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), 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), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜n1⌝ , ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜n⌝ , ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n2)), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = # Π(ext, cext, ren, cren) !(⌜paf⌝ ), ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)⌝ + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)⌝ , # Π(ext, cext, ren, cren) ! (lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)) + # el = # Π(ext, cext, ren, cren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)), Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) = Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)), ⌜el⌝ = Π(ext, cext, ren, cren) !(pα), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) ≠ Π(ext, cext, ren, cren) !(paf.take(n0)), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, 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, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜n1⌝ , ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜n⌝ ⊦
Used terms: n0
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n2)), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = # Π(ext, cext, ren, cren) !(⌜paf⌝ ), ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)⌝ + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)⌝ , # Π(ext, cext, ren, cren) ! (lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)) + # el = # Π(ext, cext, ren, cren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)), Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) = Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)), ⌜el⌝ = Π(ext, cext, ren, cren) !(pα), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) ≠ Π(ext, cext, ren, cren) !(paf.take(n0)), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, 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, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜n1⌝ , ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜n⌝ ⊦ |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n2)), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = # Π(ext, cext, ren, cren) !(⌜paf⌝ ), # Π(ext, cext, ren, cren) ! (lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)) + # el = # Π(ext, cext, ren, cren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)), ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)⌝ + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)⌝ , Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) = Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)), Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n) = Π(ext, cext, ren, cren) !(paf.take(n0)), ⌜el⌝ = Π(ext, cext, ren, cren) !(pα), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) ≠ Π(ext, cext, ren, cren) !(paf.take(n0)), 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), 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), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜n1⌝ , ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜n⌝ , ∃ σ1. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + σ1 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦
Used terms: ⌜repla (step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα) ⌝ , lim (⌜λ n. ⌜repla (step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα) ⌝ ⌝ )
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n2)), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = # Π(ext, cext, ren, cren) !(⌜paf⌝ ), # Π(ext, cext, ren, cren) ! (lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)) + # el = # Π(ext, cext, ren, cren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)), ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)⌝ + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)⌝ , Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) = Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)), Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n) = Π(ext, cext, ren, cren) !(paf.take(n0)), ⌜el⌝ = Π(ext, cext, ren, cren) !(pα), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) ≠ Π(ext, cext, ren, cren) !(paf.take(n0)), 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), 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), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜n1⌝ , ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜n⌝ , ∃ σ1. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + σ1 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦ |
Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n2)), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ⌜# Π(ext, cext, ren, cren) !(paf.take(n0))⌝ + # Π(ext, aext, ren, aren) !(pα0) = # Π(ext, cext, ren, cren) !(⌜paf⌝ ), # Π(ext, cext, ren, cren) !((⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα0).take(n1)) + # el = # Π(ext, cext, ren, cren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)), ⌜(⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα0).take(n1)⌝ + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)⌝ , Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n) = Π(ext, cext, ren, cren) !(paf.take(n0)), (⌜Π(ext, cext, ren, cren) !(paf.take(n0))⌝ + Π(ext, aext, ren, aren) !(pα0)).take(n) = Π(ext, aext, ren, aren) !((⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα0).take(n1)), ⌜el⌝ = Π(ext, cext, ren, cren) !(pα), (⌜Π(ext, cext, ren, cren) !(paf.take(n0))⌝ + Π(ext, aext, ren, aren) !(pα0)).take(n) ≠ Π(ext, cext, ren, cren) !(paf.take(n0)), 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜n⌝ , ¬ ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + # pα0 < ⌜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)
| Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n0)), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n2)), cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ⌜# Π(ext, cext, ren, cren) !(paf.take(n0))⌝ + # Π(ext, aext, ren, aren) !(pα0) = # Π(ext, cext, ren, cren) !(⌜paf⌝ ), # Π(ext, cext, ren, cren) !((⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα0).take(n1)) + # el = # Π(ext, cext, ren, cren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)), ⌜(⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα0).take(n1)⌝ + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)⌝ , Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n) = Π(ext, cext, ren, cren) !(paf.take(n0)), (⌜Π(ext, cext, ren, cren) !(paf.take(n0))⌝ + Π(ext, aext, ren, aren) !(pα0)).take(n) = Π(ext, aext, ren, aren) !((⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα0).take(n1)), ⌜el⌝ = Π(ext, cext, ren, cren) !(pα), (⌜Π(ext, cext, ren, cren) !(paf.take(n0))⌝ + Π(ext, aext, ren, aren) !(pα0)).take(n) ≠ Π(ext, cext, ren, cren) !(paf.take(n0)), 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜n⌝ , ¬ ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + # pα0 < ⌜n1⌝ ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n2)), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n), ⌜(⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα0).take(n1)⌝ + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)⌝ , # Π(ext, cext, ren, cren) !((⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα0).take(n1)) + # el = # Π(ext, cext, ren, cren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)), ⌜# Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n)⌝ + # Π(ext, aext, ren, aren) !(pα0) = # Π(ext, cext, ren, cren) !(⌜paf⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), (⌜Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n)⌝ + Π(ext, aext, ren, aren) !(pα0)).take(n) = Π(ext, aext, ren, aren) !((⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα0).take(n1)), ⌜el⌝ = Π(ext, cext, ren, cren) !(pα), (⌜Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n)⌝ + Π(ext, aext, ren, aren) !(pα0)).take(n) ≠ Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα0), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜n⌝ , ¬ ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + # pα0 < ⌜n1⌝ ⊦
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(paf.take(n2)), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n), ⌜(⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα0).take(n1)⌝ + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)⌝ , # Π(ext, cext, ren, cren) !((⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα0).take(n1)) + # el = # Π(ext, cext, ren, cren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)), ⌜# Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n)⌝ + # Π(ext, aext, ren, aren) !(pα0) = # Π(ext, cext, ren, cren) !(⌜paf⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα0 = lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), (⌜Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n)⌝ + Π(ext, aext, ren, aren) !(pα0)).take(n) = Π(ext, aext, ren, aren) !((⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα0).take(n1)), ⌜el⌝ = Π(ext, cext, ren, cren) !(pα), (⌜Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n)⌝ + Π(ext, aext, ren, aren) !(pα0)).take(n) ≠ Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, 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 '⌝ + aσ, aα)⌝ ⌝ ), ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + pα0), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜n⌝ , ¬ ⌜# repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n0 + 1), paf.take(n0), ⌜as '⌝ + aσ, aα)⌝ + # pα0 < ⌜n1⌝ ⊦ |
⊦ ¬ # σ < ⌜n⌝ → (σ + σ0).take(n) = σ.take(n)
Used simplifier rules: ¬ # σ < ⌜n⌝ ⊦ # σ.take(n) = n; (s) ⊦ ⌜x⌝ .take(n) = x.take(n); (s) ¬ # σ < ⌜n⌝ ⊦ σ.take(n).take(n) = σ.take(n); (s) ⊦ # σ < ⌜n⌝ → (σ + σ0).take(n) = σ.l + σ0.take(n - # σ.l); (s) ⊦ ⌜x⌝ .l = x; (s) ⊦ m - m = 0; (s) ⊦ σ.take(0) = []; (s) ⊦ x + [] = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream Used terms: n, ⌜Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n)⌝ , Π(ext, aext, ren, aren) !(pα0)
| ⊦ ¬ # σ < ⌜n⌝ → (σ + σ0).take(n) = σ.take(n) |
| cext !(πra(step, cstep, ren, cren, ⌜pcsf⌝ , ⌜paf⌝ )) = aext !(aα), # Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = # Π(ext, cext, ren, cren) !(⌜paf⌝ ), ⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)⌝ + pα = ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)⌝ , Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) = Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)), Π(ext, cext, ren, cren) !(⌜paf⌝ ).take(n) = Π(ext, cext, ren, cren) !(paf.take(n0)), # Π(ext, cext, ren, cren) ! (⌜lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ).take(n1)⌝ + pα) ≠ # Π(ext, cext, ren, cren) !(⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n2 + 1), paf.take(n2), ⌜as '⌝ + aσ, aα)⌝ ), Π(ext, aext, ren, aren) !(lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )).take(n) ≠ Π(ext, cext, ren, cren) !(paf.take(n0)), 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 '⌝ + aσ, aα)⌝ ⌝ ), lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, paf), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), oinj(cext), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ # Π(ext, cext, ren, cren) !(⌜paf⌝ ) < ⌜n⌝ , ¬ # lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜n1⌝ , ∀ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim(⌜λ n. ⌜repla(step, cstep, cren, ren, aren, cext, aext, pcsf.take(n + 1), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦ |
The following image shows the proof tree of sequent calculus. The proved goal is at the bottom. You can click on the nodes to view additional rules. See here for details on colors in a proof tree.