| ⊦ nounsharedextR(cren, cext, ren) ∧ nounsharedextR(aren, aext, ren) ∧ Πok(ext, cext, ren, cren) ∧ Πok(ext, aext, ren, aren) ∧ frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsl, pal) ∧ frag(IOAut(astart, astep, aext))(aσ, aα) ∧ ⌜cext !(πra(step, cstep, ren, cren, pcsl, pal))⌝ ⊑ aext !(aα) → Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)) = Π(ext, cext, ren, cren) !(pal) |
Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pal), frag(IOAut(astart, astep, aext))(aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsl, pal), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ⌜cext !(πra(step, cstep, ren, cren, pcsl, pal))⌝ ⊑ aext !(aα) ⊦
| Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pal), frag(IOAut(astart, astep, aext))(aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsl, pal), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ⌜cext !(πra(step, cstep, ren, cren, pcsl, pal))⌝ ⊑ aext !(aα) ⊦ |
⊦ nounsharedextR(cren, cext, ren) ∧ nounsharedextR(aren, aext, ren) ∧ Πok(ext, cext, ren, cren) ∧ Πok(ext, aext, ren, aren) ∧ frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + pcsl, pal) ∧ frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα) ∧ ⌜cext !(πra(step, cstep, ren, cren, (s, cs) ' + pcsl, pal))⌝ ⊑ aext !(aα) → Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsl, pal, ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(pal)
Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pal), frag(IOAut(astart, astep, aext))(aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsl, pal), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ⌜cext !(πra(step, cstep, ren, cren, pcsl, pal))⌝ ⊑ aext !(aα), nounsharedextR(cren, cext, ren) ∧ nounsharedextR(aren, aext, ren) ∧ Πok(ext, cext, ren, cren) ∧ Πok(ext, aext, ren, aren) ∧ frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren))) ((pcsl.head._1, pcsl.head._2) ' + pcsl.tail, repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)) ∧ frag(IOAut(astart, astep, aext))(⌜hd(aσ) '⌝ + tl(aσ), aα) ∧ ⌜cext ! (πra(step, cstep, ren, cren, (pcsl.head._1, pcsl.head._2) ' + pcsl.tail, repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα))) ⌝ ⊑ aext !(aα) → Π(ext, aext, ren, aren) ! (repla (step, cstep, cren, ren, aren, cext, aext, (pcsl.head._1, pcsl.head._2) ' + pcsl.tail, repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα), ⌜hd(aσ) '⌝ + tl(aσ), aα)) = Π(ext, cext, ren, cren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)) ⊦
Used terms: aren, ren, ext, pcsl.head._1, hd(aσ), astep, astart, repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα), step, aext, cstart, cren, cstep, aα, pcsl.tail, start, tl(aσ), cext, pcsl.head._2
| ⊦ nounsharedextR(cren, cext, ren) ∧ nounsharedextR(aren, aext, ren) ∧ Πok(ext, cext, ren, cren) ∧ Πok(ext, aext, ren, aren) ∧ frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + pcsl, pal) ∧ frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα) ∧ ⌜cext !(πra(step, cstep, ren, cren, (s, cs) ' + pcsl, pal))⌝ ⊑ aext !(aα) → Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsl, pal, ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(pal) |
| Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pal), frag(IOAut(astart, astep, aext))(aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsl, pal), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ⌜cext !(πra(step, cstep, ren, cren, pcsl, pal))⌝ ⊑ aext !(aα), nounsharedextR(cren, cext, ren) ∧ nounsharedextR(aren, aext, ren) ∧ Πok(ext, cext, ren, cren) ∧ Πok(ext, aext, ren, aren) ∧ frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren))) ((pcsl.head._1, pcsl.head._2) ' + pcsl.tail, repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)) ∧ frag(IOAut(astart, astep, aext))(⌜hd(aσ) '⌝ + tl(aσ), aα) ∧ ⌜cext ! (πra(step, cstep, ren, cren, (pcsl.head._1, pcsl.head._2) ' + pcsl.tail, repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα))) ⌝ ⊑ aext !(aα) → Π(ext, aext, ren, aren) ! (repla (step, cstep, cren, ren, aren, cext, aext, (pcsl.head._1, pcsl.head._2) ' + pcsl.tail, repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα), ⌜hd(aσ) '⌝ + tl(aσ), aα)) = Π(ext, cext, ren, cren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)) ⊦ |
Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pal), frag(IOAut(astart, astep, aext))(aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsl, pal), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ⌜cext !(πra(step, cstep, ren, cren, pcsl, pal))⌝ ⊑ aext !(aα) ⊦ nounsharedextR(cren, cext, ren) ∧ nounsharedextR(aren, aext, ren) ∧ Πok(ext, cext, ren, cren) ∧ Πok(ext, aext, ren, aren) ∧ frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren))) ((pcsl.head._1, pcsl.head._2) ' + pcsl.tail, repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)) ∧ frag(IOAut(astart, astep, aext))(⌜hd(aσ) '⌝ + tl(aσ), aα) ∧ ⌜cext ! (πra(step, cstep, ren, cren, (pcsl.head._1, pcsl.head._2) ' + pcsl.tail, repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα))) ⌝ ⊑ aext !(aα)
Π(ext, aext, ren, aren) ! (repla (step, cstep, cren, ren, aren, cext, aext, (pcsl.head._1, pcsl.head._2) ' + pcsl.tail, repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα), ⌜hd(aσ) '⌝ + tl(aσ), aα)) = Π(ext, cext, ren, cren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pal), frag(IOAut(astart, astep, aext))(aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsl, pal), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ⌜cext !(πra(step, cstep, ren, cren, pcsl, pal))⌝ ⊑ aext !(aα) ⊦
| Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pal), frag(IOAut(astart, astep, aext))(aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsl, pal), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ⌜cext !(πra(step, cstep, ren, cren, pcsl, pal))⌝ ⊑ aext !(aα) ⊦ nounsharedextR(cren, cext, ren) ∧ nounsharedextR(aren, aext, ren) ∧ Πok(ext, cext, ren, cren) ∧ Πok(ext, aext, ren, aren) ∧ frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren))) ((pcsl.head._1, pcsl.head._2) ' + pcsl.tail, repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)) ∧ frag(IOAut(astart, astep, aext))(⌜hd(aσ) '⌝ + tl(aσ), aα) ∧ ⌜cext ! (πra(step, cstep, ren, cren, (pcsl.head._1, pcsl.head._2) ' + pcsl.tail, repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα))) ⌝ ⊑ aext !(aα) |
Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pal), frag(IOAut(astart, astep, aext))(aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsl, pal), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ⌜cext !(πra(step, cstep, ren, cren, pcsl, pal))⌝ ⊑ aext !(aα) ⊦ frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren))) ((pcsl.head._1, pcsl.head._2) ' + pcsl.tail, repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)) ∧ frag(IOAut(astart, astep, aext))(⌜hd(aσ) '⌝ + tl(aσ), aα) ∧ ⌜cext ! (πra(step, cstep, ren, cren, (pcsl.head._1, pcsl.head._2) ' + pcsl.tail, repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα))) ⌝ ⊑ aext !(aα)
| Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pal), frag(IOAut(astart, astep, aext))(aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsl, pal), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ⌜cext !(πra(step, cstep, ren, cren, pcsl, pal))⌝ ⊑ aext !(aα) ⊦ frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren))) ((pcsl.head._1, pcsl.head._2) ' + pcsl.tail, repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)) ∧ frag(IOAut(astart, astep, aext))(⌜hd(aσ) '⌝ + tl(aσ), aα) ∧ ⌜cext ! (πra(step, cstep, ren, cren, (pcsl.head._1, pcsl.head._2) ' + pcsl.tail, repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα))) ⌝ ⊑ aext !(aα) |
pcsl = pcs + pcsl0, Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pal), pcsl ≠ [], frag(IOAut(astart, astep, aext))(aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsl, pal), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ⌜cext !(πra(step, cstep, ren, cren, pcsl, pal))⌝ ⊑ aext !(aα) ⊦ frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren))) ((pcs._1, pcs._2) ' + pcsl0, repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)) ∧ frag(IOAut(astart, astep, aext))(⌜hd(aσ) '⌝ + tl(aσ), aα) ∧ ⌜cext !(πra(step, cstep, ren, cren, (pcs._1, pcs._2) ' + pcsl0, repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)))⌝ ⊑ aext !(aα)
Used simplifier rules: ⊦ ¬ frag*(IOAut(start, step, ext))([], al); (s) x ≠ [] ⊦ a = x.head ∧ y = x.tail ↔ x = a + y; (elim) Used terms: pcsl, pcs, pcsl0
| pcsl = pcs + pcsl0, Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pal), pcsl ≠ [], frag(IOAut(astart, astep, aext))(aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsl, pal), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ⌜cext !(πra(step, cstep, ren, cren, pcsl, pal))⌝ ⊑ aext !(aα) ⊦ frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren))) ((pcs._1, pcs._2) ' + pcsl0, repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)) ∧ frag(IOAut(astart, astep, aext))(⌜hd(aσ) '⌝ + tl(aσ), aα) ∧ ⌜cext !(πra(step, cstep, ren, cren, (pcs._1, pcs._2) ' + pcsl0, repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)))⌝ ⊑ aext !(aα) |
Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcs ' + pcsl0, pal, aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pal), frag(IOAut(astart, astep, aext))(aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcs ' + pcsl0, pal), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ⌜cext !(πra(step, cstep, ren, cren, pcs ' + pcsl0, pal))⌝ ⊑ aext !(aα) ⊦ frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren))) ((pcs._1, pcs._2) ' + pcsl0, repla(step, cstep, cren, ren, aren, cext, aext, pcs ' + pcsl0, pal, aσ, aα)) ∧ frag(IOAut(astart, astep, aext))(⌜hd(aσ) '⌝ + tl(aσ), aα) ∧ ⌜cext !(πra(step, cstep, ren, cren, (pcs._1, pcs._2) ' + pcsl0, repla(step, cstep, cren, ren, aren, cext, aext, pcs ' + pcsl0, pal, aσ, aα)))⌝ ⊑ aext !(aα)
Used simplifier rules: ⊦ a + x = a ' + x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ a ' ≠ []; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s)
| Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcs ' + pcsl0, pal, aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pal), frag(IOAut(astart, astep, aext))(aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcs ' + pcsl0, pal), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ⌜cext !(πra(step, cstep, ren, cren, pcs ' + pcsl0, pal))⌝ ⊑ aext !(aα) ⊦ frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren))) ((pcs._1, pcs._2) ' + pcsl0, repla(step, cstep, cren, ren, aren, cext, aext, pcs ' + pcsl0, pal, aσ, aα)) ∧ frag(IOAut(astart, astep, aext))(⌜hd(aσ) '⌝ + tl(aσ), aα) ∧ ⌜cext !(πra(step, cstep, ren, cren, (pcs._1, pcs._2) ' + pcsl0, repla(step, cstep, cren, ren, aren, cext, aext, pcs ' + pcsl0, pal, aσ, aα)))⌝ ⊑ aext !(aα) |
pcs = (s, cs), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcs ' + pcsl0, pal, aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pal), frag(IOAut(astart, astep, aext))(aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcs ' + pcsl0, pal), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ⌜cext !(πra(step, cstep, ren, cren, pcs ' + pcsl0, pal))⌝ ⊑ aext !(aα) ⊦ frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren))) ((pcs._1, pcs._2) ' + pcsl0, repla(step, cstep, cren, ren, aren, cext, aext, pcs ' + pcsl0, pal, aσ, aα)) ∧ frag(IOAut(astart, astep, aext))(⌜hd(aσ) '⌝ + tl(aσ), aα) ∧ ⌜cext !(πra(step, cstep, ren, cren, (pcs._1, pcs._2) ' + pcsl0, repla(step, cstep, cren, ren, aren, cext, aext, pcs ' + pcsl0, pal, aσ, aα)))⌝ ⊑ aext !(aα)
| pcs = (s, cs), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcs ' + pcsl0, pal, aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pal), frag(IOAut(astart, astep, aext))(aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcs ' + pcsl0, pal), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ⌜cext !(πra(step, cstep, ren, cren, pcs ' + pcsl0, pal))⌝ ⊑ aext !(aα) ⊦ frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren))) ((pcs._1, pcs._2) ' + pcsl0, repla(step, cstep, cren, ren, aren, cext, aext, pcs ' + pcsl0, pal, aσ, aα)) ∧ frag(IOAut(astart, astep, aext))(⌜hd(aσ) '⌝ + tl(aσ), aα) ∧ ⌜cext !(πra(step, cstep, ren, cren, (pcs._1, pcs._2) ' + pcsl0, repla(step, cstep, cren, ren, aren, cext, aext, pcs ' + pcsl0, pal, aσ, aα)))⌝ ⊑ aext !(aα) |
Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsl0, pal, aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pal), frag(IOAut(astart, astep, aext))(aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + pcsl0, pal), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ⌜cext !(πra(step, cstep, ren, cren, (s, cs) ' + pcsl0, pal))⌝ ⊑ aext !(aα) ⊦ frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren))) ((s, cs) ' + pcsl0, repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsl0, pal, aσ, aα)) ∧ frag(IOAut(astart, astep, aext))(⌜hd(aσ) '⌝ + tl(aσ), aα) ∧ ⌜cext !(πra(step, cstep, ren, cren, (s, cs) ' + pcsl0, repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsl0, pal, aσ, aα)))⌝ ⊑ aext !(aα)
| Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsl0, pal, aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pal), frag(IOAut(astart, astep, aext))(aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + pcsl0, pal), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ⌜cext !(πra(step, cstep, ren, cren, (s, cs) ' + pcsl0, pal))⌝ ⊑ aext !(aα) ⊦ frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren))) ((s, cs) ' + pcsl0, repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsl0, pal, aσ, aα)) ∧ frag(IOAut(astart, astep, aext))(⌜hd(aσ) '⌝ + tl(aσ), aα) ∧ ⌜cext !(πra(step, cstep, ren, cren, (s, cs) ' + pcsl0, repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsl0, pal, aσ, aα)))⌝ ⊑ aext !(aα) |
Used simplifier rules: finfrag-repla-sametrace: ⊦ nounsharedextR(cren, cext, ren) ∧ nounsharedextR(aren, aext, ren) ∧ Πok(ext, cext, ren, cren) ∧ Πok(ext, aext, ren, aren) ∧ frag* (IOAut (Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren))) ((s, cs) ' + pcsl, pal) ∧ frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα) ∧ ⌜cext !(πra(step, cstep, ren, cren, (s, cs) ' + pcsl, pal))⌝ ⊑ aext !(aα) → Π(ext, aext, ren, aren) ! (repla (step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsl, pal, ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(pal); ⊦ ⌜a '⌝ + σ ≠ []; (s) ⊦ a + σ = ⌜a '⌝ + σ; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ¬ frag(IOAut(start, step, ext))([], α); (s) ⊦ σ ≠ [] → (a = hd(σ) ∧ σ0 = tl(σ) ↔ σ = a + σ0); (elim) Used terms: aσ, as, aσ0
| Π(ext, aext, ren, aren) ! (repla (step, cstep, cren, ren, aren, cext, aext, (pcsl.head._1, pcsl.head._2) ' + pcsl.tail, repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα), ⌜hd(aσ) '⌝ + tl(aσ), aα)) = Π(ext, cext, ren, cren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pal), frag(IOAut(astart, astep, aext))(aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsl, pal), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ⌜cext !(πra(step, cstep, ren, cren, pcsl, pal))⌝ ⊑ aext !(aα) ⊦ |
Π(ext, aext, ren, aren) ! (repla (step, cstep, cren, ren, aren, cext, aext, (pcs._1, pcs._2) ' + pcsl0, repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα), ⌜hd(aσ) '⌝ + tl(aσ), aα)) = Π(ext, cext, ren, cren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)), pcsl = pcs + pcsl0, Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pal), pcsl ≠ [], frag(IOAut(astart, astep, aext))(aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsl, pal), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ⌜cext !(πra(step, cstep, ren, cren, pcsl, pal))⌝ ⊑ aext !(aα) ⊦
Used simplifier rules: ⊦ ¬ frag*(IOAut(start, step, ext))([], al); (s) x ≠ [] ⊦ a = x.head ∧ y = x.tail ↔ x = a + y; (elim) Used terms: pcsl, pcs, pcsl0
| Π(ext, aext, ren, aren) ! (repla (step, cstep, cren, ren, aren, cext, aext, (pcs._1, pcs._2) ' + pcsl0, repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα), ⌜hd(aσ) '⌝ + tl(aσ), aα)) = Π(ext, cext, ren, cren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)), pcsl = pcs + pcsl0, Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcsl, pal, aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pal), pcsl ≠ [], frag(IOAut(astart, astep, aext))(aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcsl, pal), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ⌜cext !(πra(step, cstep, ren, cren, pcsl, pal))⌝ ⊑ aext !(aα) ⊦ |
Π(ext, aext, ren, aren) ! (repla (step, cstep, cren, ren, aren, cext, aext, (pcs._1, pcs._2) ' + pcsl0, repla(step, cstep, cren, ren, aren, cext, aext, pcs ' + pcsl0, pal, aσ, aα), ⌜hd(aσ) '⌝ + tl(aσ), aα)) = Π(ext, cext, ren, cren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcs ' + pcsl0, pal, aσ, aα)), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcs ' + pcsl0, pal, aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pal), frag(IOAut(astart, astep, aext))(aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcs ' + pcsl0, pal), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ⌜cext !(πra(step, cstep, ren, cren, pcs ' + pcsl0, pal))⌝ ⊑ aext !(aα) ⊦
Used simplifier rules: ⊦ a + x = a ' + x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ a ' ≠ []; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s)
| Π(ext, aext, ren, aren) ! (repla (step, cstep, cren, ren, aren, cext, aext, (pcs._1, pcs._2) ' + pcsl0, repla(step, cstep, cren, ren, aren, cext, aext, pcs ' + pcsl0, pal, aσ, aα), ⌜hd(aσ) '⌝ + tl(aσ), aα)) = Π(ext, cext, ren, cren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcs ' + pcsl0, pal, aσ, aα)), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcs ' + pcsl0, pal, aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pal), frag(IOAut(astart, astep, aext))(aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcs ' + pcsl0, pal), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ⌜cext !(πra(step, cstep, ren, cren, pcs ' + pcsl0, pal))⌝ ⊑ aext !(aα) ⊦ |
Π(ext, aext, ren, aren) ! (repla (step, cstep, cren, ren, aren, cext, aext, (pcs._1, pcs._2) ' + pcsl0, repla(step, cstep, cren, ren, aren, cext, aext, pcs ' + pcsl0, pal, aσ, aα), ⌜hd(aσ) '⌝ + tl(aσ), aα)) = Π(ext, cext, ren, cren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcs ' + pcsl0, pal, aσ, aα)), pcs = (s, cs), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcs ' + pcsl0, pal, aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pal), frag(IOAut(astart, astep, aext))(aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcs ' + pcsl0, pal), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ⌜cext !(πra(step, cstep, ren, cren, pcs ' + pcsl0, pal))⌝ ⊑ aext !(aα) ⊦
| Π(ext, aext, ren, aren) ! (repla (step, cstep, cren, ren, aren, cext, aext, (pcs._1, pcs._2) ' + pcsl0, repla(step, cstep, cren, ren, aren, cext, aext, pcs ' + pcsl0, pal, aσ, aα), ⌜hd(aσ) '⌝ + tl(aσ), aα)) = Π(ext, cext, ren, cren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcs ' + pcsl0, pal, aσ, aα)), pcs = (s, cs), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, pcs ' + pcsl0, pal, aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pal), frag(IOAut(astart, astep, aext))(aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))(pcs ' + pcsl0, pal), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ⌜cext !(πra(step, cstep, ren, cren, pcs ' + pcsl0, pal))⌝ ⊑ aext !(aα) ⊦ |
Π(ext, aext, ren, aren) ! (repla (step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsl0, repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsl0, pal, aσ, aα), ⌜hd(aσ) '⌝ + tl(aσ), aα)) = Π(ext, cext, ren, cren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsl0, pal, aσ, aα)), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsl0, pal, aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pal), frag(IOAut(astart, astep, aext))(aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + pcsl0, pal), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ⌜cext !(πra(step, cstep, ren, cren, (s, cs) ' + pcsl0, pal))⌝ ⊑ aext !(aα) ⊦
| Π(ext, aext, ren, aren) ! (repla (step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsl0, repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsl0, pal, aσ, aα), ⌜hd(aσ) '⌝ + tl(aσ), aα)) = Π(ext, cext, ren, cren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsl0, pal, aσ, aα)), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsl0, pal, aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pal), frag(IOAut(astart, astep, aext))(aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + pcsl0, pal), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ⌜cext !(πra(step, cstep, ren, cren, (s, cs) ' + pcsl0, pal))⌝ ⊑ aext !(aα) ⊦ |
Used simplifier rules: finfrag-repla-sametrace: ⊦ nounsharedextR(cren, cext, ren) ∧ nounsharedextR(aren, aext, ren) ∧ Πok(ext, cext, ren, cren) ∧ Πok(ext, aext, ren, aren) ∧ frag* (IOAut (Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren))) ((s, cs) ' + pcsl, pal) ∧ frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα) ∧ ⌜cext !(πra(step, cstep, ren, cren, (s, cs) ' + pcsl, pal))⌝ ⊑ aext !(aα) → Π(ext, aext, ren, aren) ! (repla (step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsl, pal, ⌜as '⌝ + aσ, aα)) = Π(ext, cext, ren, cren) !(pal); ⊦ ⌜a '⌝ + σ ≠ []; (s) ⊦ a + σ = ⌜a '⌝ + σ; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ¬ frag(IOAut(start, step, ext))([], α); (s) ⊦ σ ≠ [] → (a = hd(σ) ∧ σ0 = tl(σ) ↔ σ = a + σ0); (elim) Used terms: aσ, as, 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.