| nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜(s, cs) '⌝ + pcσ, pα), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + pcσ, pα)) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + pcσ, pα, ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + pcσ, pα, ⌜as '⌝ + aσ, aα)) = (s, as) |
frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜(s, cs) '⌝ + pcσ, pα), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + pcσ, pα)) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + pcσ, pα, ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + pcσ, pα, ⌜as '⌝ + aσ, aα)) = (s, as)
| frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜(s, cs) '⌝ + pcσ, pα), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + pcσ, pα)) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + pcσ, pα, ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + pcσ, pα, ⌜as '⌝ + aσ, aα)) = (s, as) |
pcσ = ⌜pcsl⌝ , frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜(s, cs) '⌝ + pcσ, pα), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + pcσ, pα)) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + pcσ, pα, ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + pcσ, pα, ⌜as '⌝ + aσ, aα)) = (s, as)
pcσ = ⌜pcsf⌝ , frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜(s, cs) '⌝ + pcσ, pα), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + pcσ, pα)) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + pcσ, pα, ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + pcσ, pα, ⌜as '⌝ + aσ, aα)) = (s, as)
Used simplifier rules: Stream('a) freely generated by ⌜ ⌝, ⌜ ⌝;;
| pcσ = ⌜pcsl⌝ , frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜(s, cs) '⌝ + pcσ, pα), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + pcσ, pα)) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + pcσ, pα, ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + pcσ, pα, ⌜as '⌝ + aσ, aα)) = (s, as) |
frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜(s, cs) '⌝ + ⌜pcsl⌝ , pα), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜pcsl⌝ , pα)) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsl⌝ , pα, ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsl⌝ , pα, ⌜as '⌝ + aσ, aα)) = (s, as)
| frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜(s, cs) '⌝ + ⌜pcsl⌝ , pα), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜pcsl⌝ , pα)) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsl⌝ , pα, ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsl⌝ , pα, ⌜as '⌝ + aσ, aα)) = (s, as) |
pα = ⌜pal⌝ , frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜(s, cs) '⌝ + ⌜pcsl⌝ , pα), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜pcsl⌝ , pα)) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsl⌝ , pα, ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsl⌝ , pα, ⌜as '⌝ + aσ, aα)) = (s, as)
Used simplifier rules: Stream('a) freely generated by ⌜ ⌝, ⌜ ⌝;; ⊦ frag(ioa)(σ, ⌜af⌝ ) ↔ fragω(ioa)(σ.f, af) ∧ ¬ finp(σ); (s) ⊦ finp(σ) ↔ ¬(∃ nf. ⌜nf⌝ = σ); (ss) ⊦ σ0 + ⌜x⌝ = ⌜nf0⌝ ↔ σ0 = ⌜nf0⌝ ; (s) ⊦ ⌜x⌝ ≠ ⌜nf⌝ ; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream
| pα = ⌜pal⌝ , frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜(s, cs) '⌝ + ⌜pcsl⌝ , pα), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜pcsl⌝ , pα)) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsl⌝ , pα, ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsl⌝ , pα, ⌜as '⌝ + aσ, aα)) = (s, as) |
frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + pcsl, pal), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜pcsl⌝ , ⌜pal⌝ )) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsl⌝ , ⌜pal⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsl⌝ , ⌜pal⌝ , ⌜as '⌝ + aσ, aα)) = (s, as)
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ a ∈ a0 ' + x ↔ a = a0 ∨ a ∈ x; (s) in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ ⌜x⌝ + ⌜y⌝ = ⌜z⌝ ↔ x + y = z; (s) ⊦ finp(σ) ↔ (∃ x. ⌜x⌝ = σ); (as) ⊦ (⌜x⌝ + ⌜y⌝ ).l = x + y; (s) ⊦ frag(ioa)(σ, ⌜al⌝ ) ↔ frag*(ioa)(σ.l, al) ∧ finp(σ); (s)
| frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + pcsl, pal), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜pcsl⌝ , ⌜pal⌝ )) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsl⌝ , ⌜pal⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsl⌝ , ⌜pal⌝ , ⌜as '⌝ + aσ, aα)) = (s, as) |
⊦ ⌜x + y⌝ = ⌜x⌝ + ⌜y⌝
frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + pcsl, pal), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) ' + pcsl⌝ , ⌜pal⌝ )) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) ' + pcsl⌝ , ⌜pal⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) ' + pcsl⌝ , ⌜pal⌝ , ⌜as '⌝ + aσ, aα)) = (s, as)
Used terms: (s, cs) ', pcsl
| ⊦ ⌜x + y⌝ = ⌜x⌝ + ⌜y⌝ |
| frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + pcsl, pal), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) ' + pcsl⌝ , ⌜pal⌝ )) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) ' + pcsl⌝ , ⌜pal⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) ' + pcsl⌝ , ⌜pal⌝ , ⌜as '⌝ + aσ, aα)) = (s, as) |
⊦ # pcsl = # pal + 1 → repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcsl⌝ , ⌜pal⌝ , aσ, aα) = ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)⌝
#((s, cs) ' + pcsl) = # pal + 1, frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + pcsl, pal), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) ' + pcsl⌝ , ⌜pal⌝ )) ⊑ aext !(aα) ⊦ ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsl, pal, ⌜as '⌝ + aσ, aα)⌝ ≠ [] ∧ hd(⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsl, pal, ⌜as '⌝ + aσ, aα)⌝ ) = (s, as)
Used simplifier rules: ⊦ #(a ' + x) = (# x)+1; (s) ⊦ m +1 = m + 1; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ m + n = m + n0 ↔ n = n0; (s) ⊦ frag*(IOAut(start, step, ext))(s ' + sl, al) → (# sl = # al ↔ 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, (s, cs) ' + pcsl, ⌜as '⌝ + aσ, step
| ⊦ # pcsl = # pal + 1 → repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcsl⌝ , ⌜pal⌝ , aσ, aα) = ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)⌝ |
| #((s, cs) ' + pcsl) = # pal + 1, frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + pcsl, pal), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) ' + pcsl⌝ , ⌜pal⌝ )) ⊑ aext !(aα) ⊦ ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsl, pal, ⌜as '⌝ + aσ, aα)⌝ ≠ [] ∧ hd(⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsl, pal, ⌜as '⌝ + aσ, aα)⌝ ) = (s, as) |
⊦ # psl = # pal + 1 → πra(lstep, rstep, lren, rren, ⌜psl⌝ , ⌜pal⌝ ) = ⌜πra(lstep, rstep, lren, rren, psl, pal)⌝
#((s, cs) ' + pcsl) = # pal + 1, frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + pcsl, pal), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(⌜πra(step, cstep, ren, cren, (s, cs) ' + pcsl, pal)⌝ ) ⊑ aext !(aα) ⊦ ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsl, pal, ⌜as '⌝ + aσ, aα)⌝ ≠ [] ∧ hd(⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsl, pal, ⌜as '⌝ + aσ, aα)⌝ ) = (s, as)
Used terms: (s, cs) ' + pcsl, cstep, pal, ren, cren, step
| ⊦ # psl = # pal + 1 → πra(lstep, rstep, lren, rren, ⌜psl⌝ , ⌜pal⌝ ) = ⌜πra(lstep, rstep, lren, rren, psl, pal)⌝ |
| #((s, cs) ' + pcsl) = # pal + 1, frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + pcsl, pal), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(⌜πra(step, cstep, ren, cren, (s, cs) ' + pcsl, pal)⌝ ) ⊑ aext !(aα) ⊦ ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsl, pal, ⌜as '⌝ + aσ, aα)⌝ ≠ [] ∧ hd(⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsl, pal, ⌜as '⌝ + aσ, aα)⌝ ) = (s, as) |
# pcsl = # pal, frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + pcsl, pal), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), ⌜cext !(πra(step, cstep, ren, cren, (s, cs) ' + pcsl, pal))⌝ ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsl, pal, ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsl, pal, ⌜as '⌝ + aσ, aα)⌝ ) = (s, as)
Used simplifier rules: ⊦ ⌜x⌝ = [] ↔ x = []; (s) ⊦ ext !(⌜al⌝ ) = ⌜ext !(al)⌝ ; (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m + n = m + n0 ↔ n = n0; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ m +1 = m + 1; (s) ⊦ #(a ' + x) = (# x)+1; (s)
| # pcsl = # pal, frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + pcsl, pal), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), ⌜cext !(πra(step, cstep, ren, cren, (s, cs) ' + pcsl, pal))⌝ ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsl, pal, ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsl, pal, ⌜as '⌝ + aσ, aα)⌝ ) = (s, as) |
nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜(s, cs) '⌝ + ⌜pcsl⌝ , ⌜pal⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), cext !(⌜πra(step, cstep, ren, cren, (s, cs) ' + pcsl, pal)⌝ ) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsl, pal, ⌜as '⌝ + aσ, aα) ≠ [] ∧ repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsl, pal, ⌜as '⌝ + aσ, aα).head = (s, as)
# pcsl = # pal, repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsl, pal, ⌜as '⌝ + aσ, aα).head = (s, as), repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsl, pal, ⌜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)))((s, cs) ' + pcsl, pal), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), ⌜cext !(πra(step, cstep, ren, cren, (s, cs) ' + pcsl, pal))⌝ ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsl, pal, ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsl, pal, ⌜as '⌝ + aσ, aα)⌝ ) = (s, as)
Used simplifier rules: ⊦ frag(ioa)(σ, ⌜al⌝ ) ↔ frag*(ioa)(σ.l, al) ∧ finp(σ); (s) ⊦ (⌜x⌝ + ⌜y⌝ ).l = x + y; (s) ⊦ ext !(⌜al⌝ ) = ⌜ext !(al)⌝ ; (s) ⊦ finp(σ) ↔ ¬(∃ nf. ⌜nf⌝ = σ); (ss) ⊦ σ0 + ⌜x⌝ = ⌜nf0⌝ ↔ σ0 = ⌜nf0⌝ ; (s) ⊦ ⌜x⌝ ≠ ⌜nf⌝ ; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream Used terms: aren, ren, cstep, cext, s, as, aext, aα, ext, astart, cstart, start, pal, cren, astep, pcsl, cs, aσ, step
| nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜(s, cs) '⌝ + ⌜pcsl⌝ , ⌜pal⌝ ), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), cext !(⌜πra(step, cstep, ren, cren, (s, cs) ' + pcsl, pal)⌝ ) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsl, pal, ⌜as '⌝ + aσ, aα) ≠ [] ∧ repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsl, pal, ⌜as '⌝ + aσ, aα).head = (s, as) |
| # pcsl = # pal, repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsl, pal, ⌜as '⌝ + aσ, aα).head = (s, as), repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsl, pal, ⌜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)))((s, cs) ' + pcsl, pal), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), ⌜cext !(πra(step, cstep, ren, cren, (s, cs) ' + pcsl, pal))⌝ ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsl, pal, ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsl, pal, ⌜as '⌝ + aσ, aα)⌝ ) = (s, as) |
# pcsl = # pal, repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsl, pal, ⌜as '⌝ + aσ, aα).head = (s, as), hd(⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsl, pal, ⌜as '⌝ + aσ, aα)⌝ ) ≠ (s, as), repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsl, pal, ⌜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)))((s, cs) ' + pcsl, pal), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), ⌜cext !(πra(step, cstep, ren, cren, (s, cs) ' + pcsl, pal))⌝ ⊑ aext !(aα) ⊦
| # pcsl = # pal, repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsl, pal, ⌜as '⌝ + aσ, aα).head = (s, as), hd(⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsl, pal, ⌜as '⌝ + aσ, aα)⌝ ) ≠ (s, as), repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsl, pal, ⌜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)))((s, cs) ' + pcsl, pal), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), ⌜cext !(πra(step, cstep, ren, cren, (s, cs) ' + pcsl, pal))⌝ ⊑ aext !(aα) ⊦ |
Used simplifier rules: ⊦ a + x = a ' + x; (s) in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) ⊦ a ' ≠ []; (s) ⊦ ⌜x + y⌝ = ⌜x⌝ + ⌜y⌝ ; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ hd(⌜a '⌝ + ⌜x⌝ ) = a; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ x ≠ [] → (head = x.head ∧ tail = x.tail ↔ x = head + tail); (elim) Used terms: repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsl, pal, ⌜as '⌝ + aσ, aα), pas, x0
| pcσ = ⌜pcsf⌝ , frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜(s, cs) '⌝ + pcσ, pα), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + pcσ, pα)) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + pcσ, pα, ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + pcσ, pα, ⌜as '⌝ + aσ, aα)) = (s, as) |
frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜(s, cs) '⌝ + ⌜pcsf⌝ , pα), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , pα)) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , pα, ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , pα, ⌜as '⌝ + aσ, aα)) = (s, as)
| frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜(s, cs) '⌝ + ⌜pcsf⌝ , pα), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , pα)) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , pα, ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , pα, ⌜as '⌝ + aσ, aα)) = (s, as) |
pα = ⌜paf⌝ , frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜(s, cs) '⌝ + ⌜pcsf⌝ , pα), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , pα)) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , pα, ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , pα, ⌜as '⌝ + aσ, aα)) = (s, as)
Used simplifier rules: Stream('a) freely generated by ⌜ ⌝, ⌜ ⌝;; ⊦ frag(ioa)(σ, ⌜al⌝ ) ↔ frag*(ioa)(σ.l, al) ∧ finp(σ); (s) ⊦ finp(σ) ↔ (∃ x. ⌜x⌝ = σ); (as) ⊦ ⌜x⌝ ≠ σ + ⌜nf0⌝ ; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream
| pα = ⌜paf⌝ , frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜(s, cs) '⌝ + ⌜pcsf⌝ , pα), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , pα)) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , pα, ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , pα, ⌜as '⌝ + aσ, aα)) = (s, as) |
⌜pcsf0⌝ = ⌜(s, cs) '⌝ + ⌜pcsf⌝ , frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + pcsf, paf), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜pcsf0⌝ , ⌜paf⌝ )) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf0⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf0⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα)) = (s, as)
Used simplifier rules: ⊦ finp(σ) ↔ ¬(∃ nf. ⌜nf⌝ = σ); (ss) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ (⌜x⌝ + ⌜nf⌝ ).f = x + nf; (s) ⊦ frag(ioa)(σ, ⌜af⌝ ) ↔ fragω(ioa)(σ.f, af) ∧ ¬ finp(σ); (s)
| ⌜pcsf0⌝ = ⌜(s, cs) '⌝ + ⌜pcsf⌝ , frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + pcsf, paf), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜pcsf0⌝ , ⌜paf⌝ )) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf0⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf0⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα)) = (s, as) |
pcsf0 = (s, cs) ' + pcsf, ⌜pcsf0⌝ = ⌜(s, cs) '⌝ + ⌜pcsf⌝ , frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + pcsf, paf), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜pcsf0⌝ , ⌜paf⌝ )) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf0⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf0⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα)) = (s, as)
⌜pcsf0⌝ = ⌜(s, cs) '⌝ + ⌜pcsf⌝ , pcsf0 ≠ (s, cs) ' + pcsf, frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + pcsf, paf), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜pcsf0⌝ , ⌜paf⌝ )) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf0⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf0⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα)) = (s, as)
Used formulas: pcsf0 = (s, cs) ' + pcsf
| pcsf0 = (s, cs) ' + pcsf, ⌜pcsf0⌝ = ⌜(s, cs) '⌝ + ⌜pcsf⌝ , frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + pcsf, paf), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜pcsf0⌝ , ⌜paf⌝ )) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf0⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf0⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα)) = (s, as) |
frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + pcsf, paf), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα)) = (s, as)
Used simplifier rules: ⊦ ⌜x + nf⌝ = ⌜x⌝ + ⌜nf⌝ ; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ # x = # y → (⌜x⌝ + σ = ⌜y⌝ + σ0 ↔ x = y ∧ σ = σ0); (s)
| frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + pcsf, paf), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα)) = (s, as) |
⊦ fragω(IOAut(start, step, ext))(s ' + sf, af) ↔ step(s, af(0), sf(0)) ∧ fragω(IOAut(start, step, ext))(sf, λ n. af(n + 1))
frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Π(step, cstep, ren, cren, ext, cext)((s, cs), paf(0), pcsf(0)), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα)) = (s, as)
Used terms: (s, cs), Π(ext, cext, ren, cren), Π(start, cstart), pcsf, paf, Π(step, cstep, ren, cren, ext, cext)
| ⊦ fragω(IOAut(start, step, ext))(s ' + sf, af) ↔ step(s, af(0), sf(0)) ∧ fragω(IOAut(start, step, ext))(sf, λ n. af(n + 1)) |
| frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Π(step, cstep, ren, cren, ext, cext)((s, cs), paf(0), pcsf(0)), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα)) = (s, as) |
frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Π(step, cstep, ren, cren, ext, cext)((s, cs), paf(0), pcsf(0)), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα)) = (s, as)
| frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Π(step, cstep, ren, cren, ext, cext)((s, cs), paf(0), pcsf(0)), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα)) = (s, as) |
(s0, cs0) = pcsf(0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Π(step, cstep, ren, cren, ext, cext)((s, cs), paf(0), pcsf(0)), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα)) = (s, as)
| (s0, cs0) = pcsf(0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Π(step, cstep, ren, cren, ext, cext)((s, cs), paf(0), pcsf(0)), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα)) = (s, as) |
(s0, cs0) = pcsf(0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Π(step, cstep, ren, cren, ext, cext)((s, cs), paf(0), (s0, cs0)), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα)) = (s, as)
| (s0, cs0) = pcsf(0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Π(step, cstep, ren, cren, ext, cext)((s, cs), paf(0), (s0, cs0)), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα)) = (s, as) |
(s0, cs0) = pcsf(0), pcsf = (s0, cs0) ' + (λ n. pcsf(n + 1)), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Π(step, cstep, ren, cren, ext, cext)((s, cs), paf(0), (s0, cs0)), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα)) = (s, as)
(s0, cs0) = pcsf(0), pcsf ≠ (s0, cs0) ' + (λ n. pcsf(n + 1)), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Π(step, cstep, ren, cren, ext, cext)((s, cs), paf(0), (s0, cs0)), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα)) = (s, as)
Used formulas: pcsf = (s0, cs0) ' + (λ n. pcsf(n + 1))
| (s0, cs0) = pcsf(0), pcsf = (s0, cs0) ' + (λ n. pcsf(n + 1)), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Π(step, cstep, ren, cren, ext, cext)((s, cs), paf(0), (s0, cs0)), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα)) = (s, as) |
(s0, cs0) = (((s0, cs0) ' + (λ n. pcsf(n + 1))))(0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Π(step, cstep, ren, cren, ext, cext)((s, cs), paf(0), (s0, cs0)), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) ' + (λ n. pcsf(n + 1))⌝ , ⌜paf⌝ )) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) ' + (λ n. pcsf(n + 1))⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) ' + (λ n. pcsf(n + 1))⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα)) = (s, as)
| (s0, cs0) = (((s0, cs0) ' + (λ n. pcsf(n + 1))))(0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Π(step, cstep, ren, cren, ext, cext)((s, cs), paf(0), (s0, cs0)), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) ' + (λ n. pcsf(n + 1))⌝ , ⌜paf⌝ )) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) ' + (λ n. pcsf(n + 1))⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) ' + (λ n. pcsf(n + 1))⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα)) = (s, as) |
frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Π(step, cstep, ren, cren, ext, cext)((s, cs), paf(0), (s0, cs0)), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα)) = (s, as)
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ ⌜x + nf⌝ = ⌜x⌝ + ⌜nf⌝ ; (s) ⊦ ((a ' + nf))(0) = a; (s)
| frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Π(step, cstep, ren, cren, ext, cext)((s, cs), paf(0), (s0, cs0)), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ )) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα)) = (s, as) |
⊦ ⌜nf⌝ = nf(0) + ⌜λ n. nf(n + 1)⌝
frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Π(step, cstep, ren, cren, ext, cext)((s, cs), paf(0), (s0, cs0)), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , paf(0) + ⌜λ n. paf(n + 1)⌝ )) ⊑ aext !(aα) ⊦ repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , paf(0) + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd (repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , paf(0) + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα)) = (s, as)
Used terms: paf
| ⊦ ⌜nf⌝ = nf(0) + ⌜λ n. nf(n + 1)⌝ |
| frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Π(step, cstep, ren, cren, ext, cext)((s, cs), paf(0), (s0, cs0)), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , paf(0) + ⌜λ n. paf(n + 1)⌝ )) ⊑ aext !(aα) ⊦ repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , paf(0) + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd (repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , paf(0) + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα)) = (s, as) |
frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Π(step, cstep, ren, cren, ext, cext)((s, cs), paf(0), (s0, cs0)), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf(0) '⌝ + ⌜λ n. paf(n + 1)⌝ )) ⊑ aext !(aα) ⊦ repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf(0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd (repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf(0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα)) = (s, as)
Used simplifier rules: ⊦ a + σ = ⌜a '⌝ + σ; (s)
| frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Π(step, cstep, ren, cren, ext, cext)((s, cs), paf(0), (s0, cs0)), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf(0) '⌝ + ⌜λ n. paf(n + 1)⌝ )) ⊑ aext !(aα) ⊦ repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf(0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd (repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf(0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα)) = (s, as) |
⊦ Π(lstep, rstep, lren, rren, lext, rext)((ls, rs), pa, (ls0, rs0)) ↔ rs = rs0 ∧ (∃ la. lstep(ls, la, ls0) ∧ pa = lren(la) ∧ ¬ cod(rren)(pa)) ∨ ls = ls0 ∧ (∃ ra. rstep(rs, ra, rs0) ∧ pa = rren(ra) ∧ ¬ cod(lren)(pa)) ∨ (∃ la, ra. lstep(ls, la, ls0) ∧ lext(la) ≠ None ∧ pa = lren(la) ∧ rstep(rs, ra, rs0) ∧ rext(ra) ≠ None ∧ pa = rren(ra))
frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf(0) '⌝ + ⌜λ n. paf(n + 1)⌝ )) ⊑ aext !(aα), cs = cs0 ∧ (∃ la. step(s, la, s0) ∧ paf(0) = ren(la) ∧ ¬ cod(cren)(paf(0))) ∨ s = s0 ∧ (∃ ra. cstep(cs, ra, cs0) ∧ paf(0) = cren(ra) ∧ ¬ cod(ren)(paf(0))) ∨ (∃ la, ra. step(s, la, s0) ∧ ext(la) ≠ None ∧ paf(0) = ren(la) ∧ cstep(cs, ra, cs0) ∧ cext(ra) ≠ None ∧ paf(0) = cren(ra)) ⊦ repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf(0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd (repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf(0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα)) = (s, as)
Used terms: cext, paf(0), cs, cstep, ren, ext, cren, cs0, step, s, s0
| ⊦ Π(lstep, rstep, lren, rren, lext, rext)((ls, rs), pa, (ls0, rs0)) ↔ rs = rs0 ∧ (∃ la. lstep(ls, la, ls0) ∧ pa = lren(la) ∧ ¬ cod(rren)(pa)) ∨ ls = ls0 ∧ (∃ ra. rstep(rs, ra, rs0) ∧ pa = rren(ra) ∧ ¬ cod(lren)(pa)) ∨ (∃ la, ra. lstep(ls, la, ls0) ∧ lext(la) ≠ None ∧ pa = lren(la) ∧ rstep(rs, ra, rs0) ∧ rext(ra) ≠ None ∧ pa = rren(ra)) |
| frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf(0) '⌝ + ⌜λ n. paf(n + 1)⌝ )) ⊑ aext !(aα), cs = cs0 ∧ (∃ la. step(s, la, s0) ∧ paf(0) = ren(la) ∧ ¬ cod(cren)(paf(0))) ∨ s = s0 ∧ (∃ ra. cstep(cs, ra, cs0) ∧ paf(0) = cren(ra) ∧ ¬ cod(ren)(paf(0))) ∨ (∃ la, ra. step(s, la, s0) ∧ ext(la) ≠ None ∧ paf(0) = ren(la) ∧ cstep(cs, ra, cs0) ∧ cext(ra) ≠ None ∧ paf(0) = cren(ra)) ⊦ repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf(0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd (repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf(0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα)) = (s, as) |
frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf(0) '⌝ + ⌜λ n. paf(n + 1)⌝ )) ⊑ aext !(aα), cs = cs0 ∧ step(s, a, s0) ∧ paf(0) = ren(a) ∧ ¬ cod(cren)(paf(0)) ∨ s = s0 ∧ cstep(cs, ca, cs0) ∧ paf(0) = cren(ca) ∧ ¬ cod(ren)(paf(0)) ∨ step(s, a0, s0) ∧ ext(a0) ≠ None ∧ paf(0) = ren(a0) ∧ cstep(cs, ca0, cs0) ∧ cext(ca0) ≠ None ∧ paf(0) = cren(ca0) ⊦ repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf(0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd (repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf(0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα)) = (s, as)
| frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf(0) '⌝ + ⌜λ n. paf(n + 1)⌝ )) ⊑ aext !(aα), cs = cs0 ∧ step(s, a, s0) ∧ paf(0) = ren(a) ∧ ¬ cod(cren)(paf(0)) ∨ s = s0 ∧ cstep(cs, ca, cs0) ∧ paf(0) = cren(ca) ∧ ¬ cod(ren)(paf(0)) ∨ step(s, a0, s0) ∧ ext(a0) ≠ None ∧ paf(0) = ren(a0) ∧ cstep(cs, ca0, cs0) ∧ cext(ca0) ≠ None ∧ paf(0) = cren(ca0) ⊦ repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf(0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd (repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf(0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα)) = (s, as) |
paf(0) = cren(ca), s = s0, cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf(0) '⌝ + ⌜λ n. paf(n + 1)⌝ )) ⊑ aext !(aα), ¬ cod(ren)(paf(0)) ⊦ repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf(0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd (repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf(0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα)) = (s, as)
paf(0) = ren(a0), paf(0) = cren(ca0), cext(ca0) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), step(s, a0, s0), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf(0) '⌝ + ⌜λ n. paf(n + 1)⌝ )) ⊑ aext !(aα) ⊦ repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf(0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd (repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf(0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα)) = (s, as)
Used simplifier rules: repls-infrec-addS: ⊦ nounsharedextR(cren, cext, ren) ∧ Πok(ext, cext, ren, cren) ∧ step(s, a, s0) ∧ ¬ cod(cren)(ren(a)) ∧ cext ! (πra (step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα) ∧ frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα) ∧ fragω (IOAut (Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren))) ((s0, cs) ' + pcsf, paf) → repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ , ⌜as '⌝ + aσ, aα) = ⌜(s, as) '⌝ + repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα); ⊦ ⌜a '⌝ + σ ≠ []; (s) ⊦ hd(⌜a '⌝ + σ) = a; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream
| paf(0) = cren(ca), s = s0, cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf(0) '⌝ + ⌜λ n. paf(n + 1)⌝ )) ⊑ aext !(aα), ¬ cod(ren)(paf(0)) ⊦ repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf(0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd (repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf(0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα)) = (s, as) |
paf(0) = cren(ca), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca) '⌝ + ⌜λ n. paf(n + 1)⌝ )) ⊑ aext !(aα), ¬ cod(ren)(cren(ca)) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα)) = (s0, as)
Used simplifier rules: repls-infrec-skip: ⊦ nounsharedextR(cren, cext, ren) ∧ Πok(ext, cext, ren, cren) ∧ cext ! (πra (step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜cren(ca) '⌝ + ⌜paf⌝ )) ⊑ aext !(aα) ∧ frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα) ∧ fragω (IOAut (Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren))) ((s, cs0) ' + pcsf, paf) ∧ cstep(cs, ca, cs0) ∧ ¬ cod(ren)(cren(ca)) → repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜cren(ca) '⌝ + ⌜paf⌝ , ⌜as '⌝ + aσ, aα) = repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs0) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα); append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream
| paf(0) = cren(ca), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca) '⌝ + ⌜λ n. paf(n + 1)⌝ )) ⊑ aext !(aα), ¬ cod(ren)(cren(ca)) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα)) = (s0, as) |
⊦ Πok(lext, rext, lren, rren) ∧ fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs0) ' + psf, paf) ∧ rstep(rs, ra, rs0) ∧ ¬ cod(lren)(rren(ra)) → πra(lstep, rstep, lren, rren, ⌜(ls, rs) '⌝ + ⌜(ls, rs0) '⌝ + ⌜psf⌝ , rren(ra) + ⌜paf⌝ ) = ⌜ra '⌝ + πra(lstep, rstep, lren, rren, (ls, rs0) + ⌜psf⌝ , ⌜paf⌝ )
paf(0) = cren(ca), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca) '⌝ + ⌜λ n. paf(n + 1)⌝ )) ⊑ aext !(aα), ¬ cod(ren)(cren(ca)), Πok(ext, cext, ren, cren) ∧ fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)) ∧ cstep(cs, ca, cs0) ∧ ¬ cod(ren)(cren(ca)) → πra(step, cstep, ren, cren, ⌜(s0, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , cren(ca) + ⌜λ n. paf(n + 1)⌝ ) = ⌜ca '⌝ + πra(step, cstep, ren, cren, (s0, cs0) + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ ) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα)) = (s0, as)
Used terms: cext, cs, cstart, cstep, λ n. pcsf(n + 1), ca, ren, ext, cren, cs0, step, start, λ n. paf(n + 1), s0
| ⊦ Πok(lext, rext, lren, rren) ∧ fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs0) ' + psf, paf) ∧ rstep(rs, ra, rs0) ∧ ¬ cod(lren)(rren(ra)) → πra(lstep, rstep, lren, rren, ⌜(ls, rs) '⌝ + ⌜(ls, rs0) '⌝ + ⌜psf⌝ , rren(ra) + ⌜paf⌝ ) = ⌜ra '⌝ + πra(lstep, rstep, lren, rren, (ls, rs0) + ⌜psf⌝ , ⌜paf⌝ ) |
| paf(0) = cren(ca), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca) '⌝ + ⌜λ n. paf(n + 1)⌝ )) ⊑ aext !(aα), ¬ cod(ren)(cren(ca)), Πok(ext, cext, ren, cren) ∧ fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)) ∧ cstep(cs, ca, cs0) ∧ ¬ cod(ren)(cren(ca)) → πra(step, cstep, ren, cren, ⌜(s0, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , cren(ca) + ⌜λ n. paf(n + 1)⌝ ) = ⌜ca '⌝ + πra(step, cstep, ren, cren, (s0, cs0) + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ ) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα)) = (s0, as) |
paf(0) = cren(ca), πra(step, cstep, ren, cren, ⌜(s0, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca) '⌝ + ⌜λ n. paf(n + 1)⌝ ) = ⌜ca '⌝ + πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ ), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca) '⌝ + ⌜λ n. paf(n + 1)⌝ )) ⊑ aext !(aα), ¬ cod(ren)(cren(ca)) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα)) = (s0, as)
Used simplifier rules: ⊦ a + σ = ⌜a '⌝ + σ; (s)
| paf(0) = cren(ca), πra(step, cstep, ren, cren, ⌜(s0, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca) '⌝ + ⌜λ n. paf(n + 1)⌝ ) = ⌜ca '⌝ + πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ ), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca) '⌝ + ⌜λ n. paf(n + 1)⌝ )) ⊑ aext !(aα), ¬ cod(ren)(cren(ca)) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα)) = (s0, as) |
paf(0) = cren(ca), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(⌜ca '⌝ + πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) ⊑ aext !(aα), ¬ cod(ren)(cren(ca)) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα)) = (s0, as)
| paf(0) = cren(ca), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(⌜ca '⌝ + πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) ⊑ aext !(aα), ¬ cod(ren)(cren(ca)) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα)) = (s0, as) |
paf(0) = cren(ca), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) ⊑ aext !(aα), ¬ cod(ren)(cren(ca)) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα)) = (s0, as)
Used simplifier rules: nounsharedextR-notcodren-internal: ⊦ ¬ cod(ren)(cren(ca)) ∧ nounsharedextR(cren, cext, ren) → (cext(ca) = None ↔ true); append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ [] + σ = σ; (s) ⊦ oe + β = (oe = None ⊃ [];⌜oe.get '⌝ ) + β; (s) ⊦ ext !(⌜a '⌝ + α) = ext(a) + ext !(α); (s)
| paf(0) = cren(ca), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) ⊑ aext !(aα), ¬ cod(ren)(cren(ca)) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα)) = (s0, as) |
⊦ cext !(πra(step, cstep, ren, cren, ⌜pcs '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα) → repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcs '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , aσ, aα) = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcs + pcsf.take(n), paf.take(n), aσ, aα)⌝ ⌝ )
paf(0) = cren(ca), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) ⊑ aext !(aα), ¬ cod(ren)(cren(ca)) ⊦ lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ≠ [] ∧ hd (lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = (s0, as)
Used terms: aren, ren, cstep, cext, aext, aα, cren, (s0, cs0), λ n. paf(n + 1), ⌜as '⌝ + aσ, step, λ n. pcsf(n + 1)
| ⊦ cext !(πra(step, cstep, ren, cren, ⌜pcs '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα) → repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcs '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , aσ, aα) = lim(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, pcs + pcsf.take(n), paf.take(n), aσ, aα)⌝ ⌝ ) |
| paf(0) = cren(ca), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) ⊑ aext !(aα), ¬ cod(ren)(cren(ca)) ⊦ lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ≠ [] ∧ hd (lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = (s0, as) |
paf(0) = cren(ca), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) ⊑ aext !(aα), ¬ cod(ren)(cren(ca)) ⊦ lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ≠ [] ∧ hd (lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = (s0, as)
Used simplifier rules: ⊦ a + x = a ' + x; (s)
| paf(0) = cren(ca), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) ⊑ aext !(aα), ¬ cod(ren)(cren(ca)) ⊦ lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ≠ [] ∧ hd (lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = (s0, as) |
⊦ mon(σσ) ∧ σσ ≠ [] → (∀ n. ⌜n⌝ < # σσ → σσ[n] ⊑ lim(σσ)) ∧ (∀ m. ¬ # lim(σσ) < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ ⌜lim(σσ).take(m)⌝ ⊑ σσ[n]))
paf(0) = cren(ca), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) ⊑ aext !(aα), ¬ cod(ren)(cren(ca)), mon (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ∧ ⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ≠ [] → (∀ n. ⌜n⌝ < # ⌜λ n. ⌜repls (step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα) ⌝ ⌝ → ⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα) ⌝ ⌝ [n ] ⊑ lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα) ⌝ ⌝ )) ∧ (∀ m. ¬ # lim (⌜λ n. ⌜repls (step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα) ⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜n⌝ < # ⌜λ n. ⌜repls (step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα) ⌝ ⌝ ∧ ⌜lim (⌜λ n. ⌜repls (step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα) ⌝ ⌝ ) .take (m ) ⌝ ⊑ ⌜λ n. ⌜repls (step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα) ⌝ ⌝ [n ])) ⊦ lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ≠ [] ∧ hd (lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = (s0, as)
Used terms: ⌜λ n. ⌜repls (step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα) ⌝ ⌝
| ⊦ mon(σσ) ∧ σσ ≠ [] → (∀ n. ⌜n⌝ < # σσ → σσ[n] ⊑ lim(σσ)) ∧ (∀ m. ¬ # lim(σσ) < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ ⌜lim(σσ).take(m)⌝ ⊑ σσ[n])) |
| paf(0) = cren(ca), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) ⊑ aext !(aα), ¬ cod(ren)(cren(ca)), mon (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ∧ ⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ≠ [] → (∀ n. ⌜n⌝ < # ⌜λ n. ⌜repls (step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα) ⌝ ⌝ → ⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα) ⌝ ⌝ [n ] ⊑ lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα) ⌝ ⌝ )) ∧ (∀ m. ¬ # lim (⌜λ n. ⌜repls (step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα) ⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜n⌝ < # ⌜λ n. ⌜repls (step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα) ⌝ ⌝ ∧ ⌜lim (⌜λ n. ⌜repls (step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα) ⌝ ⌝ ) .take (m ) ⌝ ⊑ ⌜λ n. ⌜repls (step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα) ⌝ ⌝ [n ])) ⊦ lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ≠ [] ∧ hd (lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = (s0, as) |
paf(0) = cren(ca), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) ⊑ aext !(aα), ¬ cod(ren)(cren(ca)), mon (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) → (∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) ∧ (∀ m. ¬ # lim (⌜λ n. ⌜repls (step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα) ⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim (⌜λ n. ⌜repls (step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα) ⌝ ⌝ ) .take (m ) ⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα) ⌝ )) ⊦ lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ≠ [] ∧ hd (lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = (s0, as)
Used simplifier rules: ⊦ ⌜nf⌝ [n] = nf(n); (s) ⊦ ⌜m⌝ < ∞; (s) ⊦ # ⌜nf⌝ = ∞; (s) ⊦ [] ≠ ⌜nf⌝ ; (s)
| paf(0) = cren(ca), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) ⊑ aext !(aα), ¬ cod(ren)(cren(ca)), mon (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) → (∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) ∧ (∀ m. ¬ # lim (⌜λ n. ⌜repls (step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα) ⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim (⌜λ n. ⌜repls (step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα) ⌝ ⌝ ) .take (m ) ⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα) ⌝ )) ⊦ lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ≠ [] ∧ hd (lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = (s0, as) |
paf(0) = cren(ca), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) ⊑ aext !(aα), ¬ cod(ren)(cren(ca)), ¬ mon(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦ lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ≠ [] ∧ hd (lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = (s0, as)
paf(0) = cren(ca), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) ⊑ aext !(aα), ¬ cod(ren)(cren(ca)), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα) ⌝ ⌝ ) .take (m ) ⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ) ⊦ lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ≠ [] ∧ hd (lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = (s0, as)
| paf(0) = cren(ca), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) ⊑ aext !(aα), ¬ cod(ren)(cren(ca)), ¬ mon(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦ lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ≠ [] ∧ hd (lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = (s0, as) |
⊦ nounsharedextR(cren, cext, ren) ∧ Πok(ext, cext, ren, cren) ∧ fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + pcsf, paf) ∧ frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα) ∧ cext !(πra(step, cstep, ren, cren, (s, cs) + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα) → mon(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )
Used simplifier rules: ⊦ a + σ = ⌜a '⌝ + σ; (s) Used terms: aren, ren, cstep, cext, s0, as, aext, aα, ext, astart, cstart, start, cren, astep, λ n. paf(n + 1), cs0, aσ, step, λ n. pcsf(n + 1)
| ⊦ nounsharedextR(cren, cext, ren) ∧ Πok(ext, cext, ren, cren) ∧ fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + pcsf, paf) ∧ frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα) ∧ cext !(πra(step, cstep, ren, cren, (s, cs) + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα) → mon(⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsf.take(n), paf.take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) |
| paf(0) = cren(ca), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) ⊑ aext !(aα), ¬ cod(ren)(cren(ca)), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ∀ m. ¬ # lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) < ⌜m⌝ → (∃ n. ⌜lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα) ⌝ ⌝ ) .take (m ) ⌝ ⊑ ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ) ⊦ lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ≠ [] ∧ hd (lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = (s0, as) |
paf(0) = cren(ca), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) ⊑ aext !(aα), ¬ cod(ren)(cren(ca)), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦ lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ≠ [] ∧ hd (lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = (s0, as)
| paf(0) = cren(ca), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) ⊑ aext !(aα), ¬ cod(ren)(cren(ca)), ∀ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ⊦ lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ≠ [] ∧ hd (lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = (s0, as) |
paf(0) = cren(ca), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) ⊑ aext !(aα), ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(0), (λ n. paf(n + 1)).take(0), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ¬ cod(ren)(cren(ca)) ⊦ lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ≠ [] ∧ hd (lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = (s0, as)
Used terms: 0
| paf(0) = cren(ca), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) ⊑ aext !(aα), ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(0), (λ n. paf(n + 1)).take(0), ⌜as '⌝ + aσ, aα)⌝ ⊑ lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ¬ cod(ren)(cren(ca)) ⊦ lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ≠ [] ∧ hd (lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = (s0, as) |
paf(0) = cren(ca), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) ⊑ aext !(aα), ⌜(s0, as) '⌝ ⊑ lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ¬ cod(ren)(cren(ca)) ⊦ lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ≠ [] ∧ hd (lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = (s0, as)
Used simplifier rules: repls-base: ⊦ repls(step, cstep, cren, ren, aren, cext, aext, (s, cs) ', [], ⌜as '⌝ + aσ, aα) = (s, as) '; append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ nf.take(0) = []; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ x + [] = x; (s)
| paf(0) = cren(ca), cstep(cs, ca, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) ⊑ aext !(aα), ⌜(s0, as) '⌝ ⊑ lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ), ¬ cod(ren)(cren(ca)) ⊦ lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ ) ≠ [] ∧ hd (lim (⌜λ n. ⌜repls(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα)⌝ ⌝ )) = (s0, as) |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
Used simplifier rules: ⊦ ⌜a '⌝ + σ ≠ []; (s) ⊦ hd(⌜a '⌝ + σ) = a; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream Used terms: ⌜(s0, as) '⌝ , lim (⌜λ n. ⌜repls (step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + (λ n. pcsf(n + 1)).take(n), (λ n. paf(n + 1)).take(n), ⌜as '⌝ + aσ, aα) ⌝ ⌝ )
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| paf(0) = ren(a0), paf(0) = cren(ca0), cext(ca0) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), step(s, a0, s0), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf(0) '⌝ + ⌜λ n. paf(n + 1)⌝ )) ⊑ aext !(aα) ⊦ repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf(0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd (repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜paf(0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα)) = (s, as) |
paf(0) = cren(ca0), ren(a0) = cren(ca0), cext(ca0) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), step(s, a0, s0), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ )) ⊑ aext !(aα) ⊦ repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd (repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα)) = (s, as)
| paf(0) = cren(ca0), ren(a0) = cren(ca0), cext(ca0) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), step(s, a0, s0), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ )) ⊑ aext !(aα) ⊦ repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd (repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα)) = (s, as) |
pa = rren(ra) ⊦ Πok(lext, rext, lren, rren) ∧ fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psf, paf) ∧ lstep(ls, la, ls0) ∧ rstep(rs, ra, rs0) ∧ lren(la) = rren(ra) → πra(lstep, rstep, lren, rren, ⌜(ls, rs) '⌝ + ⌜(ls0, rs0) '⌝ + ⌜psf⌝ , pa + ⌜paf⌝ ) = ⌜ra '⌝ + πra(lstep, rstep, lren, rren, ⌜(ls0, rs0) '⌝ + ⌜psf⌝ , ⌜paf⌝ )
paf(0) = cren(ca0), ren(a0) = cren(ca0), cext(ca0) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), step(s, a0, s0), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ )) ⊑ aext !(aα), Πok(ext, cext, ren, cren) ∧ fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)) ∧ step(s, a0, s0) ∧ cstep(cs, ca0, cs0) ∧ ren(a0) = cren(ca0) → πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ren(a0) + ⌜λ n. paf(n + 1)⌝ ) = ⌜ca0 '⌝ + πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ ) ⊦ repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd (repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα)) = (s, as)
Used terms: cext, ren(a0), cs, cstart, cstep, λ n. pcsf(n + 1), ca0, ren, ext, cren, a0, cs0, step, start, λ n. paf(n + 1), s, s0
| pa = rren(ra) ⊦ Πok(lext, rext, lren, rren) ∧ fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psf, paf) ∧ lstep(ls, la, ls0) ∧ rstep(rs, ra, rs0) ∧ lren(la) = rren(ra) → πra(lstep, rstep, lren, rren, ⌜(ls, rs) '⌝ + ⌜(ls0, rs0) '⌝ + ⌜psf⌝ , pa + ⌜paf⌝ ) = ⌜ra '⌝ + πra(lstep, rstep, lren, rren, ⌜(ls0, rs0) '⌝ + ⌜psf⌝ , ⌜paf⌝ ) |
| paf(0) = cren(ca0), ren(a0) = cren(ca0), cext(ca0) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), step(s, a0, s0), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ )) ⊑ aext !(aα), Πok(ext, cext, ren, cren) ∧ fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)) ∧ step(s, a0, s0) ∧ cstep(cs, ca0, cs0) ∧ ren(a0) = cren(ca0) → πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ren(a0) + ⌜λ n. paf(n + 1)⌝ ) = ⌜ca0 '⌝ + πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ ) ⊦ repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd (repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα)) = (s, as) |
paf(0) = cren(ca0), ren(a0) = cren(ca0), πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ ) = ⌜ca0 '⌝ + πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ ), cext(ca0) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), step(s, a0, s0), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ )) ⊑ aext !(aα) ⊦ repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd (repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα)) = (s, as)
Used simplifier rules: ⊦ a + σ = ⌜a '⌝ + σ; (s)
| paf(0) = cren(ca0), ren(a0) = cren(ca0), πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ ) = ⌜ca0 '⌝ + πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ ), cext(ca0) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), step(s, a0, s0), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ )) ⊑ aext !(aα) ⊦ repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd (repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα)) = (s, as) |
paf(0) = cren(ca0), ren(a0) = cren(ca0), πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ ) = ⌜ca0 '⌝ + πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ ), cext(ca0) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), step(s, a0, s0), Πok(ext, cext, ren, cren), cext !(⌜ca0 '⌝ + πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) ⊑ aext !(aα) ⊦ repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd (repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα)) = (s, as)
| paf(0) = cren(ca0), ren(a0) = cren(ca0), πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ ) = ⌜ca0 '⌝ + πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ ), cext(ca0) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), step(s, a0, s0), Πok(ext, cext, ren, cren), cext !(⌜ca0 '⌝ + πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) ⊑ aext !(aα) ⊦ repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd (repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα)) = (s, as) |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
paf(0) = cren(ca0), ren(a0) = cren(ca0), πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ ) = ⌜ca0 '⌝ + πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ ), cext(ca0) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), step(s, a0, s0), Πok(ext, cext, ren, cren), ∃ σ1. cext !(⌜ca0 '⌝ + πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) + σ1 = aext !(aα) ⊦ repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd (repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα)) = (s, as)
Used terms: cext ! ( ⌜ca0 '⌝ + πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )), aext !(aα)
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| paf(0) = cren(ca0), ren(a0) = cren(ca0), πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ ) = ⌜ca0 '⌝ + πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ ), cext(ca0) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), step(s, a0, s0), Πok(ext, cext, ren, cren), ∃ σ1. cext !(⌜ca0 '⌝ + πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) + σ1 = aext !(aα) ⊦ repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd (repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα)) = (s, as) |
(⌜cext(ca0).get '⌝ + cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ ))) + β = aext !(aα), paf(0) = cren(ca0), ren(a0) = cren(ca0), πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ ) = ⌜ca0 '⌝ + πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ ), cext(ca0) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), step(s, a0, s0), Πok(ext, cext, ren, cren) ⊦ repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd (repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα)) = (s, as)
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ ext(a) ≠ None → ext !(⌜a '⌝ + α) = ⌜ext(a).get '⌝ + ext !(α); (s)
| (⌜cext(ca0).get '⌝ + cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ ))) + β = aext !(aα), paf(0) = cren(ca0), ren(a0) = cren(ca0), πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ ) = ⌜ca0 '⌝ + πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ ), cext(ca0) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), step(s, a0, s0), Πok(ext, cext, ren, cren) ⊦ repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd (repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα)) = (s, as) |
(⌜e '⌝ + cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ ))) + β = aext !(aα), cext(ca0) = Some(e), paf(0) = cren(ca0), ren(a0) = cren(ca0), πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ ) = ⌜ca0 '⌝ + πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ ), cext(ca0) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), step(s, a0, s0), Πok(ext, cext, ren, cren) ⊦ repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd (repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα)) = (s, as)
Used simplifier rules: ⊦ opt ≠ None → (get = opt.get ↔ opt = Some(get)); (elim) Used terms: cext(ca0), e
| (⌜e '⌝ + cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ ))) + β = aext !(aα), cext(ca0) = Some(e), paf(0) = cren(ca0), ren(a0) = cren(ca0), πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ ) = ⌜ca0 '⌝ + πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ ), cext(ca0) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), step(s, a0, s0), Πok(ext, cext, ren, cren) ⊦ repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd (repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα)) = (s, as) |
(⌜e '⌝ + cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ ))) + β = aext !(aα), cext(ca0) = Some(e), paf(0) = cren(ca0), ren(a0) = cren(ca0), πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ ) = ⌜ca0 '⌝ + πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ ), Some(e) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), step(s, a0, s0), Πok(ext, cext, ren, cren) ⊦ repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd (repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα)) = (s, as)
| (⌜e '⌝ + cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ ))) + β = aext !(aα), cext(ca0) = Some(e), paf(0) = cren(ca0), ren(a0) = cren(ca0), πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ ) = ⌜ca0 '⌝ + πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ ), Some(e) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), step(s, a0, s0), Πok(ext, cext, ren, cren) ⊦ repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd (repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα)) = (s, as) |
⊦ ext !(α) = ⌜e '⌝ + β ↔ (∃ al, a, α0. α = ⌜al⌝ + ⌜a '⌝ + α0 ∧ ext(a) = Some(e) ∧ ext !(⌜al⌝ ) = [] ∧ ext !(α0) = β)
cext(ca0) = Some(e), paf(0) = cren(ca0), ren(a0) = cren(ca0), πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ ) = ⌜ca0 '⌝ + πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ ), Some(e) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), step(s, a0, s0), Πok(ext, cext, ren, cren), ∃ al, aa, α0. aα = ⌜al⌝ + ⌜aa '⌝ + α0 ∧ aext(aa) = Some(e) ∧ aext !(⌜al⌝ ) = [] ∧ aext !(α0) = cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) + β ⊦ repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd (repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα)) = (s, as)
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream Used terms: e, cext ! (πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) + β, aext, aα
| ⊦ ext !(α) = ⌜e '⌝ + β ↔ (∃ al, a, α0. α = ⌜al⌝ + ⌜a '⌝ + α0 ∧ ext(a) = Some(e) ∧ ext !(⌜al⌝ ) = [] ∧ ext !(α0) = β) |
| cext(ca0) = Some(e), paf(0) = cren(ca0), ren(a0) = cren(ca0), πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ ) = ⌜ca0 '⌝ + πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ ), Some(e) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), step(s, a0, s0), Πok(ext, cext, ren, cren), ∃ al, aa, α0. aα = ⌜al⌝ + ⌜aa '⌝ + α0 ∧ aext(aa) = Some(e) ∧ aext !(⌜al⌝ ) = [] ∧ aext !(α0) = cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) + β ⊦ repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd (repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, aα)) = (s, as) |
aext !(aα0) = cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) + β, aext !(aal) = [], aext(aa) = Some(e), cext(ca0) = Some(e), paf(0) = cren(ca0), ren(a0) = cren(ca0), πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ ) = ⌜ca0 '⌝ + πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ ), Some(e) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), step(s, a0, s0), Πok(ext, cext, ren, cren) ⊦ repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0) ≠ [] ∧ hd (repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0)) = (s, as)
Used simplifier rules: ⊦ ⌜x⌝ = [] ↔ x = []; (s) ⊦ ext !(⌜al⌝ ) = ⌜ext !(al)⌝ ; (s)
| aext !(aα0) = cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) + β, aext !(aal) = [], aext(aa) = Some(e), cext(ca0) = Some(e), paf(0) = cren(ca0), ren(a0) = cren(ca0), πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ ) = ⌜ca0 '⌝ + πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ ), Some(e) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), step(s, a0, s0), Πok(ext, cext, ren, cren) ⊦ repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0) ≠ [] ∧ hd (repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0)) = (s, as) |
⊦ nounsharedextR(cren, cext, ren) ∧ Πok(ext, cext, ren, cren) ∧ cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ )) ⊑ aext !(⌜aa '⌝ + aα) ∧ frag(IOAut(astart, astep, aext))(aσ, ⌜aal⌝ + ⌜aa '⌝ + aα) ∧ aext !(⌜aal⌝ ) = [] ∧ n = # aal ∧ fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + pcsf, paf) ∧ step(s, a, s0) ∧ cstep(cs, ca, cs0) ∧ ren(a) = cren(ca) ∧ cext(ca) = aext(aa) → repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ , aσ, ⌜aal⌝ + ⌜aa '⌝ + aα) = ⌜lift(aσ.take(n), s)⌝ + ⌜(s, aσ[n]) '⌝ + repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs0) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , aσ.drop(n + 1), aα)
aext !(aal) = [], aext !(aα0) = cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) + β, aext(aa) = Some(e), cext(ca0) = Some(e), paf(0) = cren(ca0), ren(a0) = cren(ca0), πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ ) = ⌜ca0 '⌝ + πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ ), Some(e) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), step(s, a0, s0), Πok(ext, cext, ren, cren), nounsharedextR(cren, cext, ren) ∧ Πok(ext, cext, ren, cren) ∧ cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜ren(a0) '⌝ + ⌜λ n. paf(n + 1)⌝ )) ⊑ aext !(⌜aa '⌝ + aα0) ∧ frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0) ∧ aext !(⌜aal⌝ ) = [] ∧ # aal = # aal ∧ fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)) ∧ step(s, a0, s0) ∧ cstep(cs, ca0, cs0) ∧ ren(a0) = cren(ca0) ∧ cext(ca0) = aext(aa) → repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜ren(a0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0) = ⌜lift((⌜as '⌝ + aσ).take(# aal), s)⌝ + ⌜(s, (⌜as '⌝ + aσ)[# aal]) '⌝ + repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ , (⌜as '⌝ + aσ).drop(# aal + 1), aα0) ⊦ repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0) ≠ [] ∧ hd (repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0)) = (s, as)
Used terms: aren, ren, cstep, cext, aa, s, aext, aα0, ext, ca0, astart, a0, cstart, start, cren, aal, astep, cs0, s0, λ n. paf(n + 1), cs, # aal, ⌜as '⌝ + aσ, step, λ n. pcsf(n + 1)
| ⊦ nounsharedextR(cren, cext, ren) ∧ Πok(ext, cext, ren, cren) ∧ cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ )) ⊑ aext !(⌜aa '⌝ + aα) ∧ frag(IOAut(astart, astep, aext))(aσ, ⌜aal⌝ + ⌜aa '⌝ + aα) ∧ aext !(⌜aal⌝ ) = [] ∧ n = # aal ∧ fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + pcsf, paf) ∧ step(s, a, s0) ∧ cstep(cs, ca, cs0) ∧ ren(a) = cren(ca) ∧ cext(ca) = aext(aa) → repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜pcsf⌝ , ⌜ren(a) '⌝ + ⌜paf⌝ , aσ, ⌜aal⌝ + ⌜aa '⌝ + aα) = ⌜lift(aσ.take(n), s)⌝ + ⌜(s, aσ[n]) '⌝ + repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs0) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , aσ.drop(n + 1), aα) |
| aext !(aal) = [], aext !(aα0) = cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) + β, aext(aa) = Some(e), cext(ca0) = Some(e), paf(0) = cren(ca0), ren(a0) = cren(ca0), πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ ) = ⌜ca0 '⌝ + πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ ), Some(e) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), step(s, a0, s0), Πok(ext, cext, ren, cren), nounsharedextR(cren, cext, ren) ∧ Πok(ext, cext, ren, cren) ∧ cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜ren(a0) '⌝ + ⌜λ n. paf(n + 1)⌝ )) ⊑ aext !(⌜aa '⌝ + aα0) ∧ frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0) ∧ aext !(⌜aal⌝ ) = [] ∧ # aal = # aal ∧ fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)) ∧ step(s, a0, s0) ∧ cstep(cs, ca0, cs0) ∧ ren(a0) = cren(ca0) ∧ cext(ca0) = aext(aa) → repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜ren(a0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0) = ⌜lift((⌜as '⌝ + aσ).take(# aal), s)⌝ + ⌜(s, (⌜as '⌝ + aσ)[# aal]) '⌝ + repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ , (⌜as '⌝ + aσ).drop(# aal + 1), aα0) ⊦ repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0) ≠ [] ∧ hd (repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0)) = (s, as) |
aext !(aal) = [], aext !(aα0) = cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) + β, aext(aa) = Some(e), cext(ca0) = Some(e), paf(0) = cren(ca0), ren(a0) = cren(ca0), πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ ) = ⌜ca0 '⌝ + πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ ), Some(e) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), step(s, a0, s0), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ )) ⊑ ⌜Some(e).get '⌝ + aext !(aα0) → repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0) = ⌜lift((⌜as '⌝ + aσ).take(# aal), s)⌝ + ⌜(s, (⌜as '⌝ + aσ)[# aal]) '⌝ + repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ , aσ.drop(# aal), aα0) ⊦ repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0) ≠ [] ∧ hd (repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0)) = (s, as)
Used simplifier rules: 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 ⊦ n + 0 = n; (s) ⊦ n ≠ 0 → (⌜a '⌝ + σ).drop((* n) + m) = σ.drop((n - 1) + m); (s) ⊦ ⌜x⌝ = [] ↔ x = []; (s) ⊦ ext !(⌜al⌝ ) = ⌜ext !(al)⌝ ; (s) ⊦ oe + β = (oe = None ⊃ [];⌜oe.get '⌝ ) + β; (s) ⊦ ext !(⌜a '⌝ + α) = ext(a) + ext !(α); (s)
| aext !(aal) = [], aext !(aα0) = cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) + β, aext(aa) = Some(e), cext(ca0) = Some(e), paf(0) = cren(ca0), ren(a0) = cren(ca0), πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ ) = ⌜ca0 '⌝ + πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ ), Some(e) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), step(s, a0, s0), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ )) ⊑ ⌜Some(e).get '⌝ + aext !(aα0) → repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0) = ⌜lift((⌜as '⌝ + aσ).take(# aal), s)⌝ + ⌜(s, (⌜as '⌝ + aσ)[# aal]) '⌝ + repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ , aσ.drop(# aal), aα0) ⊦ repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0) ≠ [] ∧ hd (repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0)) = (s, as) |
aext !(aα0) = cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) + β, aext !(aal) = [], aext(aa) = Some(e), cext(ca0) = Some(e), paf(0) = cren(ca0), ren(a0) = cren(ca0), πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ ) = ⌜ca0 '⌝ + πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ ), Some(e) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), step(s, a0, s0), Πok(ext, cext, ren, cren), ¬ cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ )) ⊑ ⌜Some(e).get '⌝ + aext !(aα0) ⊦ repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0) ≠ [] ∧ hd (repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0)) = (s, as)
aext !(aα0) = cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) + β, aext !(aal) = [], aext(aa) = Some(e), cext(ca0) = Some(e), paf(0) = cren(ca0), ren(a0) = cren(ca0), repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0) = ⌜lift((⌜as '⌝ + aσ).take(# aal), s)⌝ + ⌜(s, (⌜as '⌝ + aσ)[# aal]) '⌝ + repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ , aσ.drop(# aal), aα0), πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ ) = ⌜ca0 '⌝ + πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ ), Some(e) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), step(s, a0, s0), Πok(ext, cext, ren, cren) ⊦ repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0) ≠ [] ∧ hd (repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0)) = (s, as)
| aext !(aα0) = cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) + β, aext !(aal) = [], aext(aa) = Some(e), cext(ca0) = Some(e), paf(0) = cren(ca0), ren(a0) = cren(ca0), πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ ) = ⌜ca0 '⌝ + πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ ), Some(e) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), step(s, a0, s0), Πok(ext, cext, ren, cren), ¬ cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ )) ⊑ ⌜Some(e).get '⌝ + aext !(aα0) ⊦ repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0) ≠ [] ∧ hd (repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0)) = (s, as) |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
aext !(aal) = [], aext !(aα0) = cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) + β, aext(aa) = Some(e), cext(ca0) = Some(e), paf(0) = cren(ca0), ren(a0) = cren(ca0), πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ ) = ⌜ca0 '⌝ + πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ ), Some(e) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), step(s, a0, s0), Πok(ext, cext, ren, cren), ∀ σ1. cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ )) + σ1 ≠ ⌜Some(e).get '⌝ + aext !(aα0) ⊦ repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0) ≠ [] ∧ hd (repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0)) = (s, as)
Used terms: cext ! (πra (step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ )), ⌜Some(e).get '⌝ + aext !(aα0)
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| aext !(aal) = [], aext !(aα0) = cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) + β, aext(aa) = Some(e), cext(ca0) = Some(e), paf(0) = cren(ca0), ren(a0) = cren(ca0), πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ ) = ⌜ca0 '⌝ + πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ ), Some(e) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), step(s, a0, s0), Πok(ext, cext, ren, cren), ∀ σ1. cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ )) + σ1 ≠ ⌜Some(e).get '⌝ + aext !(aα0) ⊦ repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0) ≠ [] ∧ hd (repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0)) = (s, as) |
aext !(aα0) = cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) + β, aext !(aal) = [], aext(aa) = Some(e), cext(ca0) = Some(e), paf(0) = cren(ca0), ren(a0) = cren(ca0), πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ ) = ⌜ca0 '⌝ + πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ ), Some(e) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), step(s, a0, s0), Πok(ext, cext, ren, cren), ∀ σ1. cext !(⌜ca0 '⌝ + πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) + σ1 ≠ ⌜Some(e).get '⌝ + aext !(aα0) ⊦ repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0) ≠ [] ∧ hd (repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0)) = (s, as)
| aext !(aα0) = cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) + β, aext !(aal) = [], aext(aa) = Some(e), cext(ca0) = Some(e), paf(0) = cren(ca0), ren(a0) = cren(ca0), πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ ) = ⌜ca0 '⌝ + πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ ), Some(e) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), step(s, a0, s0), Πok(ext, cext, ren, cren), ∀ σ1. cext !(⌜ca0 '⌝ + πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) + σ1 ≠ ⌜Some(e).get '⌝ + aext !(aα0) ⊦ repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0) ≠ [] ∧ hd (repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0)) = (s, as) |
aext !(aα0) = cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) + β, aext !(aal) = [], aext(aa) = Some(e), cext(ca0) = Some(e), paf(0) = cren(ca0), ren(a0) = cren(ca0), πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ ) = ⌜ca0 '⌝ + πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ ), Some(e) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), step(s, a0, s0), Πok(ext, cext, ren, cren), ∀ σ1. cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) + σ1 ≠ aext !(aα0) ⊦ repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0) ≠ [] ∧ hd (repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0)) = (s, as)
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ # x = # y → (⌜x⌝ + σ = ⌜y⌝ + σ0 ↔ x = y ∧ σ = σ0); (s) ⊦ oe + β = (oe = None ⊃ [];⌜oe.get '⌝ ) + β; (s) ⊦ ext !(⌜a '⌝ + α) = ext(a) + ext !(α); (s)
| aext !(aα0) = cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) + β, aext !(aal) = [], aext(aa) = Some(e), cext(ca0) = Some(e), paf(0) = cren(ca0), ren(a0) = cren(ca0), πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ ) = ⌜ca0 '⌝ + πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ ), Some(e) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), step(s, a0, s0), Πok(ext, cext, ren, cren), ∀ σ1. cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) + σ1 ≠ aext !(aα0) ⊦ repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0) ≠ [] ∧ hd (repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0)) = (s, as) |
Used terms: β
| aext !(aα0) = cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) + β, aext !(aal) = [], aext(aa) = Some(e), cext(ca0) = Some(e), paf(0) = cren(ca0), ren(a0) = cren(ca0), repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0) = ⌜lift((⌜as '⌝ + aσ).take(# aal), s)⌝ + ⌜(s, (⌜as '⌝ + aσ)[# aal]) '⌝ + repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ , aσ.drop(# aal), aα0), πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ ) = ⌜ca0 '⌝ + πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ ), Some(e) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), step(s, a0, s0), Πok(ext, cext, ren, cren) ⊦ repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0) ≠ [] ∧ hd (repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ , ⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0)) = (s, as) |
aext !(aal) = [], aext !(aα0) = cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) + β, aext(aa) = Some(e), cext(ca0) = Some(e), paf(0) = cren(ca0), ren(a0) = cren(ca0), πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ ) = ⌜ca0 '⌝ + πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ ), Some(e) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), step(s, a0, s0), Πok(ext, cext, ren, cren) ⊦ ⌜lift((⌜as '⌝ + aσ).take(# aal), s)⌝ + ⌜(s, (⌜as '⌝ + aσ)[# aal]) '⌝ + repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ , aσ.drop(# aal), aα0) ≠ [] ∧ hd ( ⌜lift((⌜as '⌝ + aσ).take(# aal), s)⌝ + ⌜(s, (⌜as '⌝ + aσ)[# aal]) '⌝ + repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ , aσ.drop(# aal), aα0)) = (s, as)
| aext !(aal) = [], aext !(aα0) = cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) + β, aext(aa) = Some(e), cext(ca0) = Some(e), paf(0) = cren(ca0), ren(a0) = cren(ca0), πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ ) = ⌜ca0 '⌝ + πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ ), Some(e) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), step(s, a0, s0), Πok(ext, cext, ren, cren) ⊦ ⌜lift((⌜as '⌝ + aσ).take(# aal), s)⌝ + ⌜(s, (⌜as '⌝ + aσ)[# aal]) '⌝ + repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ , aσ.drop(# aal), aα0) ≠ [] ∧ hd ( ⌜lift((⌜as '⌝ + aσ).take(# aal), s)⌝ + ⌜(s, (⌜as '⌝ + aσ)[# aal]) '⌝ + repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ , aσ.drop(# aal), aα0)) = (s, as) |
aext !(aal) = [], aext !(aα0) = cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) + β, aext(aa) = Some(e), cext(ca0) = Some(e), paf(0) = cren(ca0), ren(a0) = cren(ca0), πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ ) = ⌜ca0 '⌝ + πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ ), ⌜lift((⌜as '⌝ + aσ).take(# aal), s)⌝ + ⌜(s, (⌜as '⌝ + aσ)[# aal]) '⌝ + repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ , aσ.drop(# aal), aα0) ≠ [], Some(e) ≠ None, ext(a0) ≠ None, hd ( ⌜lift((⌜as '⌝ + aσ).take(# aal), s)⌝ + ⌜(s, (⌜as '⌝ + aσ)[# aal]) '⌝ + repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ , aσ.drop(# aal), aα0)) ≠ (s, as), cstep(cs, ca0, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), step(s, a0, s0), Πok(ext, cext, ren, cren) ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ ⌜a '⌝ + σ ≠ []; (s) ⊦ ⌜x⌝ = [] ↔ x = []; (s) ⊦ σ0 + σ1 = [] ↔ σ0 = [] ∧ σ1 = []; (ws)
| aext !(aal) = [], aext !(aα0) = cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) + β, aext(aa) = Some(e), cext(ca0) = Some(e), paf(0) = cren(ca0), ren(a0) = cren(ca0), πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ ) = ⌜ca0 '⌝ + πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ ), ⌜lift((⌜as '⌝ + aσ).take(# aal), s)⌝ + ⌜(s, (⌜as '⌝ + aσ)[# aal]) '⌝ + repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ , aσ.drop(# aal), aα0) ≠ [], Some(e) ≠ None, ext(a0) ≠ None, hd ( ⌜lift((⌜as '⌝ + aσ).take(# aal), s)⌝ + ⌜(s, (⌜as '⌝ + aσ)[# aal]) '⌝ + repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ , aσ.drop(# aal), aα0)) ≠ (s, as), cstep(cs, ca0, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), step(s, a0, s0), Πok(ext, cext, ren, cren) ⊦ |
aext !(aα0) = cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) + β, aext !(aal) = [], ⌜lift((⌜as '⌝ + aσ).take(# aal), s)⌝ + ⌜(s, (⌜as '⌝ + aσ)[# aal]) '⌝ + repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ , aσ.drop(# aal), aα0) = pas + σ0, aext(aa) = Some(e), cext(ca0) = Some(e), paf(0) = cren(ca0), ren(a0) = cren(ca0), πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ ) = ⌜ca0 '⌝ + πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ ), ⌜lift((⌜as '⌝ + aσ).take(# aal), s)⌝ + ⌜(s, (⌜as '⌝ + aσ)[# aal]) '⌝ + repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ , aσ.drop(# aal), aα0) ≠ [], Some(e) ≠ None, ext(a0) ≠ None, pas ≠ (s, as), cstep(cs, ca0, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), step(s, a0, s0), Πok(ext, cext, ren, cren) ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ σ ≠ [] → (a = hd(σ) ∧ σ0 = tl(σ) ↔ σ = a + σ0); (elim) Used terms: ⌜lift((⌜as '⌝ + aσ).take(# aal), s)⌝ + ⌜(s, (⌜as '⌝ + aσ)[# aal]) '⌝ + repls (step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ , aσ.drop(# aal), aα0), pas, σ0
| aext !(aα0) = cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) + β, aext !(aal) = [], ⌜lift((⌜as '⌝ + aσ).take(# aal), s)⌝ + ⌜(s, (⌜as '⌝ + aσ)[# aal]) '⌝ + repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ , aσ.drop(# aal), aα0) = pas + σ0, aext(aa) = Some(e), cext(ca0) = Some(e), paf(0) = cren(ca0), ren(a0) = cren(ca0), πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ ) = ⌜ca0 '⌝ + πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ ), ⌜lift((⌜as '⌝ + aσ).take(# aal), s)⌝ + ⌜(s, (⌜as '⌝ + aσ)[# aal]) '⌝ + repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ , aσ.drop(# aal), aα0) ≠ [], Some(e) ≠ None, ext(a0) ≠ None, pas ≠ (s, as), cstep(cs, ca0, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), step(s, a0, s0), Πok(ext, cext, ren, cren) ⊦ |
aext !(aα0) = cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) + β, aext !(aal) = [], ⌜lift((⌜as '⌝ + aσ).take(# aal), s)⌝ + ⌜(s, (⌜as '⌝ + aσ)[# aal]) '⌝ + repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ , aσ.drop(# aal), aα0) = ⌜pas '⌝ + σ0, aext(aa) = Some(e), cext(ca0) = Some(e), paf(0) = cren(ca0), ren(a0) = cren(ca0), πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ ) = ⌜ca0 '⌝ + πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ ), Some(e) ≠ None, ext(a0) ≠ None, pas ≠ (s, as), cstep(cs, ca0, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), step(s, a0, s0), Πok(ext, cext, ren, cren) ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ ⌜a '⌝ + σ ≠ []; (s) ⊦ a + σ = ⌜a '⌝ + σ; (s)
| aext !(aα0) = cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ )) + β, aext !(aal) = [], ⌜lift((⌜as '⌝ + aσ).take(# aal), s)⌝ + ⌜(s, (⌜as '⌝ + aσ)[# aal]) '⌝ + repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ , aσ.drop(# aal), aα0) = ⌜pas '⌝ + σ0, aext(aa) = Some(e), cext(ca0) = Some(e), paf(0) = cren(ca0), ren(a0) = cren(ca0), πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜cren(ca0) '⌝ + ⌜λ n. paf(n + 1)⌝ ) = ⌜ca0 '⌝ + πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + ⌜λ n. pcsf(n + 1)⌝ , ⌜λ n. paf(n + 1)⌝ ), Some(e) ≠ None, ext(a0) ≠ None, pas ≠ (s, as), cstep(cs, ca0, cs0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s0, cs0) ' + (λ n. pcsf(n + 1)), λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), step(s, a0, s0), Πok(ext, cext, ren, cren) ⊦ |
⊦ n ≠ 0 → (⌜a '⌝ + σ).take((* n)) = a ' + σ.take(n - 1)
Used simplifier rules: lift-base: ⊦ lift([], s) = []; lift-rec: ⊦ lift(as ' + asl, s) = (s, as) ' + lift(asl, s); ⊦ ⌜x + y⌝ = ⌜x⌝ + ⌜y⌝ ; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ⌜a '⌝ + σ = ⌜a0 '⌝ + σ0 ↔ a = a0 ∧ σ = σ0; (ws) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ # x = 0 ↔ x = []; (s) ⊦ σ.take(0) = []; (s) ⊦ ⌜[]⌝ = []; (s) ⊦ (⌜a '⌝ + σ)[0] = a; (s) ⊦ # [] = 0; (s) ⊦ σ.drop(0) = σ; (s) ⊦ [] + σ = σ; (s) Used terms: as, aσ, # aal
| ⊦ n ≠ 0 → (⌜a '⌝ + σ).take((* n)) = a ' + σ.take(n - 1) |
| (s0, cs0) = pcsf(0), pcsf ≠ (s0, cs0) ' + (λ n. pcsf(n + 1)), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Π(step, cstep, ren, cren, ext, cext)((s, cs), paf(0), (s0, cs0)), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα)) = (s, as) |
⊦ x + nf = (λ n. (n < # x ⊃ x[n];nf(n - # x)))
(s0, cs0) = pcsf(0), pcsf ≠ (λ n. (n < # (s0, cs0) ' ⊃ (s0, cs0) '[n];pcsf((n - # (s0, cs0) ') + 1))), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Π(step, cstep, ren, cren, ext, cext)((s, cs), paf(0), (s0, cs0)), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα)) = (s, as)
Used terms: (s0, cs0) ', λ n. pcsf(n + 1)
| ⊦ x + nf = (λ n. (n < # x ⊃ x[n];nf(n - # x))) |
| (s0, cs0) = pcsf(0), pcsf ≠ (λ n. (n < # (s0, cs0) ' ⊃ (s0, cs0) '[n];pcsf((n - # (s0, cs0) ') + 1))), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Π(step, cstep, ren, cren, ext, cext)((s, cs), paf(0), (s0, cs0)), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα)) = (s, as) |
(s0, cs0) = pcsf(0), pcsf(n) ≠ (n = 0 ⊃ (s0, cs0);pcsf((n - 1) + 1)), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Π(step, cstep, ren, cren, ext, cext)((s, cs), paf(0), (s0, cs0)), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα)) = (s, as)
Used simplifier rules: ⊦ # a ' = 0 +1; (s) ⊦ a '[0] = a; (s) ⊦ m < 1 ↔ m = 0; (s)
| (s0, cs0) = pcsf(0), pcsf(n) ≠ (n = 0 ⊃ (s0, cs0);pcsf((n - 1) + 1)), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Π(step, cstep, ren, cren, ext, cext)((s, cs), paf(0), (s0, cs0)), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα)) = (s, as) |
(s0, cs0) = pcsf(0), n ≠ 0, pcsf(n) ≠ pcsf((n - 1) + 1), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Π(step, cstep, ren, cren, ext, cext)((s, cs), paf(0), (s0, cs0)), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα)) = (s, as)
| (s0, cs0) = pcsf(0), n ≠ 0, pcsf(n) ≠ pcsf((n - 1) + 1), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsf, λ n. paf(n + 1)), nounsharedextR(cren, cext, ren), Π(step, cstep, ren, cren, ext, cext)((s, cs), paf(0), (s0, cs0)), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ )) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s, cs) '⌝ + ⌜pcsf⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα)) = (s, as) |
Used simplifier rules: n ≠ 0 ⊦ m = n - 1 ↔ n = m + 1; (elim) Used terms: n, n0
| ⌜pcsf0⌝ = ⌜(s, cs) '⌝ + ⌜pcsf⌝ , pcsf0 ≠ (s, cs) ' + pcsf, frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + pcsf, paf), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜pcsf0⌝ , ⌜paf⌝ )) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf0⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf0⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα)) = (s, as) |
⊦ x + nf = (λ n. (n < # x ⊃ x[n];nf(n - # x)))
⌜pcsf0⌝ = ⌜(s, cs) '⌝ + ⌜pcsf⌝ , pcsf0 ≠ (λ n. (n < # (s, cs) ' ⊃ (s, cs) '[n];pcsf(n - # (s, cs) '))), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren))) (λ n. (n < # (s, cs) ' ⊃ (s, cs) '[n];pcsf(n - # (s, cs) ')), paf), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜pcsf0⌝ , ⌜paf⌝ )) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf0⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf0⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα)) = (s, as)
Used terms: (s, cs) ', pcsf
| ⊦ x + nf = (λ n. (n < # x ⊃ x[n];nf(n - # x))) |
| ⌜pcsf0⌝ = ⌜(s, cs) '⌝ + ⌜pcsf⌝ , pcsf0 ≠ (λ n. (n < # (s, cs) ' ⊃ (s, cs) '[n];pcsf(n - # (s, cs) '))), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren))) (λ n. (n < # (s, cs) ' ⊃ (s, cs) '[n];pcsf(n - # (s, cs) ')), paf), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜pcsf0⌝ , ⌜paf⌝ )) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf0⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf0⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα)) = (s, as) |
⌜pcsf0⌝ = ⌜(s, cs) '⌝ + ⌜pcsf⌝ , pcsf0(n) ≠ (n = 0 ⊃ (s, cs);pcsf(n - 1)), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(λ n0. (n0 = 0 ⊃ (s, cs);pcsf(n0 - 1)), paf), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜pcsf0⌝ , ⌜paf⌝ )) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf0⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf0⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα)) = (s, as)
Used simplifier rules: ⊦ # a ' = 0 +1; (s) ⊦ a '[0] = a; (s) ⊦ m < 1 ↔ m = 0; (s)
| ⌜pcsf0⌝ = ⌜(s, cs) '⌝ + ⌜pcsf⌝ , pcsf0(n) ≠ (n = 0 ⊃ (s, cs);pcsf(n - 1)), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), fragω(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(λ n0. (n0 = 0 ⊃ (s, cs);pcsf(n0 - 1)), paf), nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), cext !(πra(step, cstep, ren, cren, ⌜pcsf0⌝ , ⌜paf⌝ )) ⊑ aext !(aα) ⊦ repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf0⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα) ≠ [] ∧ hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcsf0⌝ , ⌜paf⌝ , ⌜as '⌝ + aσ, aα)) = (s, as) |
⊦ ⌜x⌝ + ⌜nf⌝ = ⌜λ n. (n < # x ⊃ x[n];nf(n - # x))⌝
Used simplifier rules: ⊦ m < 1 ↔ m = 0; (s) ⊦ a '[0] = a; (s) ⊦ # a ' = 0 +1; (s) ⊦ ⌜nf⌝ = ⌜nf0⌝ ↔ nf = nf0; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream Used terms: (s, cs) ', pcsf
| ⊦ ⌜x⌝ + ⌜nf⌝ = ⌜λ n. (n < # x ⊃ x[n];nf(n - # x))⌝ |
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.