| IOAut?(IOAut(start, step, ext)), IOAut?(IOAut(cstart, cstep, cext)), IOAut?(IOAut(astart, astep, aext)), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), exec(Π(IOAut(start, step, ext), IOAut(cstart, cstep, cext), ren, cren))(pcσ, pα), exec(IOAut(astart, astep, aext))(aσ, aα), cext !(πra(step, cstep, ren, cren, pcσ, pα)) = aext !(aα) ⊦ exec(Π(IOAut(start, step, ext), IOAut(astart, astep, aext), ren, aren)) (repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)) |
cext !(πra(step, cstep, ren, cren, pcσ, pα)) = aext !(aα), IOAut?(IOAut(astart, astep, aext)), IOAut?(IOAut(cstart, cstep, cext)), IOAut?(IOAut(start, step, ext)), exec(IOAut(astart, astep, aext))(aσ, aα), exec(Π(IOAut(start, step, ext), IOAut(cstart, cstep, cext), ren, cren))(pcσ, pα), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ exec(Π(IOAut(start, step, ext), IOAut(astart, astep, aext), ren, aren)) (repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)) ⊦
| cext !(πra(step, cstep, ren, cren, pcσ, pα)) = aext !(aα), IOAut?(IOAut(astart, astep, aext)), IOAut?(IOAut(cstart, cstep, cext)), IOAut?(IOAut(start, step, ext)), exec(IOAut(astart, astep, aext))(aσ, aα), exec(Π(IOAut(start, step, ext), IOAut(cstart, cstep, cext), ren, cren))(pcσ, pα), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), sameshared(cren, aren, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ exec(Π(IOAut(start, step, ext), IOAut(astart, astep, aext), ren, aren)) (repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)) ⊦ |
⊦ IOAut?(IOAut(start, step, ext)) ↔ (∃ s. start(s) ∧ oinj(ext))
cext !(πra(step, cstep, ren, cren, pcσ, pα)) = aext !(aα), IOAut?(IOAut(start, step, ext)), IOAut?(IOAut(cstart, cstep, cext)), exec(Π(IOAut(start, step, ext), IOAut(cstart, cstep, cext), ren, cren))(pcσ, pα), exec(IOAut(astart, astep, aext))(aσ, aα), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ exec(Π(IOAut(start, step, ext), IOAut(astart, astep, aext), ren, aren)) (repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)), ∃ as. astart(as) ∧ oinj(aext) ⊦
Used terms: astart, astep, aext
| ⊦ IOAut?(IOAut(start, step, ext)) ↔ (∃ s. start(s) ∧ oinj(ext)) |
| cext !(πra(step, cstep, ren, cren, pcσ, pα)) = aext !(aα), IOAut?(IOAut(start, step, ext)), IOAut?(IOAut(cstart, cstep, cext)), exec(Π(IOAut(start, step, ext), IOAut(cstart, cstep, cext), ren, cren))(pcσ, pα), exec(IOAut(astart, astep, aext))(aσ, aα), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), sameshared(cren, aren, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ exec(Π(IOAut(start, step, ext), IOAut(astart, astep, aext), ren, aren)) (repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)), ∃ as. astart(as) ∧ oinj(aext) ⊦ |
cext !(πra(step, cstep, ren, cren, pcσ, pα)) = aext !(aα), IOAut?(IOAut(cstart, cstep, cext)), IOAut?(IOAut(start, step, ext)), astart(as), astart(aσ[0]), frag(IOAut(astart, astep, aext))(aσ, aα), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcσ, pα), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(aext), sameshared(cren, aren, ren), Π(start, cstart)(pcσ[0]), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren) ⊦ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)) ∧ Π(start, astart)(repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)[0])
Used simplifier rules: ⊦ IOAut(start, step, ext).start = start; (s) ⊦ exec(ioa)(σ, α) ↔ frag(ioa)(σ, α) ∧ ioa.start(σ[0]); (s) ⊦ Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren) = IOAut (Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)); (s)
| cext !(πra(step, cstep, ren, cren, pcσ, pα)) = aext !(aα), IOAut?(IOAut(cstart, cstep, cext)), IOAut?(IOAut(start, step, ext)), astart(as), astart(aσ[0]), frag(IOAut(astart, astep, aext))(aσ, aα), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcσ, pα), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(aext), sameshared(cren, aren, ren), Π(start, cstart)(pcσ[0]), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren) ⊦ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)) ∧ Π(start, astart)(repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)[0]) |
⊦ IOAut?(IOAut(start, step, ext)) ↔ (∃ s. start(s) ∧ oinj(ext))
cext !(πra(step, cstep, ren, cren, pcσ, pα)) = aext !(aα), IOAut?(IOAut(cstart, cstep, cext)), astart(aσ[0]), astart(as), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcσ, pα), frag(IOAut(astart, astep, aext))(aσ, aα), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(aext), sameshared(cren, aren, ren), Π(start, cstart)(pcσ[0]), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ∃ s. start(s) ∧ oinj(ext) ⊦ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)) ∧ Π(start, astart)(repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)[0])
Used terms: start, step, ext
| ⊦ IOAut?(IOAut(start, step, ext)) ↔ (∃ s. start(s) ∧ oinj(ext)) |
| cext !(πra(step, cstep, ren, cren, pcσ, pα)) = aext !(aα), IOAut?(IOAut(cstart, cstep, cext)), astart(aσ[0]), astart(as), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcσ, pα), frag(IOAut(astart, astep, aext))(aσ, aα), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(aext), sameshared(cren, aren, ren), Π(start, cstart)(pcσ[0]), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ∃ s. start(s) ∧ oinj(ext) ⊦ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)) ∧ Π(start, astart)(repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)[0]) |
cext !(πra(step, cstep, ren, cren, pcσ, pα)) = aext !(aα), IOAut?(IOAut(cstart, cstep, cext)), astart(as), astart(aσ[0]), frag(IOAut(astart, astep, aext))(aσ, aα), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcσ, pα), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), sameshared(cren, aren, ren), start(s), Π(start, cstart)(pcσ[0]), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren) ⊦ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)) ∧ Π(start, astart)(repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)[0])
| cext !(πra(step, cstep, ren, cren, pcσ, pα)) = aext !(aα), IOAut?(IOAut(cstart, cstep, cext)), astart(as), astart(aσ[0]), frag(IOAut(astart, astep, aext))(aσ, aα), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcσ, pα), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(ext), oinj(aext), sameshared(cren, aren, ren), start(s), Π(start, cstart)(pcσ[0]), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren) ⊦ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)) ∧ Π(start, astart)(repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)[0]) |
⊦ IOAut?(IOAut(start, step, ext)) ↔ (∃ s. start(s) ∧ oinj(ext))
cext !(πra(step, cstep, ren, cren, pcσ, pα)) = aext !(aα), astart(aσ[0]), astart(as), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcσ, pα), frag(IOAut(astart, astep, aext))(aσ, aα), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(aext), oinj(ext), sameshared(cren, aren, ren), start(s), Π(start, cstart)(pcσ[0]), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ∃ cs. cstart(cs) ∧ oinj(cext) ⊦ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)) ∧ Π(start, astart)(repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)[0])
Used terms: cstart, cstep, cext
| ⊦ IOAut?(IOAut(start, step, ext)) ↔ (∃ s. start(s) ∧ oinj(ext)) |
| cext !(πra(step, cstep, ren, cren, pcσ, pα)) = aext !(aα), astart(aσ[0]), astart(as), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcσ, pα), frag(IOAut(astart, astep, aext))(aσ, aα), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(aext), oinj(ext), sameshared(cren, aren, ren), start(s), Π(start, cstart)(pcσ[0]), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ∃ cs. cstart(cs) ∧ oinj(cext) ⊦ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)) ∧ Π(start, astart)(repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)[0]) |
cext !(πra(step, cstep, ren, cren, pcσ, pα)) = aext !(aα), astart(as), astart(aσ[0]), cstart(cs), frag(IOAut(astart, astep, aext))(aσ, aα), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcσ, pα), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(cext), oinj(ext), oinj(aext), sameshared(cren, aren, ren), start(s), Π(start, cstart)(pcσ[0]), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren) ⊦ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)) ∧ Π(start, astart)(repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)[0])
| cext !(πra(step, cstep, ren, cren, pcσ, pα)) = aext !(aα), astart(as), astart(aσ[0]), cstart(cs), frag(IOAut(astart, astep, aext))(aσ, aα), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcσ, pα), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(cext), oinj(ext), oinj(aext), sameshared(cren, aren, ren), start(s), Π(start, cstart)(pcσ[0]), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren) ⊦ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)) ∧ Π(start, astart)(repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)[0]) |
nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcσ, pα), frag(IOAut(astart, astep, aext))(aσ, aα), cext !(πra(step, cstep, ren, cren, pcσ, pα)) = aext !(aα) ⊦ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα))
cext !(πra(step, cstep, ren, cren, pcσ, pα)) = aext !(aα), astart(aσ[0]), astart(as), cstart(cs), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcσ, pα), frag(IOAut(astart, astep, aext))(aσ, aα), frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(aext), oinj(ext), oinj(cext), sameshared(cren, aren, ren), start(s), Π(start, cstart)(pcσ[0]), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren) ⊦ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)) ∧ Π(start, astart)(repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)[0])
Used terms: aren, pα, ren, ext, astep, pcσ, astart, step, aext, cstart, cren, cstep, aα, start, aσ, cext
| nounsharedextR(cren, cext, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), oinj(cext), oinj(aext), oinj(ext), sameshared(cren, aren, ren), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcσ, pα), frag(IOAut(astart, astep, aext))(aσ, aα), cext !(πra(step, cstep, ren, cren, pcσ, pα)) = aext !(aα) ⊦ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)) |
| cext !(πra(step, cstep, ren, cren, pcσ, pα)) = aext !(aα), astart(aσ[0]), astart(as), cstart(cs), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcσ, pα), frag(IOAut(astart, astep, aext))(aσ, aα), frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(aext), oinj(ext), oinj(cext), sameshared(cren, aren, ren), start(s), Π(start, cstart)(pcσ[0]), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren) ⊦ frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)) ∧ Π(start, astart)(repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)[0]) |
cext !(πra(step, cstep, ren, cren, pcσ, pα)) = aext !(aα), astart(as), astart(aσ[0]), cstart(cs), frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)), frag(IOAut(astart, astep, aext))(aσ, aα), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcσ, pα), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(cext), oinj(ext), oinj(aext), sameshared(cren, aren, ren), start(s), Π(start, cstart)(pcσ[0]), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(start, astart)(repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)[0]) ⊦
| cext !(πra(step, cstep, ren, cren, pcσ, pα)) = aext !(aα), astart(as), astart(aσ[0]), cstart(cs), frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)), frag(IOAut(astart, astep, aext))(aσ, aα), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcσ, pα), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(cext), oinj(ext), oinj(aext), sameshared(cren, aren, ren), start(s), Π(start, cstart)(pcσ[0]), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(start, astart)(repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)[0]) ⊦ |
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)
cext !(πra(step, cstep, ren, cren, pcσ, pα)) = aext !(aα), astart(aσ[0]), astart(as), cstart(cs), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcσ, pα), frag(IOAut(astart, astep, aext))(aσ, aα), frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(aext), oinj(ext), oinj(cext), sameshared(cren, aren, ren), start(s), Π(start, cstart)(pcσ[0]), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(start, astart)(repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)[0]) ⊦ frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜(hd(pcσ)._1, hd(pcσ)._2) '⌝ + tl(pcσ), pα) ∧ frag(IOAut(astart, astep, aext))(⌜hd(aσ) '⌝ + tl(aσ), aα) ∧ cext !(πra(step, cstep, ren, cren, ⌜(hd(pcσ)._1, hd(pcσ)._2) '⌝ + tl(pcσ), pα)) ⊑ aext !(aα)
cext !(πra(step, cstep, ren, cren, pcσ, pα)) = aext !(aα), hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(hd(pcσ)._1, hd(pcσ)._2) '⌝ + tl(pcσ), pα, ⌜hd(aσ) '⌝ + tl(aσ), aα)) = (hd(pcσ)._1, hd(aσ)), repls(step, cstep, cren, ren, aren, cext, aext, ⌜(hd(pcσ)._1, hd(pcσ)._2) '⌝ + tl(pcσ), pα, ⌜hd(aσ) '⌝ + tl(aσ), aα) ≠ [], astart(aσ[0]), astart(as), cstart(cs), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcσ, pα), frag(IOAut(astart, astep, aext))(aσ, aα), frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(aext), oinj(ext), oinj(cext), sameshared(cren, aren, ren), start(s), Π(start, cstart)(pcσ[0]), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(start, astart)(repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)[0]) ⊦
Used terms: aren, pα, ren, ext, hd(pcσ)._1, hd(aσ), astep, tl(pcσ), astart, step, aext, cstart, cren, cstep, aα, start, tl(aσ), cext, hd(pcσ)._2
| 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) |
| cext !(πra(step, cstep, ren, cren, pcσ, pα)) = aext !(aα), astart(aσ[0]), astart(as), cstart(cs), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcσ, pα), frag(IOAut(astart, astep, aext))(aσ, aα), frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(aext), oinj(ext), oinj(cext), sameshared(cren, aren, ren), start(s), Π(start, cstart)(pcσ[0]), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(start, astart)(repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)[0]) ⊦ frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜(hd(pcσ)._1, hd(pcσ)._2) '⌝ + tl(pcσ), pα) ∧ frag(IOAut(astart, astep, aext))(⌜hd(aσ) '⌝ + tl(aσ), aα) ∧ cext !(πra(step, cstep, ren, cren, ⌜(hd(pcσ)._1, hd(pcσ)._2) '⌝ + tl(pcσ), pα)) ⊑ aext !(aα) |
cext !(πra(step, cstep, ren, cren, pcσ, pα)) = aext !(aα), pcσ = pcs + pcσ0, pcσ ≠ [], astart(as), astart(aσ[0]), cstart(cs), frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)), frag(IOAut(astart, astep, aext))(aσ, aα), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcσ, pα), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(cext), oinj(ext), oinj(aext), sameshared(cren, aren, ren), start(s), Π(start, cstart)(pcσ[0]), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(start, astart)(repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)[0]) ⊦ frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜(pcs._1, pcs._2) '⌝ + pcσ0, pα) ∧ frag(IOAut(astart, astep, aext))(⌜hd(aσ) '⌝ + tl(aσ), aα) ∧ cext !(πra(step, cstep, ren, cren, ⌜(pcs._1, pcs._2) '⌝ + pcσ0, pα)) ⊑ aext !(aα)
Used simplifier rules: ⊦ ¬ frag(IOAut(start, step, ext))([], α); (s) ⊦ σ ≠ [] → (a = hd(σ) ∧ σ0 = tl(σ) ↔ σ = a + σ0); (elim) Used terms: pcσ, pcs, pcσ0
| cext !(πra(step, cstep, ren, cren, pcσ, pα)) = aext !(aα), pcσ = pcs + pcσ0, pcσ ≠ [], astart(as), astart(aσ[0]), cstart(cs), frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)), frag(IOAut(astart, astep, aext))(aσ, aα), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcσ, pα), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(cext), oinj(ext), oinj(aext), sameshared(cren, aren, ren), start(s), Π(start, cstart)(pcσ[0]), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(start, astart)(repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)[0]) ⊦ frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜(pcs._1, pcs._2) '⌝ + pcσ0, pα) ∧ frag(IOAut(astart, astep, aext))(⌜hd(aσ) '⌝ + tl(aσ), aα) ∧ cext !(πra(step, cstep, ren, cren, ⌜(pcs._1, pcs._2) '⌝ + pcσ0, pα)) ⊑ aext !(aα) |
cext !(πra(step, cstep, ren, cren, ⌜pcs '⌝ + pcσ0, pα)) = aext !(aα), astart(aσ[0]), astart(as), cstart(cs), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜pcs '⌝ + pcσ0, pα), frag(IOAut(astart, astep, aext))(aσ, aα), frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcs '⌝ + pcσ0, pα, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcs '⌝ + pcσ0, pα, aσ, aα)), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(aext), oinj(ext), oinj(cext), sameshared(cren, aren, ren), start(s), Π(start, cstart)(pcs), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(start, astart)(repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcs '⌝ + pcσ0, pα, aσ, aα)[0]) ⊦ frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜(pcs._1, pcs._2) '⌝ + pcσ0, pα) ∧ frag(IOAut(astart, astep, aext))(⌜hd(aσ) '⌝ + tl(aσ), aα) ∧ cext !(πra(step, cstep, ren, cren, ⌜(pcs._1, pcs._2) '⌝ + pcσ0, pα)) ⊑ aext !(aα)
Used simplifier rules: ⊦ a + σ = ⌜a '⌝ + σ; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ (⌜a '⌝ + σ)[0] = a; (s) ⊦ ⌜a '⌝ + σ ≠ []; (s)
| cext !(πra(step, cstep, ren, cren, ⌜pcs '⌝ + pcσ0, pα)) = aext !(aα), astart(aσ[0]), astart(as), cstart(cs), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜pcs '⌝ + pcσ0, pα), frag(IOAut(astart, astep, aext))(aσ, aα), frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcs '⌝ + pcσ0, pα, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcs '⌝ + pcσ0, pα, aσ, aα)), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(aext), oinj(ext), oinj(cext), sameshared(cren, aren, ren), start(s), Π(start, cstart)(pcs), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(start, astart)(repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcs '⌝ + pcσ0, pα, aσ, aα)[0]) ⊦ frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜(pcs._1, pcs._2) '⌝ + pcσ0, pα) ∧ frag(IOAut(astart, astep, aext))(⌜hd(aσ) '⌝ + tl(aσ), aα) ∧ cext !(πra(step, cstep, ren, cren, ⌜(pcs._1, pcs._2) '⌝ + pcσ0, pα)) ⊑ aext !(aα) |
cext !(πra(step, cstep, ren, cren, ⌜pcs '⌝ + pcσ0, pα)) = aext !(aα), aσ = as0 + aσ0, aσ ≠ [], astart(as), astart(aσ[0]), cstart(cs), frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcs '⌝ + pcσ0, pα, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcs '⌝ + pcσ0, pα, aσ, aα)), frag(IOAut(astart, astep, aext))(aσ, aα), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜pcs '⌝ + pcσ0, pα), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(cext), oinj(ext), oinj(aext), sameshared(cren, aren, ren), start(s), Π(start, cstart)(pcs), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(start, astart)(repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcs '⌝ + pcσ0, pα, aσ, aα)[0]) ⊦ frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜(pcs._1, pcs._2) '⌝ + pcσ0, pα) ∧ frag(IOAut(astart, astep, aext))(⌜as0 '⌝ + aσ0, aα) ∧ cext !(πra(step, cstep, ren, cren, ⌜(pcs._1, pcs._2) '⌝ + pcσ0, pα)) ⊑ aext !(aα)
Used simplifier rules: ⊦ ¬ frag(IOAut(start, step, ext))([], α); (s) ⊦ σ ≠ [] → (a = hd(σ) ∧ σ0 = tl(σ) ↔ σ = a + σ0); (elim) Used terms: aσ, as0, aσ0
| cext !(πra(step, cstep, ren, cren, ⌜pcs '⌝ + pcσ0, pα)) = aext !(aα), aσ = as0 + aσ0, aσ ≠ [], astart(as), astart(aσ[0]), cstart(cs), frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcs '⌝ + pcσ0, pα, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcs '⌝ + pcσ0, pα, aσ, aα)), frag(IOAut(astart, astep, aext))(aσ, aα), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜pcs '⌝ + pcσ0, pα), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(cext), oinj(ext), oinj(aext), sameshared(cren, aren, ren), start(s), Π(start, cstart)(pcs), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(start, astart)(repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcs '⌝ + pcσ0, pα, aσ, aα)[0]) ⊦ frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜(pcs._1, pcs._2) '⌝ + pcσ0, pα) ∧ frag(IOAut(astart, astep, aext))(⌜as0 '⌝ + aσ0, aα) ∧ cext !(πra(step, cstep, ren, cren, ⌜(pcs._1, pcs._2) '⌝ + pcσ0, pα)) ⊑ aext !(aα) |
cext !(πra(step, cstep, ren, cren, ⌜pcs '⌝ + pcσ0, pα)) = aext !(aα), astart(as), astart(as0), cstart(cs), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜pcs '⌝ + pcσ0, pα), frag(IOAut(astart, astep, aext))(⌜as0 '⌝ + aσ0, aα), frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcs '⌝ + pcσ0, pα, ⌜as0 '⌝ + aσ0, aα), repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcs '⌝ + pcσ0, pα, ⌜as0 '⌝ + aσ0, aα)), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(aext), oinj(ext), oinj(cext), sameshared(cren, aren, ren), start(s), Π(start, cstart)(pcs), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(start, astart)(repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcs '⌝ + pcσ0, pα, ⌜as0 '⌝ + aσ0, aα)[0]) ⊦ frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜(pcs._1, pcs._2) '⌝ + pcσ0, pα) ∧ cext !(πra(step, cstep, ren, cren, ⌜(pcs._1, pcs._2) '⌝ + pcσ0, pα)) ⊑ aext !(aα)
Used simplifier rules: ⊦ a + σ = ⌜a '⌝ + σ; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ (⌜a '⌝ + σ)[0] = a; (s) ⊦ ⌜a '⌝ + σ ≠ []; (s)
| cext !(πra(step, cstep, ren, cren, ⌜pcs '⌝ + pcσ0, pα)) = aext !(aα), astart(as), astart(as0), cstart(cs), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜pcs '⌝ + pcσ0, pα), frag(IOAut(astart, astep, aext))(⌜as0 '⌝ + aσ0, aα), frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcs '⌝ + pcσ0, pα, ⌜as0 '⌝ + aσ0, aα), repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcs '⌝ + pcσ0, pα, ⌜as0 '⌝ + aσ0, aα)), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(aext), oinj(ext), oinj(cext), sameshared(cren, aren, ren), start(s), Π(start, cstart)(pcs), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(start, astart)(repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcs '⌝ + pcσ0, pα, ⌜as0 '⌝ + aσ0, aα)[0]) ⊦ frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜(pcs._1, pcs._2) '⌝ + pcσ0, pα) ∧ cext !(πra(step, cstep, ren, cren, ⌜(pcs._1, pcs._2) '⌝ + pcσ0, pα)) ⊑ aext !(aα) |
Used simplifier rules: ⊦ Π(lstart, rstart)((ls, rs)) ↔ lstart(ls) ∧ rstart(rs); (s) ⊦ σ ⊑ σ; (s) Used terms: s0, cs0
| cext !(πra(step, cstep, ren, cren, pcσ, pα)) = aext !(aα), hd(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(hd(pcσ)._1, hd(pcσ)._2) '⌝ + tl(pcσ), pα, ⌜hd(aσ) '⌝ + tl(aσ), aα)) = (hd(pcσ)._1, hd(aσ)), repls(step, cstep, cren, ren, aren, cext, aext, ⌜(hd(pcσ)._1, hd(pcσ)._2) '⌝ + tl(pcσ), pα, ⌜hd(aσ) '⌝ + tl(aσ), aα) ≠ [], astart(aσ[0]), astart(as), cstart(cs), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcσ, pα), frag(IOAut(astart, astep, aext))(aσ, aα), frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(aext), oinj(ext), oinj(cext), sameshared(cren, aren, ren), start(s), Π(start, cstart)(pcσ[0]), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(start, astart)(repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)[0]) ⊦ |
cext !(πra(step, cstep, ren, cren, pcσ, pα)) = aext !(aα), pas = (hd(pcσ)._1, hd(aσ)), repls(step, cstep, cren, ren, aren, cext, aext, ⌜(hd(pcσ)._1, hd(pcσ)._2) '⌝ + tl(pcσ), pα, ⌜hd(aσ) '⌝ + tl(aσ), aα) = pas + paσ, repls(step, cstep, cren, ren, aren, cext, aext, ⌜(hd(pcσ)._1, hd(pcσ)._2) '⌝ + tl(pcσ), pα, ⌜hd(aσ) '⌝ + tl(aσ), aα) ≠ [], astart(as), astart(aσ[0]), cstart(cs), frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)), frag(IOAut(astart, astep, aext))(aσ, aα), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcσ, pα), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(cext), oinj(ext), oinj(aext), sameshared(cren, aren, ren), start(s), Π(start, cstart)(pcσ[0]), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(start, astart)(repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)[0]) ⊦
Used simplifier rules: ⊦ σ ≠ [] → (a = hd(σ) ∧ σ0 = tl(σ) ↔ σ = a + σ0); (elim) Used terms: repls (step, cstep, cren, ren, aren, cext, aext, ⌜(hd(pcσ)._1, hd(pcσ)._2) '⌝ + tl(pcσ), pα, ⌜hd(aσ) '⌝ + tl(aσ), aα), pas, paσ
| cext !(πra(step, cstep, ren, cren, pcσ, pα)) = aext !(aα), pas = (hd(pcσ)._1, hd(aσ)), repls(step, cstep, cren, ren, aren, cext, aext, ⌜(hd(pcσ)._1, hd(pcσ)._2) '⌝ + tl(pcσ), pα, ⌜hd(aσ) '⌝ + tl(aσ), aα) = pas + paσ, repls(step, cstep, cren, ren, aren, cext, aext, ⌜(hd(pcσ)._1, hd(pcσ)._2) '⌝ + tl(pcσ), pα, ⌜hd(aσ) '⌝ + tl(aσ), aα) ≠ [], astart(as), astart(aσ[0]), cstart(cs), frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)), frag(IOAut(astart, astep, aext))(aσ, aα), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcσ, pα), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(cext), oinj(ext), oinj(aext), sameshared(cren, aren, ren), start(s), Π(start, cstart)(pcσ[0]), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(start, astart)(repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)[0]) ⊦ |
cext !(πra(step, cstep, ren, cren, pcσ, pα)) = aext !(aα), repls(step, cstep, cren, ren, aren, cext, aext, ⌜(hd(pcσ)._1, hd(pcσ)._2) '⌝ + tl(pcσ), pα, ⌜hd(aσ) '⌝ + tl(aσ), aα) = ⌜(hd(pcσ)._1, hd(aσ)) '⌝ + paσ, astart(as), astart(aσ[0]), cstart(cs), frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)), frag(IOAut(astart, astep, aext))(aσ, aα), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcσ, pα), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(cext), oinj(ext), oinj(aext), sameshared(cren, aren, ren), start(s), Π(start, cstart)(pcσ[0]), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(start, astart)(repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)[0]) ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ ⌜a '⌝ + σ ≠ []; (s) ⊦ a + σ = ⌜a '⌝ + σ; (s)
| cext !(πra(step, cstep, ren, cren, pcσ, pα)) = aext !(aα), repls(step, cstep, cren, ren, aren, cext, aext, ⌜(hd(pcσ)._1, hd(pcσ)._2) '⌝ + tl(pcσ), pα, ⌜hd(aσ) '⌝ + tl(aσ), aα) = ⌜(hd(pcσ)._1, hd(aσ)) '⌝ + paσ, astart(as), astart(aσ[0]), cstart(cs), frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)), frag(IOAut(astart, astep, aext))(aσ, aα), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcσ, pα), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(cext), oinj(ext), oinj(aext), sameshared(cren, aren, ren), start(s), Π(start, cstart)(pcσ[0]), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(start, astart)(repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)[0]) ⊦ |
cext !(πra(step, cstep, ren, cren, pcσ, pα)) = aext !(aα), pcσ = pcs + pcσ0, repls(step, cstep, cren, ren, aren, cext, aext, ⌜(pcs._1, pcs._2) '⌝ + pcσ0, pα, ⌜hd(aσ) '⌝ + tl(aσ), aα) = ⌜(pcs._1, hd(aσ)) '⌝ + paσ, pcσ ≠ [], astart(aσ[0]), astart(as), cstart(cs), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcσ, pα), frag(IOAut(astart, astep, aext))(aσ, aα), frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(aext), oinj(ext), oinj(cext), sameshared(cren, aren, ren), start(s), Π(start, cstart)(pcσ[0]), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(start, astart)(repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)[0]) ⊦
Used simplifier rules: ⊦ ¬ frag(IOAut(start, step, ext))([], α); (s) ⊦ σ ≠ [] → (a = hd(σ) ∧ σ0 = tl(σ) ↔ σ = a + σ0); (elim) Used terms: pcσ, pcs, pcσ0
| cext !(πra(step, cstep, ren, cren, pcσ, pα)) = aext !(aα), pcσ = pcs + pcσ0, repls(step, cstep, cren, ren, aren, cext, aext, ⌜(pcs._1, pcs._2) '⌝ + pcσ0, pα, ⌜hd(aσ) '⌝ + tl(aσ), aα) = ⌜(pcs._1, hd(aσ)) '⌝ + paσ, pcσ ≠ [], astart(aσ[0]), astart(as), cstart(cs), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcσ, pα), frag(IOAut(astart, astep, aext))(aσ, aα), frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(aext), oinj(ext), oinj(cext), sameshared(cren, aren, ren), start(s), Π(start, cstart)(pcσ[0]), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(start, astart)(repls(step, cstep, cren, ren, aren, cext, aext, pcσ, pα, aσ, aα)[0]) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcs '⌝ + pcσ0, pα)) = aext !(aα), repls(step, cstep, cren, ren, aren, cext, aext, ⌜(pcs._1, pcs._2) '⌝ + pcσ0, pα, ⌜hd(aσ) '⌝ + tl(aσ), aα) = ⌜(pcs._1, hd(aσ)) '⌝ + paσ, astart(as), astart(aσ[0]), cstart(cs), frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcs '⌝ + pcσ0, pα, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcs '⌝ + pcσ0, pα, aσ, aα)), frag(IOAut(astart, astep, aext))(aσ, aα), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜pcs '⌝ + pcσ0, pα), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(cext), oinj(ext), oinj(aext), sameshared(cren, aren, ren), start(s), Π(start, cstart)(pcs), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(start, astart)(repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcs '⌝ + pcσ0, pα, aσ, aα)[0]) ⊦
Used simplifier rules: ⊦ a + σ = ⌜a '⌝ + σ; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ (⌜a '⌝ + σ)[0] = a; (s) ⊦ ⌜a '⌝ + σ ≠ []; (s)
| cext !(πra(step, cstep, ren, cren, ⌜pcs '⌝ + pcσ0, pα)) = aext !(aα), repls(step, cstep, cren, ren, aren, cext, aext, ⌜(pcs._1, pcs._2) '⌝ + pcσ0, pα, ⌜hd(aσ) '⌝ + tl(aσ), aα) = ⌜(pcs._1, hd(aσ)) '⌝ + paσ, astart(as), astart(aσ[0]), cstart(cs), frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcs '⌝ + pcσ0, pα, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcs '⌝ + pcσ0, pα, aσ, aα)), frag(IOAut(astart, astep, aext))(aσ, aα), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜pcs '⌝ + pcσ0, pα), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(cext), oinj(ext), oinj(aext), sameshared(cren, aren, ren), start(s), Π(start, cstart)(pcs), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(start, astart)(repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcs '⌝ + pcσ0, pα, aσ, aα)[0]) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜pcs '⌝ + pcσ0, pα)) = aext !(aα), pcs = (s0, cs0), repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs0) '⌝ + pcσ0, pα, ⌜hd(aσ) '⌝ + tl(aσ), aα) = ⌜(s0, hd(aσ)) '⌝ + paσ, astart(aσ[0]), astart(as), cstart(cs), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜pcs '⌝ + pcσ0, pα), frag(IOAut(astart, astep, aext))(aσ, aα), frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcs '⌝ + pcσ0, pα, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcs '⌝ + pcσ0, pα, aσ, aα)), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(aext), oinj(ext), oinj(cext), sameshared(cren, aren, ren), start(s), Π(start, cstart)(pcs), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(start, astart)(repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcs '⌝ + pcσ0, pα, aσ, aα)[0]) ⊦
Used terms: s0, cs0
| cext !(πra(step, cstep, ren, cren, ⌜pcs '⌝ + pcσ0, pα)) = aext !(aα), pcs = (s0, cs0), repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs0) '⌝ + pcσ0, pα, ⌜hd(aσ) '⌝ + tl(aσ), aα) = ⌜(s0, hd(aσ)) '⌝ + paσ, astart(aσ[0]), astart(as), cstart(cs), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜pcs '⌝ + pcσ0, pα), frag(IOAut(astart, astep, aext))(aσ, aα), frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcs '⌝ + pcσ0, pα, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, ⌜pcs '⌝ + pcσ0, pα, aσ, aα)), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), oinj(aext), oinj(ext), oinj(cext), sameshared(cren, aren, ren), start(s), Π(start, cstart)(pcs), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ Π(start, astart)(repls(step, cstep, cren, ren, aren, cext, aext, ⌜pcs '⌝ + pcσ0, pα, aσ, aα)[0]) ⊦ |
cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + pcσ0, pα)) = aext !(aα), repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs0) '⌝ + pcσ0, pα, ⌜hd(aσ) '⌝ + tl(aσ), aα) = ⌜(s0, hd(aσ)) '⌝ + paσ, astart(as), astart(aσ[0]), cstart(cs), cstart(cs0), frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs0) '⌝ + pcσ0, pα, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs0) '⌝ + pcσ0, pα, aσ, aα)), frag(IOAut(astart, astep, aext))(aσ, aα), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜(s0, cs0) '⌝ + pcσ0, pα), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(cext), oinj(ext), oinj(aext), sameshared(cren, aren, ren), start(s), start(s0), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(start, astart)(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs0) '⌝ + pcσ0, pα, aσ, aα)[0]) ⊦
Used simplifier rules: ⊦ Π(lstart, rstart)((ls, rs)) ↔ lstart(ls) ∧ rstart(rs); (s)
| cext !(πra(step, cstep, ren, cren, ⌜(s0, cs0) '⌝ + pcσ0, pα)) = aext !(aα), repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs0) '⌝ + pcσ0, pα, ⌜hd(aσ) '⌝ + tl(aσ), aα) = ⌜(s0, hd(aσ)) '⌝ + paσ, astart(as), astart(aσ[0]), cstart(cs), cstart(cs0), frag(IOAut(Π(start, astart), Π(step, astep, ren, aren, ext, aext), Π(ext, aext, ren, aren))) (repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs0) '⌝ + pcσ0, pα, aσ, aα), repla(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs0) '⌝ + pcσ0, pα, aσ, aα)), frag(IOAut(astart, astep, aext))(aσ, aα), frag(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(⌜(s0, cs0) '⌝ + pcσ0, pα), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), oinj(cext), oinj(ext), oinj(aext), sameshared(cren, aren, ren), start(s), start(s0), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ Π(start, astart)(repls(step, cstep, cren, ren, aren, cext, aext, ⌜(s0, cs0) '⌝ + pcσ0, pα, aσ, aα)[0]) ⊦ |
Used simplifier rules: ⊦ ⌜a '⌝ + σ ≠ []; (s) ⊦ a + σ = ⌜a '⌝ + σ; (s) ⊦ (⌜a '⌝ + σ)[0] = a; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ Π(lstart, rstart)((ls, rs)) ↔ lstart(ls) ∧ rstart(rs); (s) ⊦ ¬ frag(IOAut(start, step, ext))([], α); (s) ⊦ σ ≠ [] → (a = hd(σ) ∧ σ0 = tl(σ) ↔ σ = a + σ0); (elim) Used terms: aσ, as0, aσ0
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.