| ⊦ 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, (s, cs) ' + pcsl, pal, ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pal), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + 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, (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), 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), nounsharedextR(aren, aext, ren), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ⌜cext !(πra(step, cstep, ren, cren, (s, cs) ' + pcsl, pal))⌝ ⊑ aext !(aα) ⊦ |
# pcsl = # pal, Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsl, pal, ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pal), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + 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, (s, cs) ' + pcsl, pal))⌝ ⊑ aext !(aα) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ frag*(IOAut(start, step, ext))(s ' + sl, al) → (# sl = # al ↔ true); (ss) Used formulas: # pcsl = # pal
| # pcsl = # pal, Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsl, pal, ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pal), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + 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, (s, cs) ' + pcsl, pal))⌝ ⊑ aext !(aα) ⊦ |
#(pcs + pcsl0) = # pal, Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (pcs + pcsl0), pal, ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pal), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + (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, (s, cs) ' + (pcs + pcsl0), pal))⌝ ⊑ aext !(aα), ∀ pal, ext, aext, ren, aren, step, cstep, cren, cext, s, cs, as, aσ, aα, astart, astep, start, cstart. ¬ ( # pcsl0 = # pal ∧ Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsl0, pal, ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pal) ∧ frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα) ∧ frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((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α)) ⊦
Used simplifier rules: repla-base: ⊦ repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ', [], ⌜as '⌝ + aσ, aα) = []; List('a) freely generated by [], +;; ⊦ # [] = 0; (s) ⊦ # x = 0 ↔ x = []; (s) ⊦ x + [] = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ ext !([]) = []; (s)
| #(pcs + pcsl0) = # pal, Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (pcs + pcsl0), pal, ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pal), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + (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, (s, cs) ' + (pcs + pcsl0), pal))⌝ ⊑ aext !(aα), ∀ pal, ext, aext, ren, aren, step, cstep, cren, cext, s, cs, as, aσ, aα, astart, astep, start, cstart. ¬ ( # pcsl0 = # pal ∧ Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcsl0, pal, ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pal) ∧ frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα) ∧ frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((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α)) ⊦ |
# pcsl0 + 1 = # pal, Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcs ' + pcsl0, pal, ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pal), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + 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, (s, cs) ' + pcs ' + pcsl0, pal))⌝ ⊑ aext !(aα), ∀ pal0, ext0, aext0, ren0, aren0, step0, cstep0, cren0, cext0, s0, cs0, as0, aσ0, aα0, astart0, astep0, start0, cstart0. Π(ext0, aext0, ren0, aren0) !(repla(step0, cstep0, cren0, ren0, aren0, cext0, aext0, (s0, cs0) ' + pcsl0, pal0, ⌜as0 '⌝ + aσ0, aα0)) = Π(ext0, cext0, ren0, cren0) !(pal0) ∨ ¬ frag(IOAut(astart0, astep0, aext0))(⌜as0 '⌝ + aσ0, aα0) ∨ ¬ frag*(IOAut(Π(start0, cstart0), Π(step0, cstep0, ren0, cren0, ext0, cext0), Π(ext0, cext0, ren0, cren0)))((s0, cs0) ' + pcsl0, pal0) ∨ ¬ nounsharedextR(aren0, aext0, ren0) ∨ ¬ nounsharedextR(cren0, cext0, ren0) ∨ ¬ Πok(ext0, aext0, ren0, aren0) ∨ ¬ Πok(ext0, cext0, ren0, cren0) ∨ ¬ ⌜cext0 !(πra(step0, cstep0, ren0, cren0, (s0, cs0) ' + pcsl0, pal0))⌝ ⊑ aext0 !(aα0) ⊦
Used simplifier rules: ⊦ frag*(IOAut(start, step, ext))(s ' + sl, al) → (# sl = # al ↔ true); (ss) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ a + x = a ' + x; (s) ⊦ m +1 = m + 1; (s) ⊦ #(a ' + x) = (# x)+1; (s)
| # pcsl0 + 1 = # pal, Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcs ' + pcsl0, pal, ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pal), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + 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, (s, cs) ' + pcs ' + pcsl0, pal))⌝ ⊑ aext !(aα), ∀ pal0, ext0, aext0, ren0, aren0, step0, cstep0, cren0, cext0, s0, cs0, as0, aσ0, aα0, astart0, astep0, start0, cstart0. Π(ext0, aext0, ren0, aren0) !(repla(step0, cstep0, cren0, ren0, aren0, cext0, aext0, (s0, cs0) ' + pcsl0, pal0, ⌜as0 '⌝ + aσ0, aα0)) = Π(ext0, cext0, ren0, cren0) !(pal0) ∨ ¬ frag(IOAut(astart0, astep0, aext0))(⌜as0 '⌝ + aσ0, aα0) ∨ ¬ frag*(IOAut(Π(start0, cstart0), Π(step0, cstep0, ren0, cren0, ext0, cext0), Π(ext0, cext0, ren0, cren0)))((s0, cs0) ' + pcsl0, pal0) ∨ ¬ nounsharedextR(aren0, aext0, ren0) ∨ ¬ nounsharedextR(cren0, cext0, ren0) ∨ ¬ Πok(ext0, aext0, ren0, aren0) ∨ ¬ Πok(ext0, cext0, ren0, cren0) ∨ ¬ ⌜cext0 !(πra(step0, cstep0, ren0, cren0, (s0, cs0) ' + pcsl0, pal0))⌝ ⊑ aext0 !(aα0) ⊦ |
# pcsl0 + 1 = # pal, pcs = (s1, cs1), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcs ' + pcsl0, pal, ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pal), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + 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, (s, cs) ' + pcs ' + pcsl0, pal))⌝ ⊑ aext !(aα), ∀ pal0, ext0, aext0, ren0, aren0, step0, cstep0, cren0, cext0, s0, cs0, as0, aσ0, aα0, astart0, astep0, start0, cstart0. Π(ext0, aext0, ren0, aren0) !(repla(step0, cstep0, cren0, ren0, aren0, cext0, aext0, (s0, cs0) ' + pcsl0, pal0, ⌜as0 '⌝ + aσ0, aα0)) = Π(ext0, cext0, ren0, cren0) !(pal0) ∨ ¬ frag(IOAut(astart0, astep0, aext0))(⌜as0 '⌝ + aσ0, aα0) ∨ ¬ frag*(IOAut(Π(start0, cstart0), Π(step0, cstep0, ren0, cren0, ext0, cext0), Π(ext0, cext0, ren0, cren0)))((s0, cs0) ' + pcsl0, pal0) ∨ ¬ nounsharedextR(aren0, aext0, ren0) ∨ ¬ nounsharedextR(cren0, cext0, ren0) ∨ ¬ Πok(ext0, aext0, ren0, aren0) ∨ ¬ Πok(ext0, cext0, ren0, cren0) ∨ ¬ ⌜cext0 !(πra(step0, cstep0, ren0, cren0, (s0, cs0) ' + pcsl0, pal0))⌝ ⊑ aext0 !(aα0) ⊦
| # pcsl0 + 1 = # pal, pcs = (s1, cs1), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + pcs ' + pcsl0, pal, ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pal), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + 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, (s, cs) ' + pcs ' + pcsl0, pal))⌝ ⊑ aext !(aα), ∀ pal0, ext0, aext0, ren0, aren0, step0, cstep0, cren0, cext0, s0, cs0, as0, aσ0, aα0, astart0, astep0, start0, cstart0. Π(ext0, aext0, ren0, aren0) !(repla(step0, cstep0, cren0, ren0, aren0, cext0, aext0, (s0, cs0) ' + pcsl0, pal0, ⌜as0 '⌝ + aσ0, aα0)) = Π(ext0, cext0, ren0, cren0) !(pal0) ∨ ¬ frag(IOAut(astart0, astep0, aext0))(⌜as0 '⌝ + aσ0, aα0) ∨ ¬ frag*(IOAut(Π(start0, cstart0), Π(step0, cstep0, ren0, cren0, ext0, cext0), Π(ext0, cext0, ren0, cren0)))((s0, cs0) ' + pcsl0, pal0) ∨ ¬ nounsharedextR(aren0, aext0, ren0) ∨ ¬ nounsharedextR(cren0, cext0, ren0) ∨ ¬ Πok(ext0, aext0, ren0, aren0) ∨ ¬ Πok(ext0, cext0, ren0, cren0) ∨ ¬ ⌜cext0 !(πra(step0, cstep0, ren0, cren0, (s0, cs0) ' + pcsl0, pal0))⌝ ⊑ aext0 !(aα0) ⊦ |
# pcsl0 + 1 = # pal, Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (s1, cs1) ' + pcsl0, pal, ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pal), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + (s1, cs1) ' + 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) ' + (s1, cs1) ' + pcsl0, pal))⌝ ⊑ aext !(aα), ∀ pal0, ext0, aext0, ren0, aren0, step0, cstep0, cren0, cext0, s0, cs0, as0, aσ0, aα0, astart0, astep0, start0, cstart0. Π(ext0, aext0, ren0, aren0) !(repla(step0, cstep0, cren0, ren0, aren0, cext0, aext0, (s0, cs0) ' + pcsl0, pal0, ⌜as0 '⌝ + aσ0, aα0)) = Π(ext0, cext0, ren0, cren0) !(pal0) ∨ ¬ frag(IOAut(astart0, astep0, aext0))(⌜as0 '⌝ + aσ0, aα0) ∨ ¬ frag*(IOAut(Π(start0, cstart0), Π(step0, cstep0, ren0, cren0, ext0, cext0), Π(ext0, cext0, ren0, cren0)))((s0, cs0) ' + pcsl0, pal0) ∨ ¬ nounsharedextR(aren0, aext0, ren0) ∨ ¬ nounsharedextR(cren0, cext0, ren0) ∨ ¬ Πok(ext0, aext0, ren0, aren0) ∨ ¬ Πok(ext0, cext0, ren0, cren0) ∨ ¬ ⌜cext0 !(πra(step0, cstep0, ren0, cren0, (s0, cs0) ' + pcsl0, pal0))⌝ ⊑ aext0 !(aα0) ⊦
| # pcsl0 + 1 = # pal, Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (s1, cs1) ' + pcsl0, pal, ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pal), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + (s1, cs1) ' + 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) ' + (s1, cs1) ' + pcsl0, pal))⌝ ⊑ aext !(aα), ∀ pal0, ext0, aext0, ren0, aren0, step0, cstep0, cren0, cext0, s0, cs0, as0, aσ0, aα0, astart0, astep0, start0, cstart0. Π(ext0, aext0, ren0, aren0) !(repla(step0, cstep0, cren0, ren0, aren0, cext0, aext0, (s0, cs0) ' + pcsl0, pal0, ⌜as0 '⌝ + aσ0, aα0)) = Π(ext0, cext0, ren0, cren0) !(pal0) ∨ ¬ frag(IOAut(astart0, astep0, aext0))(⌜as0 '⌝ + aσ0, aα0) ∨ ¬ frag*(IOAut(Π(start0, cstart0), Π(step0, cstep0, ren0, cren0, ext0, cext0), Π(ext0, cext0, ren0, cren0)))((s0, cs0) ' + pcsl0, pal0) ∨ ¬ nounsharedextR(aren0, aext0, ren0) ∨ ¬ nounsharedextR(cren0, cext0, ren0) ∨ ¬ Πok(ext0, aext0, ren0, aren0) ∨ ¬ Πok(ext0, cext0, ren0, cren0) ∨ ¬ ⌜cext0 !(πra(step0, cstep0, ren0, cren0, (s0, cs0) ' + pcsl0, pal0))⌝ ⊑ aext0 !(aα0) ⊦ |
# pcsl0 + 1 = # pal, pal = pa + pal1, Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (s1, cs1) ' + pcsl0, pal, ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pal), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + (s1, cs1) ' + 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) ' + (s1, cs1) ' + pcsl0, pal))⌝ ⊑ aext !(aα), ∀ pal0, ext0, aext0, ren0, aren0, step0, cstep0, cren0, cext0, s0, cs0, as0, aσ0, aα0, astart0, astep0, start0, cstart0. Π(ext0, aext0, ren0, aren0) !(repla(step0, cstep0, cren0, ren0, aren0, cext0, aext0, (s0, cs0) ' + pcsl0, pal0, ⌜as0 '⌝ + aσ0, aα0)) = Π(ext0, cext0, ren0, cren0) !(pal0) ∨ ¬ frag(IOAut(astart0, astep0, aext0))(⌜as0 '⌝ + aσ0, aα0) ∨ ¬ frag*(IOAut(Π(start0, cstart0), Π(step0, cstep0, ren0, cren0, ext0, cext0), Π(ext0, cext0, ren0, cren0)))((s0, cs0) ' + pcsl0, pal0) ∨ ¬ nounsharedextR(aren0, aext0, ren0) ∨ ¬ nounsharedextR(cren0, cext0, ren0) ∨ ¬ Πok(ext0, aext0, ren0, aren0) ∨ ¬ Πok(ext0, cext0, ren0, cren0) ∨ ¬ ⌜cext0 !(πra(step0, cstep0, ren0, cren0, (s0, cs0) ' + pcsl0, pal0))⌝ ⊑ aext0 !(aα0) ⊦
Used simplifier rules: List('a) freely generated by [], +;; ⊦ # [] = 0; (s) ⊦ m + n = 0 ↔ m = 0 ∧ n = 0; (ws) ⊦ # x = 0 ↔ x = []; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic
| # pcsl0 + 1 = # pal, pal = pa + pal1, Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (s1, cs1) ' + pcsl0, pal, ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pal), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + (s1, cs1) ' + 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) ' + (s1, cs1) ' + pcsl0, pal))⌝ ⊑ aext !(aα), ∀ pal0, ext0, aext0, ren0, aren0, step0, cstep0, cren0, cext0, s0, cs0, as0, aσ0, aα0, astart0, astep0, start0, cstart0. Π(ext0, aext0, ren0, aren0) !(repla(step0, cstep0, cren0, ren0, aren0, cext0, aext0, (s0, cs0) ' + pcsl0, pal0, ⌜as0 '⌝ + aσ0, aα0)) = Π(ext0, cext0, ren0, cren0) !(pal0) ∨ ¬ frag(IOAut(astart0, astep0, aext0))(⌜as0 '⌝ + aσ0, aα0) ∨ ¬ frag*(IOAut(Π(start0, cstart0), Π(step0, cstep0, ren0, cren0, ext0, cext0), Π(ext0, cext0, ren0, cren0)))((s0, cs0) ' + pcsl0, pal0) ∨ ¬ nounsharedextR(aren0, aext0, ren0) ∨ ¬ nounsharedextR(cren0, cext0, ren0) ∨ ¬ Πok(ext0, aext0, ren0, aren0) ∨ ¬ Πok(ext0, cext0, ren0, cren0) ∨ ¬ ⌜cext0 !(πra(step0, cstep0, ren0, cren0, (s0, cs0) ' + pcsl0, pal0))⌝ ⊑ aext0 !(aα0) ⊦ |
# pcsl0 = # pal1, Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (s1, cs1) ' + pcsl0, pa ' + pal1, ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pa ') + Π(ext, cext, ren, cren) !(pal1), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + (s1, cs1) ' + pcsl0, pa ' + pal1), 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) ' + (s1, cs1) ' + pcsl0, pa ' + pal1))⌝ ⊑ aext !(aα), ∀ pal0, ext0, aext0, ren0, aren0, step0, cstep0, cren0, cext0, s0, cs0, as0, aσ0, aα0, astart0, astep0, start0, cstart0. Π(ext0, aext0, ren0, aren0) !(repla(step0, cstep0, cren0, ren0, aren0, cext0, aext0, (s0, cs0) ' + pcsl0, pal0, ⌜as0 '⌝ + aσ0, aα0)) = Π(ext0, cext0, ren0, cren0) !(pal0) ∨ ¬ frag(IOAut(astart0, astep0, aext0))(⌜as0 '⌝ + aσ0, aα0) ∨ ¬ frag*(IOAut(Π(start0, cstart0), Π(step0, cstep0, ren0, cren0, ext0, cext0), Π(ext0, cext0, ren0, cren0)))((s0, cs0) ' + pcsl0, pal0) ∨ ¬ nounsharedextR(aren0, aext0, ren0) ∨ ¬ nounsharedextR(cren0, cext0, ren0) ∨ ¬ Πok(ext0, aext0, ren0, aren0) ∨ ¬ Πok(ext0, cext0, ren0, cren0) ∨ ¬ ⌜cext0 !(πra(step0, cstep0, ren0, cren0, (s0, cs0) ' + pcsl0, pal0))⌝ ⊑ aext0 !(aα0) ⊦
Used simplifier rules: ⊦ a + x = a ' + x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ext !(al + al0) = ext !(al) + ext !(al0); (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) ⊦ m +1 = m + 1; (s) ⊦ #(a ' + x) = (# x)+1; (s)
| # pcsl0 = # pal1, Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (s1, cs1) ' + pcsl0, pa ' + pal1, ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pa ') + Π(ext, cext, ren, cren) !(pal1), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s, cs) ' + (s1, cs1) ' + pcsl0, pa ' + pal1), 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) ' + (s1, cs1) ' + pcsl0, pa ' + pal1))⌝ ⊑ aext !(aα), ∀ pal0, ext0, aext0, ren0, aren0, step0, cstep0, cren0, cext0, s0, cs0, as0, aσ0, aα0, astart0, astep0, start0, cstart0. Π(ext0, aext0, ren0, aren0) !(repla(step0, cstep0, cren0, ren0, aren0, cext0, aext0, (s0, cs0) ' + pcsl0, pal0, ⌜as0 '⌝ + aσ0, aα0)) = Π(ext0, cext0, ren0, cren0) !(pal0) ∨ ¬ frag(IOAut(astart0, astep0, aext0))(⌜as0 '⌝ + aσ0, aα0) ∨ ¬ frag*(IOAut(Π(start0, cstart0), Π(step0, cstep0, ren0, cren0, ext0, cext0), Π(ext0, cext0, ren0, cren0)))((s0, cs0) ' + pcsl0, pal0) ∨ ¬ nounsharedextR(aren0, aext0, ren0) ∨ ¬ nounsharedextR(cren0, cext0, ren0) ∨ ¬ Πok(ext0, aext0, ren0, aren0) ∨ ¬ Πok(ext0, cext0, ren0, cren0) ∨ ¬ ⌜cext0 !(πra(step0, cstep0, ren0, cren0, (s0, cs0) ' + pcsl0, pal0))⌝ ⊑ aext0 !(aα0) ⊦ |
⊦ frag*(IOAut(start, step, ext))(s ' + sl, a ' + al) ↔ step(s, a, sl.head) ∧ frag*(IOAut(start, step, ext))(sl, al)
# pcsl0 = # pal1, Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (s1, cs1) ' + pcsl0, pa ' + pal1, ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pa ') + Π(ext, cext, ren, cren) !(pal1), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), Π(step, cstep, ren, cren, ext, cext)((s, cs), pa, ((s1, cs1) ' + pcsl0).head), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ⌜cext !(πra(step, cstep, ren, cren, (s, cs) ' + (s1, cs1) ' + pcsl0, pa ' + pal1))⌝ ⊑ aext !(aα), ∀ pal0, ext0, aext0, ren0, aren0, step0, cstep0, cren0, cext0, s0, cs0, as0, aσ0, aα0, astart0, astep0, start0, cstart0. Π(ext0, aext0, ren0, aren0) !(repla(step0, cstep0, cren0, ren0, aren0, cext0, aext0, (s0, cs0) ' + pcsl0, pal0, ⌜as0 '⌝ + aσ0, aα0)) = Π(ext0, cext0, ren0, cren0) !(pal0) ∨ ¬ frag(IOAut(astart0, astep0, aext0))(⌜as0 '⌝ + aσ0, aα0) ∨ ¬ frag*(IOAut(Π(start0, cstart0), Π(step0, cstep0, ren0, cren0, ext0, cext0), Π(ext0, cext0, ren0, cren0)))((s0, cs0) ' + pcsl0, pal0) ∨ ¬ nounsharedextR(aren0, aext0, ren0) ∨ ¬ nounsharedextR(cren0, cext0, ren0) ∨ ¬ Πok(ext0, aext0, ren0, aren0) ∨ ¬ Πok(ext0, cext0, ren0, cren0) ∨ ¬ ⌜cext0 !(πra(step0, cstep0, ren0, cren0, (s0, cs0) ' + pcsl0, pal0))⌝ ⊑ aext0 !(aα0) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: pal1, (s, cs), Π(ext, cext, ren, cren), (s1, cs1) ' + pcsl0, pa, Π(start, cstart), Π(step, cstep, ren, cren, ext, cext)
| ⊦ frag*(IOAut(start, step, ext))(s ' + sl, a ' + al) ↔ step(s, a, sl.head) ∧ frag*(IOAut(start, step, ext))(sl, al) |
| # pcsl0 = # pal1, Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (s1, cs1) ' + pcsl0, pa ' + pal1, ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pa ') + Π(ext, cext, ren, cren) !(pal1), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), Π(step, cstep, ren, cren, ext, cext)((s, cs), pa, ((s1, cs1) ' + pcsl0).head), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ⌜cext !(πra(step, cstep, ren, cren, (s, cs) ' + (s1, cs1) ' + pcsl0, pa ' + pal1))⌝ ⊑ aext !(aα), ∀ pal0, ext0, aext0, ren0, aren0, step0, cstep0, cren0, cext0, s0, cs0, as0, aσ0, aα0, astart0, astep0, start0, cstart0. Π(ext0, aext0, ren0, aren0) !(repla(step0, cstep0, cren0, ren0, aren0, cext0, aext0, (s0, cs0) ' + pcsl0, pal0, ⌜as0 '⌝ + aσ0, aα0)) = Π(ext0, cext0, ren0, cren0) !(pal0) ∨ ¬ frag(IOAut(astart0, astep0, aext0))(⌜as0 '⌝ + aσ0, aα0) ∨ ¬ frag*(IOAut(Π(start0, cstart0), Π(step0, cstep0, ren0, cren0, ext0, cext0), Π(ext0, cext0, ren0, cren0)))((s0, cs0) ' + pcsl0, pal0) ∨ ¬ nounsharedextR(aren0, aext0, ren0) ∨ ¬ nounsharedextR(cren0, cext0, ren0) ∨ ¬ Πok(ext0, aext0, ren0, aren0) ∨ ¬ Πok(ext0, cext0, ren0, cren0) ∨ ¬ ⌜cext0 !(πra(step0, cstep0, ren0, cren0, (s0, cs0) ' + pcsl0, pal0))⌝ ⊑ aext0 !(aα0) ⊦ |
# pcsl0 = # pal1, Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (s1, cs1) ' + pcsl0, pa ' + pal1, ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pa ') + Π(ext, cext, ren, cren) !(pal1), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), Π(step, cstep, ren, cren, ext, cext)((s, cs), pa, (s1, cs1)), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ⌜cext !(πra(step, cstep, ren, cren, (s, cs) ' + (s1, cs1) ' + pcsl0, pa ' + pal1))⌝ ⊑ aext !(aα), ∀ pal0, ext0, aext0, ren0, aren0, step0, cstep0, cren0, cext0, s0, cs0, as0, aσ0, aα0, astart0, astep0, start0, cstart0. Π(ext0, aext0, ren0, aren0) !(repla(step0, cstep0, cren0, ren0, aren0, cext0, aext0, (s0, cs0) ' + pcsl0, pal0, ⌜as0 '⌝ + aσ0, aα0)) = Π(ext0, cext0, ren0, cren0) !(pal0) ∨ ¬ frag(IOAut(astart0, astep0, aext0))(⌜as0 '⌝ + aσ0, aα0) ∨ ¬ frag*(IOAut(Π(start0, cstart0), Π(step0, cstep0, ren0, cren0, ext0, cext0), Π(ext0, cext0, ren0, cren0)))((s0, cs0) ' + pcsl0, pal0) ∨ ¬ nounsharedextR(aren0, aext0, ren0) ∨ ¬ nounsharedextR(cren0, cext0, ren0) ∨ ¬ Πok(ext0, aext0, ren0, aren0) ∨ ¬ Πok(ext0, cext0, ren0, cren0) ∨ ¬ ⌜cext0 !(πra(step0, cstep0, ren0, cren0, (s0, cs0) ' + pcsl0, pal0))⌝ ⊑ aext0 !(aα0) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ (a ' + x).head = a; (s)
| # pcsl0 = # pal1, Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (s1, cs1) ' + pcsl0, pa ' + pal1, ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pa ') + Π(ext, cext, ren, cren) !(pal1), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), Π(step, cstep, ren, cren, ext, cext)((s, cs), pa, (s1, cs1)), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ⌜cext !(πra(step, cstep, ren, cren, (s, cs) ' + (s1, cs1) ' + pcsl0, pa ' + pal1))⌝ ⊑ aext !(aα), ∀ pal0, ext0, aext0, ren0, aren0, step0, cstep0, cren0, cext0, s0, cs0, as0, aσ0, aα0, astart0, astep0, start0, cstart0. Π(ext0, aext0, ren0, aren0) !(repla(step0, cstep0, cren0, ren0, aren0, cext0, aext0, (s0, cs0) ' + pcsl0, pal0, ⌜as0 '⌝ + aσ0, aα0)) = Π(ext0, cext0, ren0, cren0) !(pal0) ∨ ¬ frag(IOAut(astart0, astep0, aext0))(⌜as0 '⌝ + aσ0, aα0) ∨ ¬ frag*(IOAut(Π(start0, cstart0), Π(step0, cstep0, ren0, cren0, ext0, cext0), Π(ext0, cext0, ren0, cren0)))((s0, cs0) ' + pcsl0, pal0) ∨ ¬ nounsharedextR(aren0, aext0, ren0) ∨ ¬ nounsharedextR(cren0, cext0, ren0) ∨ ¬ Πok(ext0, aext0, ren0, aren0) ∨ ¬ Πok(ext0, cext0, ren0, cren0) ∨ ¬ ⌜cext0 !(πra(step0, cstep0, ren0, cren0, (s0, cs0) ' + pcsl0, pal0))⌝ ⊑ aext0 !(aα0) ⊦ |
⊦ Π(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))
# pcsl0 = # pal1, Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (s1, cs1) ' + pcsl0, pa ' + pal1, ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pa ') + Π(ext, cext, ren, cren) !(pal1), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s1, cs1) ' + pcsl0, pal1), 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) ' + (s1, cs1) ' + pcsl0, pa ' + pal1))⌝ ⊑ aext !(aα), ∀ pal0, ext0, aext0, ren0, aren0, step0, cstep0, cren0, cext0, s0, cs0, as0, aσ0, aα0, astart0, astep0, start0, cstart0. Π(ext0, aext0, ren0, aren0) !(repla(step0, cstep0, cren0, ren0, aren0, cext0, aext0, (s0, cs0) ' + pcsl0, pal0, ⌜as0 '⌝ + aσ0, aα0)) = Π(ext0, cext0, ren0, cren0) !(pal0) ∨ ¬ frag(IOAut(astart0, astep0, aext0))(⌜as0 '⌝ + aσ0, aα0) ∨ ¬ frag*(IOAut(Π(start0, cstart0), Π(step0, cstep0, ren0, cren0, ext0, cext0), Π(ext0, cext0, ren0, cren0)))((s0, cs0) ' + pcsl0, pal0) ∨ ¬ nounsharedextR(aren0, aext0, ren0) ∨ ¬ nounsharedextR(cren0, cext0, ren0) ∨ ¬ Πok(ext0, aext0, ren0, aren0) ∨ ¬ Πok(ext0, cext0, ren0, cren0) ∨ ¬ ⌜cext0 !(πra(step0, cstep0, ren0, cren0, (s0, cs0) ' + pcsl0, pal0))⌝ ⊑ aext0 !(aα0), cs = cs1 ∧ (∃ la. step(s, la, s1) ∧ pa = ren(la) ∧ ¬ cod(cren)(pa)) ∨ s = s1 ∧ (∃ ra. cstep(cs, ra, cs1) ∧ pa = cren(ra) ∧ ¬ cod(ren)(pa)) ∨ (∃ la, ra. step(s, la, s1) ∧ ext(la) ≠ None ∧ pa = ren(la) ∧ cstep(cs, ra, cs1) ∧ cext(ra) ≠ None ∧ pa = cren(ra)) ⊦
Used terms: cext, pa, cs, cstep, ren, ext, cren, cs1, step, s, s1
| ⊦ Π(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)) |
| # pcsl0 = # pal1, Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (s1, cs1) ' + pcsl0, pa ' + pal1, ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pa ') + Π(ext, cext, ren, cren) !(pal1), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s1, cs1) ' + pcsl0, pal1), 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) ' + (s1, cs1) ' + pcsl0, pa ' + pal1))⌝ ⊑ aext !(aα), ∀ pal0, ext0, aext0, ren0, aren0, step0, cstep0, cren0, cext0, s0, cs0, as0, aσ0, aα0, astart0, astep0, start0, cstart0. Π(ext0, aext0, ren0, aren0) !(repla(step0, cstep0, cren0, ren0, aren0, cext0, aext0, (s0, cs0) ' + pcsl0, pal0, ⌜as0 '⌝ + aσ0, aα0)) = Π(ext0, cext0, ren0, cren0) !(pal0) ∨ ¬ frag(IOAut(astart0, astep0, aext0))(⌜as0 '⌝ + aσ0, aα0) ∨ ¬ frag*(IOAut(Π(start0, cstart0), Π(step0, cstep0, ren0, cren0, ext0, cext0), Π(ext0, cext0, ren0, cren0)))((s0, cs0) ' + pcsl0, pal0) ∨ ¬ nounsharedextR(aren0, aext0, ren0) ∨ ¬ nounsharedextR(cren0, cext0, ren0) ∨ ¬ Πok(ext0, aext0, ren0, aren0) ∨ ¬ Πok(ext0, cext0, ren0, cren0) ∨ ¬ ⌜cext0 !(πra(step0, cstep0, ren0, cren0, (s0, cs0) ' + pcsl0, pal0))⌝ ⊑ aext0 !(aα0), cs = cs1 ∧ (∃ la. step(s, la, s1) ∧ pa = ren(la) ∧ ¬ cod(cren)(pa)) ∨ s = s1 ∧ (∃ ra. cstep(cs, ra, cs1) ∧ pa = cren(ra) ∧ ¬ cod(ren)(pa)) ∨ (∃ la, ra. step(s, la, s1) ∧ ext(la) ≠ None ∧ pa = ren(la) ∧ cstep(cs, ra, cs1) ∧ cext(ra) ≠ None ∧ pa = cren(ra)) ⊦ |
# pcsl0 = # pal1, Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (s1, cs1) ' + pcsl0, pa ' + pal1, ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pa ') + Π(ext, cext, ren, cren) !(pal1), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s1, cs1) ' + pcsl0, pal1), 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) ' + (s1, cs1) ' + pcsl0, pa ' + pal1))⌝ ⊑ aext !(aα), ∀ pal0, ext0, aext0, ren0, aren0, step0, cstep0, cren0, cext0, s0, cs0, as0, aσ0, aα0, astart0, astep0, start0, cstart0. Π(ext0, aext0, ren0, aren0) !(repla(step0, cstep0, cren0, ren0, aren0, cext0, aext0, (s0, cs0) ' + pcsl0, pal0, ⌜as0 '⌝ + aσ0, aα0)) = Π(ext0, cext0, ren0, cren0) !(pal0) ∨ ¬ frag(IOAut(astart0, astep0, aext0))(⌜as0 '⌝ + aσ0, aα0) ∨ ¬ frag*(IOAut(Π(start0, cstart0), Π(step0, cstep0, ren0, cren0, ext0, cext0), Π(ext0, cext0, ren0, cren0)))((s0, cs0) ' + pcsl0, pal0) ∨ ¬ nounsharedextR(aren0, aext0, ren0) ∨ ¬ nounsharedextR(cren0, cext0, ren0) ∨ ¬ Πok(ext0, aext0, ren0, aren0) ∨ ¬ Πok(ext0, cext0, ren0, cren0) ∨ ¬ ⌜cext0 !(πra(step0, cstep0, ren0, cren0, (s0, cs0) ' + pcsl0, pal0))⌝ ⊑ aext0 !(aα0), cs = cs1 ∧ step(s, a, s1) ∧ pa = ren(a) ∧ ¬ cod(cren)(ren(a)) ∨ s = s1 ∧ cstep(cs, ca, cs1) ∧ pa = cren(ca) ∧ ¬ cod(ren)(cren(ca)) ∨ step(s, a0, s1) ∧ ext(a0) ≠ None ∧ cren(ca0) = ren(a0) ∧ cstep(cs, ca0, cs1) ∧ cext(ca0) ≠ None ∧ pa = cren(ca0) ⊦
| # pcsl0 = # pal1, Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (s1, cs1) ' + pcsl0, pa ' + pal1, ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pa ') + Π(ext, cext, ren, cren) !(pal1), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s1, cs1) ' + pcsl0, pal1), 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) ' + (s1, cs1) ' + pcsl0, pa ' + pal1))⌝ ⊑ aext !(aα), ∀ pal0, ext0, aext0, ren0, aren0, step0, cstep0, cren0, cext0, s0, cs0, as0, aσ0, aα0, astart0, astep0, start0, cstart0. Π(ext0, aext0, ren0, aren0) !(repla(step0, cstep0, cren0, ren0, aren0, cext0, aext0, (s0, cs0) ' + pcsl0, pal0, ⌜as0 '⌝ + aσ0, aα0)) = Π(ext0, cext0, ren0, cren0) !(pal0) ∨ ¬ frag(IOAut(astart0, astep0, aext0))(⌜as0 '⌝ + aσ0, aα0) ∨ ¬ frag*(IOAut(Π(start0, cstart0), Π(step0, cstep0, ren0, cren0, ext0, cext0), Π(ext0, cext0, ren0, cren0)))((s0, cs0) ' + pcsl0, pal0) ∨ ¬ nounsharedextR(aren0, aext0, ren0) ∨ ¬ nounsharedextR(cren0, cext0, ren0) ∨ ¬ Πok(ext0, aext0, ren0, aren0) ∨ ¬ Πok(ext0, cext0, ren0, cren0) ∨ ¬ ⌜cext0 !(πra(step0, cstep0, ren0, cren0, (s0, cs0) ' + pcsl0, pal0))⌝ ⊑ aext0 !(aα0), cs = cs1 ∧ step(s, a, s1) ∧ pa = ren(a) ∧ ¬ cod(cren)(ren(a)) ∨ s = s1 ∧ cstep(cs, ca, cs1) ∧ pa = cren(ca) ∧ ¬ cod(ren)(cren(ca)) ∨ step(s, a0, s1) ∧ ext(a0) ≠ None ∧ cren(ca0) = ren(a0) ∧ cstep(cs, ca0, cs1) ∧ cext(ca0) ≠ None ∧ pa = cren(ca0) ⊦ |
# pcsl0 = # pal1, cs = cs1, pa = ren(a), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (s1, cs1) ' + pcsl0, pa ' + pal1, ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pa ') + Π(ext, cext, ren, cren) !(pal1), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), step(s, a, s1), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ⌜cext !(πra(step, cstep, ren, cren, (s, cs) ' + (s1, cs1) ' + pcsl0, pa ' + pal1))⌝ ⊑ aext !(aα), ¬ cod(cren)(ren(a)), ∀ pal0, ext0, aext0, ren0, aren0, step0, cstep0, cren0, cext0, s0, cs0, as0, aσ0, aα0, astart0, astep0, start0, cstart0. Π(ext0, aext0, ren0, aren0) !(repla(step0, cstep0, cren0, ren0, aren0, cext0, aext0, (s0, cs0) ' + pcsl0, pal0, ⌜as0 '⌝ + aσ0, aα0)) = Π(ext0, cext0, ren0, cren0) !(pal0) ∨ ¬ frag(IOAut(astart0, astep0, aext0))(⌜as0 '⌝ + aσ0, aα0) ∨ ¬ frag*(IOAut(Π(start0, cstart0), Π(step0, cstep0, ren0, cren0, ext0, cext0), Π(ext0, cext0, ren0, cren0)))((s0, cs0) ' + pcsl0, pal0) ∨ ¬ nounsharedextR(aren0, aext0, ren0) ∨ ¬ nounsharedextR(cren0, cext0, ren0) ∨ ¬ Πok(ext0, aext0, ren0, aren0) ∨ ¬ Πok(ext0, cext0, ren0, cren0) ∨ ¬ ⌜cext0 !(πra(step0, cstep0, ren0, cren0, (s0, cs0) ' + pcsl0, pal0))⌝ ⊑ aext0 !(aα0) ⊦
# pcsl0 = # pal1, pa = cren(ca), s = s1, Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (s1, cs1) ' + pcsl0, pa ' + pal1, ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pa ') + Π(ext, cext, ren, cren) !(pal1), cstep(cs, ca, cs1), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s1, cs1) ' + pcsl0, pal1), 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) ' + (s1, cs1) ' + pcsl0, pa ' + pal1))⌝ ⊑ aext !(aα), ¬ cod(ren)(cren(ca)), ∀ pal0, ext0, aext0, ren0, aren0, step0, cstep0, cren0, cext0, s0, cs0, as0, aσ0, aα0, astart0, astep0, start0, cstart0. Π(ext0, aext0, ren0, aren0) !(repla(step0, cstep0, cren0, ren0, aren0, cext0, aext0, (s0, cs0) ' + pcsl0, pal0, ⌜as0 '⌝ + aσ0, aα0)) = Π(ext0, cext0, ren0, cren0) !(pal0) ∨ ¬ frag(IOAut(astart0, astep0, aext0))(⌜as0 '⌝ + aσ0, aα0) ∨ ¬ frag*(IOAut(Π(start0, cstart0), Π(step0, cstep0, ren0, cren0, ext0, cext0), Π(ext0, cext0, ren0, cren0)))((s0, cs0) ' + pcsl0, pal0) ∨ ¬ nounsharedextR(aren0, aext0, ren0) ∨ ¬ nounsharedextR(cren0, cext0, ren0) ∨ ¬ Πok(ext0, aext0, ren0, aren0) ∨ ¬ Πok(ext0, cext0, ren0, cren0) ∨ ¬ ⌜cext0 !(πra(step0, cstep0, ren0, cren0, (s0, cs0) ' + pcsl0, pal0))⌝ ⊑ aext0 !(aα0) ⊦
# pcsl0 = # pal1, cren(ca0) = ren(a0), pa = cren(ca0), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (s1, cs1) ' + pcsl0, pa ' + pal1, ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pa ') + Π(ext, cext, ren, cren) !(pal1), cext(ca0) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs1), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), step(s, a0, s1), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ⌜cext !(πra(step, cstep, ren, cren, (s, cs) ' + (s1, cs1) ' + pcsl0, pa ' + pal1))⌝ ⊑ aext !(aα), ∀ pal0, ext0, aext0, ren0, aren0, step0, cstep0, cren0, cext0, s0, cs0, as0, aσ0, aα0, astart0, astep0, start0, cstart0. Π(ext0, aext0, ren0, aren0) !(repla(step0, cstep0, cren0, ren0, aren0, cext0, aext0, (s0, cs0) ' + pcsl0, pal0, ⌜as0 '⌝ + aσ0, aα0)) = Π(ext0, cext0, ren0, cren0) !(pal0) ∨ ¬ frag(IOAut(astart0, astep0, aext0))(⌜as0 '⌝ + aσ0, aα0) ∨ ¬ frag*(IOAut(Π(start0, cstart0), Π(step0, cstep0, ren0, cren0, ext0, cext0), Π(ext0, cext0, ren0, cren0)))((s0, cs0) ' + pcsl0, pal0) ∨ ¬ nounsharedextR(aren0, aext0, ren0) ∨ ¬ nounsharedextR(cren0, cext0, ren0) ∨ ¬ Πok(ext0, aext0, ren0, aren0) ∨ ¬ Πok(ext0, cext0, ren0, cren0) ∨ ¬ ⌜cext0 !(πra(step0, cstep0, ren0, cren0, (s0, cs0) ' + pcsl0, pal0))⌝ ⊑ aext0 !(aα0) ⊦
| # pcsl0 = # pal1, cs = cs1, pa = ren(a), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (s1, cs1) ' + pcsl0, pa ' + pal1, ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pa ') + Π(ext, cext, ren, cren) !(pal1), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), step(s, a, s1), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ⌜cext !(πra(step, cstep, ren, cren, (s, cs) ' + (s1, cs1) ' + pcsl0, pa ' + pal1))⌝ ⊑ aext !(aα), ¬ cod(cren)(ren(a)), ∀ pal0, ext0, aext0, ren0, aren0, step0, cstep0, cren0, cext0, s0, cs0, as0, aσ0, aα0, astart0, astep0, start0, cstart0. Π(ext0, aext0, ren0, aren0) !(repla(step0, cstep0, cren0, ren0, aren0, cext0, aext0, (s0, cs0) ' + pcsl0, pal0, ⌜as0 '⌝ + aσ0, aα0)) = Π(ext0, cext0, ren0, cren0) !(pal0) ∨ ¬ frag(IOAut(astart0, astep0, aext0))(⌜as0 '⌝ + aσ0, aα0) ∨ ¬ frag*(IOAut(Π(start0, cstart0), Π(step0, cstep0, ren0, cren0, ext0, cext0), Π(ext0, cext0, ren0, cren0)))((s0, cs0) ' + pcsl0, pal0) ∨ ¬ nounsharedextR(aren0, aext0, ren0) ∨ ¬ nounsharedextR(cren0, cext0, ren0) ∨ ¬ Πok(ext0, aext0, ren0, aren0) ∨ ¬ Πok(ext0, cext0, ren0, cren0) ∨ ¬ ⌜cext0 !(πra(step0, cstep0, ren0, cren0, (s0, cs0) ' + pcsl0, pal0))⌝ ⊑ aext0 !(aα0) ⊦ |
# pcsl0 = # pal1, Π(ext, aext, ren, aren) !(ren(a) ') + Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(ren(a) ') + Π(ext, cext, ren, cren) !(pal1), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), step(s, a, s1), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ ⊑ aext !(aα), ¬ cod(cren)(ren(a)), ∀ pal0, ext0, aext0, ren0, aren0, step0, cstep0, cren0, cext0, s0, cs0, as0, aσ0, aα0, astart0, astep0, start0, cstart0. Π(ext0, aext0, ren0, aren0) !(repla(step0, cstep0, cren0, ren0, aren0, cext0, aext0, (s0, cs0) ' + pcsl0, pal0, ⌜as0 '⌝ + aσ0, aα0)) = Π(ext0, cext0, ren0, cren0) !(pal0) ∨ ¬ frag(IOAut(astart0, astep0, aext0))(⌜as0 '⌝ + aσ0, aα0) ∨ ¬ frag*(IOAut(Π(start0, cstart0), Π(step0, cstep0, ren0, cren0, ext0, cext0), Π(ext0, cext0, ren0, cren0)))((s0, cs0) ' + pcsl0, pal0) ∨ ¬ nounsharedextR(aren0, aext0, ren0) ∨ ¬ nounsharedextR(cren0, cext0, ren0) ∨ ¬ Πok(ext0, aext0, ren0, aren0) ∨ ¬ Πok(ext0, cext0, ren0, cren0) ∨ ¬ ⌜cext0 !(πra(step0, cstep0, ren0, cren0, (s0, cs0) ' + pcsl0, pal0))⌝ ⊑ aext0 !(aα0) ⊦
Used simplifier rules: repla-rec-addS: ⊦ step(s, a, s0) ∧ ¬ cod(cren)(ren(a)) → repla (step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (s0, cs) ' + pcsl, ren(a) ' + pal, ⌜as '⌝ + aσ, aα) = ren(a) ' + repla (step, cstep, cren, ren, aren, cext, aext, (s0, cs) ' + pcsl, pal, ⌜as '⌝ + aσ, aα); a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ # psl = # pal ∧ lstep(ls, la, ls0) ∧ ¬ cod(rren)(lren(la)) → πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs) ' + psl, lren(la) ' + pal) = πra(lstep, rstep, lren, rren, (ls0, rs) ' + psl, pal); (s) ⊦ ext !(al + al0) = ext !(al) + ext !(al0); (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream
| # pcsl0 = # pal1, Π(ext, aext, ren, aren) !(ren(a) ') + Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(ren(a) ') + Π(ext, cext, ren, cren) !(pal1), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), step(s, a, s1), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ ⊑ aext !(aα), ¬ cod(cren)(ren(a)), ∀ pal0, ext0, aext0, ren0, aren0, step0, cstep0, cren0, cext0, s0, cs0, as0, aσ0, aα0, astart0, astep0, start0, cstart0. Π(ext0, aext0, ren0, aren0) !(repla(step0, cstep0, cren0, ren0, aren0, cext0, aext0, (s0, cs0) ' + pcsl0, pal0, ⌜as0 '⌝ + aσ0, aα0)) = Π(ext0, cext0, ren0, cren0) !(pal0) ∨ ¬ frag(IOAut(astart0, astep0, aext0))(⌜as0 '⌝ + aσ0, aα0) ∨ ¬ frag*(IOAut(Π(start0, cstart0), Π(step0, cstep0, ren0, cren0, ext0, cext0), Π(ext0, cext0, ren0, cren0)))((s0, cs0) ' + pcsl0, pal0) ∨ ¬ nounsharedextR(aren0, aext0, ren0) ∨ ¬ nounsharedextR(cren0, cext0, ren0) ∨ ¬ Πok(ext0, aext0, ren0, aren0) ∨ ¬ Πok(ext0, cext0, ren0, cren0) ∨ ¬ ⌜cext0 !(πra(step0, cstep0, ren0, cren0, (s0, cs0) ' + pcsl0, pal0))⌝ ⊑ aext0 !(aα0) ⊦ |
Used simplifier rules: same-concrete-abstract: ⊦ Πok(ext, aext, ren, aren) ∧ Πok(ext, cext, ren, cren) → (Π(ext, aext, ren, aren) !(ren(a) ') = Π(ext, cext, ren, cren) !(ren(a) ') ↔ true); ⊦ # y = # y0 → (x + y = z + y0 ↔ x = z ∧ y = y0); (ws) a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: pal1, ext, aext, ren, aren, step, cstep, cren, cext, s1, cs1, as, aσ, aα, astart, astep, start, cstart
| # pcsl0 = # pal1, pa = cren(ca), s = s1, Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (s1, cs1) ' + pcsl0, pa ' + pal1, ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pa ') + Π(ext, cext, ren, cren) !(pal1), cstep(cs, ca, cs1), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s1, cs1) ' + pcsl0, pal1), 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) ' + (s1, cs1) ' + pcsl0, pa ' + pal1))⌝ ⊑ aext !(aα), ¬ cod(ren)(cren(ca)), ∀ pal0, ext0, aext0, ren0, aren0, step0, cstep0, cren0, cext0, s0, cs0, as0, aσ0, aα0, astart0, astep0, start0, cstart0. Π(ext0, aext0, ren0, aren0) !(repla(step0, cstep0, cren0, ren0, aren0, cext0, aext0, (s0, cs0) ' + pcsl0, pal0, ⌜as0 '⌝ + aσ0, aα0)) = Π(ext0, cext0, ren0, cren0) !(pal0) ∨ ¬ frag(IOAut(astart0, astep0, aext0))(⌜as0 '⌝ + aσ0, aα0) ∨ ¬ frag*(IOAut(Π(start0, cstart0), Π(step0, cstep0, ren0, cren0, ext0, cext0), Π(ext0, cext0, ren0, cren0)))((s0, cs0) ' + pcsl0, pal0) ∨ ¬ nounsharedextR(aren0, aext0, ren0) ∨ ¬ nounsharedextR(cren0, cext0, ren0) ∨ ¬ Πok(ext0, aext0, ren0, aren0) ∨ ¬ Πok(ext0, cext0, ren0, cren0) ∨ ¬ ⌜cext0 !(πra(step0, cstep0, ren0, cren0, (s0, cs0) ' + pcsl0, pal0))⌝ ⊑ aext0 !(aα0) ⊦ |
# pcsl0 = # pal1, Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pal1), cstep(cs, ca, cs1), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ ⊑ aext !(aα), ¬ cod(ren)(cren(ca)), ∀ pal0, ext0, aext0, ren0, aren0, step0, cstep0, cren0, cext0, s0, cs0, as0, aσ0, aα0, astart0, astep0, start0, cstart0. Π(ext0, aext0, ren0, aren0) !(repla(step0, cstep0, cren0, ren0, aren0, cext0, aext0, (s0, cs0) ' + pcsl0, pal0, ⌜as0 '⌝ + aσ0, aα0)) = Π(ext0, cext0, ren0, cren0) !(pal0) ∨ ¬ frag(IOAut(astart0, astep0, aext0))(⌜as0 '⌝ + aσ0, aα0) ∨ ¬ frag*(IOAut(Π(start0, cstart0), Π(step0, cstep0, ren0, cren0, ext0, cext0), Π(ext0, cext0, ren0, cren0)))((s0, cs0) ' + pcsl0, pal0) ∨ ¬ nounsharedextR(aren0, aext0, ren0) ∨ ¬ nounsharedextR(cren0, cext0, ren0) ∨ ¬ Πok(ext0, aext0, ren0, aren0) ∨ ¬ Πok(ext0, cext0, ren0, cren0) ∨ ¬ ⌜cext0 !(πra(step0, cstep0, ren0, cren0, (s0, cs0) ' + pcsl0, pal0))⌝ ⊑ aext0 !(aα0) ⊦
Used simplifier rules: repla-rec-skip: ⊦ cstep(cs, ca, cs0) ∧ ¬ cod(ren)(cren(ca)) → repla (step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (s, cs0) ' + pcsl, cren(ca) ' + pal, ⌜as '⌝ + aσ, aα) = repla (step, cstep, cren, ren, aren, cext, aext, (s, cs0) ' + pcsl, pal, ⌜as '⌝ + aσ, aα); nounsharedextR-notcodren-project: ⊦ ¬ cod(ren)(cren(ca)) ∧ nounsharedextR(cren, cext, ren) ∧ Πok(ext, cext, ren, cren) → Π(ext, cext, ren, cren) !(cren(ca) ') = []; nounsharedextR-notcodren: ⊦ ¬ cod(ren)(cren(ca)) ∧ nounsharedextR(cren, cext, ren) → cext !(ca ') = []; a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ [] + x = x; (s) ⊦ ext !(al + al0) = ext !(al) + ext !(al0); (s) ⊦ a + x = a ' + x; (s) ⊦ # psl = # pal ∧ rstep(rs, ra, rs0) ∧ ¬ cod(lren)(rren(ra)) → πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psl, rren(ra) ' + pal) = ra + πra(lstep, rstep, lren, rren, (ls, rs0) + psl, pal); (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream
| # pcsl0 = # pal1, Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pal1), cstep(cs, ca, cs1), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ ⊑ aext !(aα), ¬ cod(ren)(cren(ca)), ∀ pal0, ext0, aext0, ren0, aren0, step0, cstep0, cren0, cext0, s0, cs0, as0, aσ0, aα0, astart0, astep0, start0, cstart0. Π(ext0, aext0, ren0, aren0) !(repla(step0, cstep0, cren0, ren0, aren0, cext0, aext0, (s0, cs0) ' + pcsl0, pal0, ⌜as0 '⌝ + aσ0, aα0)) = Π(ext0, cext0, ren0, cren0) !(pal0) ∨ ¬ frag(IOAut(astart0, astep0, aext0))(⌜as0 '⌝ + aσ0, aα0) ∨ ¬ frag*(IOAut(Π(start0, cstart0), Π(step0, cstep0, ren0, cren0, ext0, cext0), Π(ext0, cext0, ren0, cren0)))((s0, cs0) ' + pcsl0, pal0) ∨ ¬ nounsharedextR(aren0, aext0, ren0) ∨ ¬ nounsharedextR(cren0, cext0, ren0) ∨ ¬ Πok(ext0, aext0, ren0, aren0) ∨ ¬ Πok(ext0, cext0, ren0, cren0) ∨ ¬ ⌜cext0 !(πra(step0, cstep0, ren0, cren0, (s0, cs0) ' + pcsl0, pal0))⌝ ⊑ aext0 !(aα0) ⊦ |
Used terms: pal1, ext, aext, ren, aren, step, cstep, cren, cext, s1, cs1, as, aσ, aα, astart, astep, start, cstart
| # pcsl0 = # pal1, cren(ca0) = ren(a0), pa = cren(ca0), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (s1, cs1) ' + pcsl0, pa ' + pal1, ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(pa ') + Π(ext, cext, ren, cren) !(pal1), cext(ca0) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs1), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), step(s, a0, s1), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ⌜cext !(πra(step, cstep, ren, cren, (s, cs) ' + (s1, cs1) ' + pcsl0, pa ' + pal1))⌝ ⊑ aext !(aα), ∀ pal0, ext0, aext0, ren0, aren0, step0, cstep0, cren0, cext0, s0, cs0, as0, aσ0, aα0, astart0, astep0, start0, cstart0. Π(ext0, aext0, ren0, aren0) !(repla(step0, cstep0, cren0, ren0, aren0, cext0, aext0, (s0, cs0) ' + pcsl0, pal0, ⌜as0 '⌝ + aσ0, aα0)) = Π(ext0, cext0, ren0, cren0) !(pal0) ∨ ¬ frag(IOAut(astart0, astep0, aext0))(⌜as0 '⌝ + aσ0, aα0) ∨ ¬ frag*(IOAut(Π(start0, cstart0), Π(step0, cstep0, ren0, cren0, ext0, cext0), Π(ext0, cext0, ren0, cren0)))((s0, cs0) ' + pcsl0, pal0) ∨ ¬ nounsharedextR(aren0, aext0, ren0) ∨ ¬ nounsharedextR(cren0, cext0, ren0) ∨ ¬ Πok(ext0, aext0, ren0, aren0) ∨ ¬ Πok(ext0, cext0, ren0, cren0) ∨ ¬ ⌜cext0 !(πra(step0, cstep0, ren0, cren0, (s0, cs0) ' + pcsl0, pal0))⌝ ⊑ aext0 !(aα0) ⊦ |
# pcsl0 = # pal1, cren(ca0) = ren(a0), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (s1, cs1) ' + pcsl0, ren(a0) ' + pal1, ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(ren(a0) ') + Π(ext, cext, ren, cren) !(pal1), cext(ca0) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs1), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), step(s, a0, s1), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ⌜cext(ca0).get '⌝ + ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ ⊑ aext !(aα), ∀ pal0, ext0, aext0, ren0, aren0, step0, cstep0, cren0, cext0, s0, cs0, as0, aσ0, aα0, astart0, astep0, start0, cstart0. Π(ext0, aext0, ren0, aren0) !(repla(step0, cstep0, cren0, ren0, aren0, cext0, aext0, (s0, cs0) ' + pcsl0, pal0, ⌜as0 '⌝ + aσ0, aα0)) = Π(ext0, cext0, ren0, cren0) !(pal0) ∨ ¬ frag(IOAut(astart0, astep0, aext0))(⌜as0 '⌝ + aσ0, aα0) ∨ ¬ frag*(IOAut(Π(start0, cstart0), Π(step0, cstep0, ren0, cren0, ext0, cext0), Π(ext0, cext0, ren0, cren0)))((s0, cs0) ' + pcsl0, pal0) ∨ ¬ nounsharedextR(aren0, aext0, ren0) ∨ ¬ nounsharedextR(cren0, cext0, ren0) ∨ ¬ Πok(ext0, aext0, ren0, aren0) ∨ ¬ Πok(ext0, cext0, ren0, cren0) ∨ ¬ ⌜cext0 !(πra(step0, cstep0, ren0, cren0, (s0, cs0) ' + pcsl0, pal0))⌝ ⊑ aext0 !(aα0) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ⌜x + y⌝ = ⌜x⌝ + ⌜y⌝ ; (s) ⊦ ext(a) ≠ None → ext !(a ' + al) = ext(a).get ' + ext !(al); (s) ⊦ a + x = a ' + x; (s) pa = lren(la) ⊦ # psl = # pal ∧ rstep(rs, ra, rs0) ∧ rren(ra) = lren(la) ∧ lstep(ls, la, ls0) → πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal) = ra + πra(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal); (s)
| # pcsl0 = # pal1, cren(ca0) = ren(a0), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (s1, cs1) ' + pcsl0, ren(a0) ' + pal1, ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(ren(a0) ') + Π(ext, cext, ren, cren) !(pal1), cext(ca0) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs1), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), step(s, a0, s1), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ⌜cext(ca0).get '⌝ + ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ ⊑ aext !(aα), ∀ pal0, ext0, aext0, ren0, aren0, step0, cstep0, cren0, cext0, s0, cs0, as0, aσ0, aα0, astart0, astep0, start0, cstart0. Π(ext0, aext0, ren0, aren0) !(repla(step0, cstep0, cren0, ren0, aren0, cext0, aext0, (s0, cs0) ' + pcsl0, pal0, ⌜as0 '⌝ + aσ0, aα0)) = Π(ext0, cext0, ren0, cren0) !(pal0) ∨ ¬ frag(IOAut(astart0, astep0, aext0))(⌜as0 '⌝ + aσ0, aα0) ∨ ¬ frag*(IOAut(Π(start0, cstart0), Π(step0, cstep0, ren0, cren0, ext0, cext0), Π(ext0, cext0, ren0, cren0)))((s0, cs0) ' + pcsl0, pal0) ∨ ¬ nounsharedextR(aren0, aext0, ren0) ∨ ¬ nounsharedextR(cren0, cext0, ren0) ∨ ¬ Πok(ext0, aext0, ren0, aren0) ∨ ¬ Πok(ext0, cext0, ren0, cren0) ∨ ¬ ⌜cext0 !(πra(step0, cstep0, ren0, cren0, (s0, cs0) ' + pcsl0, pal0))⌝ ⊑ aext0 !(aα0) ⊦ |
# pcsl0 = # pal1, cext(ca0) = Some(e), cren(ca0) = ren(a0), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (s1, cs1) ' + pcsl0, ren(a0) ' + pal1, ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(ren(a0) ') + Π(ext, cext, ren, cren) !(pal1), cext(ca0) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs1), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), step(s, a0, s1), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ⌜e '⌝ + ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ ⊑ aext !(aα), ∀ pal0, ext0, aext0, ren0, aren0, step0, cstep0, cren0, cext0, s0, cs0, as0, aσ0, aα0, astart0, astep0, start0, cstart0. Π(ext0, aext0, ren0, aren0) !(repla(step0, cstep0, cren0, ren0, aren0, cext0, aext0, (s0, cs0) ' + pcsl0, pal0, ⌜as0 '⌝ + aσ0, aα0)) = Π(ext0, cext0, ren0, cren0) !(pal0) ∨ ¬ frag(IOAut(astart0, astep0, aext0))(⌜as0 '⌝ + aσ0, aα0) ∨ ¬ frag*(IOAut(Π(start0, cstart0), Π(step0, cstep0, ren0, cren0, ext0, cext0), Π(ext0, cext0, ren0, cren0)))((s0, cs0) ' + pcsl0, pal0) ∨ ¬ nounsharedextR(aren0, aext0, ren0) ∨ ¬ nounsharedextR(cren0, cext0, ren0) ∨ ¬ Πok(ext0, aext0, ren0, aren0) ∨ ¬ Πok(ext0, cext0, ren0, cren0) ∨ ¬ ⌜cext0 !(πra(step0, cstep0, ren0, cren0, (s0, cs0) ' + pcsl0, pal0))⌝ ⊑ aext0 !(aα0) ⊦
Used simplifier rules: ⊦ opt ≠ None → (get = opt.get ↔ opt = Some(get)); (elim) Used terms: cext(ca0), e
| # pcsl0 = # pal1, cext(ca0) = Some(e), cren(ca0) = ren(a0), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (s1, cs1) ' + pcsl0, ren(a0) ' + pal1, ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(ren(a0) ') + Π(ext, cext, ren, cren) !(pal1), cext(ca0) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs1), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), step(s, a0, s1), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ⌜e '⌝ + ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ ⊑ aext !(aα), ∀ pal0, ext0, aext0, ren0, aren0, step0, cstep0, cren0, cext0, s0, cs0, as0, aσ0, aα0, astart0, astep0, start0, cstart0. Π(ext0, aext0, ren0, aren0) !(repla(step0, cstep0, cren0, ren0, aren0, cext0, aext0, (s0, cs0) ' + pcsl0, pal0, ⌜as0 '⌝ + aσ0, aα0)) = Π(ext0, cext0, ren0, cren0) !(pal0) ∨ ¬ frag(IOAut(astart0, astep0, aext0))(⌜as0 '⌝ + aσ0, aα0) ∨ ¬ frag*(IOAut(Π(start0, cstart0), Π(step0, cstep0, ren0, cren0, ext0, cext0), Π(ext0, cext0, ren0, cren0)))((s0, cs0) ' + pcsl0, pal0) ∨ ¬ nounsharedextR(aren0, aext0, ren0) ∨ ¬ nounsharedextR(cren0, cext0, ren0) ∨ ¬ Πok(ext0, aext0, ren0, aren0) ∨ ¬ Πok(ext0, cext0, ren0, cren0) ∨ ¬ ⌜cext0 !(πra(step0, cstep0, ren0, cren0, (s0, cs0) ' + pcsl0, pal0))⌝ ⊑ aext0 !(aα0) ⊦ |
# pcsl0 = # pal1, cext(ca0) = Some(e), cren(ca0) = ren(a0), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (s1, cs1) ' + pcsl0, ren(a0) ' + pal1, ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(ren(a0) ') + Π(ext, cext, ren, cren) !(pal1), Some(e) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs1), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), step(s, a0, s1), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ⌜e '⌝ + ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ ⊑ aext !(aα), ∀ pal0, ext0, aext0, ren0, aren0, step0, cstep0, cren0, cext0, s0, cs0, as0, aσ0, aα0, astart0, astep0, start0, cstart0. Π(ext0, aext0, ren0, aren0) !(repla(step0, cstep0, cren0, ren0, aren0, cext0, aext0, (s0, cs0) ' + pcsl0, pal0, ⌜as0 '⌝ + aσ0, aα0)) = Π(ext0, cext0, ren0, cren0) !(pal0) ∨ ¬ frag(IOAut(astart0, astep0, aext0))(⌜as0 '⌝ + aσ0, aα0) ∨ ¬ frag*(IOAut(Π(start0, cstart0), Π(step0, cstep0, ren0, cren0, ext0, cext0), Π(ext0, cext0, ren0, cren0)))((s0, cs0) ' + pcsl0, pal0) ∨ ¬ nounsharedextR(aren0, aext0, ren0) ∨ ¬ nounsharedextR(cren0, cext0, ren0) ∨ ¬ Πok(ext0, aext0, ren0, aren0) ∨ ¬ Πok(ext0, cext0, ren0, cren0) ∨ ¬ ⌜cext0 !(πra(step0, cstep0, ren0, cren0, (s0, cs0) ' + pcsl0, pal0))⌝ ⊑ aext0 !(aα0) ⊦
| # pcsl0 = # pal1, cext(ca0) = Some(e), cren(ca0) = ren(a0), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (s1, cs1) ' + pcsl0, ren(a0) ' + pal1, ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(ren(a0) ') + Π(ext, cext, ren, cren) !(pal1), Some(e) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs1), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), step(s, a0, s1), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ⌜e '⌝ + ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ ⊑ aext !(aα), ∀ pal0, ext0, aext0, ren0, aren0, step0, cstep0, cren0, cext0, s0, cs0, as0, aσ0, aα0, astart0, astep0, start0, cstart0. Π(ext0, aext0, ren0, aren0) !(repla(step0, cstep0, cren0, ren0, aren0, cext0, aext0, (s0, cs0) ' + pcsl0, pal0, ⌜as0 '⌝ + aσ0, aα0)) = Π(ext0, cext0, ren0, cren0) !(pal0) ∨ ¬ frag(IOAut(astart0, astep0, aext0))(⌜as0 '⌝ + aσ0, aα0) ∨ ¬ frag*(IOAut(Π(start0, cstart0), Π(step0, cstep0, ren0, cren0, ext0, cext0), Π(ext0, cext0, ren0, cren0)))((s0, cs0) ' + pcsl0, pal0) ∨ ¬ nounsharedextR(aren0, aext0, ren0) ∨ ¬ nounsharedextR(cren0, cext0, ren0) ∨ ¬ Πok(ext0, aext0, ren0, aren0) ∨ ¬ Πok(ext0, cext0, ren0, cren0) ∨ ¬ ⌜cext0 !(πra(step0, cstep0, ren0, cren0, (s0, cs0) ' + pcsl0, pal0))⌝ ⊑ aext0 !(aα0) ⊦ |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
# pcsl0 = # pal1, cext(ca0) = Some(e), cren(ca0) = ren(a0), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (s1, cs1) ' + pcsl0, ren(a0) ' + pal1, ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(ren(a0) ') + Π(ext, cext, ren, cren) !(pal1), Some(e) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs1), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), step(s, a0, s1), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ∀ pal0, ext0, aext0, ren0, aren0, step0, cstep0, cren0, cext0, s0, cs0, as0, aσ0, aα0, astart0, astep0, start0, cstart0. Π(ext0, aext0, ren0, aren0) !(repla(step0, cstep0, cren0, ren0, aren0, cext0, aext0, (s0, cs0) ' + pcsl0, pal0, ⌜as0 '⌝ + aσ0, aα0)) = Π(ext0, cext0, ren0, cren0) !(pal0) ∨ ¬ frag(IOAut(astart0, astep0, aext0))(⌜as0 '⌝ + aσ0, aα0) ∨ ¬ frag*(IOAut(Π(start0, cstart0), Π(step0, cstep0, ren0, cren0, ext0, cext0), Π(ext0, cext0, ren0, cren0)))((s0, cs0) ' + pcsl0, pal0) ∨ ¬ nounsharedextR(aren0, aext0, ren0) ∨ ¬ nounsharedextR(cren0, cext0, ren0) ∨ ¬ Πok(ext0, aext0, ren0, aren0) ∨ ¬ Πok(ext0, cext0, ren0, cren0) ∨ ¬ ⌜cext0 !(πra(step0, cstep0, ren0, cren0, (s0, cs0) ' + pcsl0, pal0))⌝ ⊑ aext0 !(aα0), ∃ σ1. (⌜e '⌝ + ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ ) + σ1 = aext !(aα) ⊦
Used terms: ⌜e '⌝ + ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ , aext !(aα)
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| # pcsl0 = # pal1, cext(ca0) = Some(e), cren(ca0) = ren(a0), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (s1, cs1) ' + pcsl0, ren(a0) ' + pal1, ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(ren(a0) ') + Π(ext, cext, ren, cren) !(pal1), Some(e) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs1), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), step(s, a0, s1), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ∀ pal0, ext0, aext0, ren0, aren0, step0, cstep0, cren0, cext0, s0, cs0, as0, aσ0, aα0, astart0, astep0, start0, cstart0. Π(ext0, aext0, ren0, aren0) !(repla(step0, cstep0, cren0, ren0, aren0, cext0, aext0, (s0, cs0) ' + pcsl0, pal0, ⌜as0 '⌝ + aσ0, aα0)) = Π(ext0, cext0, ren0, cren0) !(pal0) ∨ ¬ frag(IOAut(astart0, astep0, aext0))(⌜as0 '⌝ + aσ0, aα0) ∨ ¬ frag*(IOAut(Π(start0, cstart0), Π(step0, cstep0, ren0, cren0, ext0, cext0), Π(ext0, cext0, ren0, cren0)))((s0, cs0) ' + pcsl0, pal0) ∨ ¬ nounsharedextR(aren0, aext0, ren0) ∨ ¬ nounsharedextR(cren0, cext0, ren0) ∨ ¬ Πok(ext0, aext0, ren0, aren0) ∨ ¬ Πok(ext0, cext0, ren0, cren0) ∨ ¬ ⌜cext0 !(πra(step0, cstep0, ren0, cren0, (s0, cs0) ' + pcsl0, pal0))⌝ ⊑ aext0 !(aα0), ∃ σ1. (⌜e '⌝ + ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ ) + σ1 = aext !(aα) ⊦ |
# pcsl0 = # pal1, (⌜e '⌝ + ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ ) + β = aext !(aα), cext(ca0) = Some(e), cren(ca0) = ren(a0), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (s1, cs1) ' + pcsl0, ren(a0) ' + pal1, ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(ren(a0) ') + Π(ext, cext, ren, cren) !(pal1), Some(e) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs1), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), step(s, a0, s1), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ∀ pal0, ext0, aext0, ren0, aren0, step0, cstep0, cren0, cext0, s0, cs0, as0, aσ0, aα0, astart0, astep0, start0, cstart0. Π(ext0, aext0, ren0, aren0) !(repla(step0, cstep0, cren0, ren0, aren0, cext0, aext0, (s0, cs0) ' + pcsl0, pal0, ⌜as0 '⌝ + aσ0, aα0)) = Π(ext0, cext0, ren0, cren0) !(pal0) ∨ ¬ frag(IOAut(astart0, astep0, aext0))(⌜as0 '⌝ + aσ0, aα0) ∨ ¬ frag*(IOAut(Π(start0, cstart0), Π(step0, cstep0, ren0, cren0, ext0, cext0), Π(ext0, cext0, ren0, cren0)))((s0, cs0) ' + pcsl0, pal0) ∨ ¬ nounsharedextR(aren0, aext0, ren0) ∨ ¬ nounsharedextR(cren0, cext0, ren0) ∨ ¬ Πok(ext0, aext0, ren0, aren0) ∨ ¬ Πok(ext0, cext0, ren0, cren0) ∨ ¬ ⌜cext0 !(πra(step0, cstep0, ren0, cren0, (s0, cs0) ' + pcsl0, pal0))⌝ ⊑ aext0 !(aα0) ⊦
| # pcsl0 = # pal1, (⌜e '⌝ + ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ ) + β = aext !(aα), cext(ca0) = Some(e), cren(ca0) = ren(a0), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (s1, cs1) ' + pcsl0, ren(a0) ' + pal1, ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(ren(a0) ') + Π(ext, cext, ren, cren) !(pal1), Some(e) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs1), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), step(s, a0, s1), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ∀ pal0, ext0, aext0, ren0, aren0, step0, cstep0, cren0, cext0, s0, cs0, as0, aσ0, aα0, astart0, astep0, start0, cstart0. Π(ext0, aext0, ren0, aren0) !(repla(step0, cstep0, cren0, ren0, aren0, cext0, aext0, (s0, cs0) ' + pcsl0, pal0, ⌜as0 '⌝ + aσ0, aα0)) = Π(ext0, cext0, ren0, cren0) !(pal0) ∨ ¬ frag(IOAut(astart0, astep0, aext0))(⌜as0 '⌝ + aσ0, aα0) ∨ ¬ frag*(IOAut(Π(start0, cstart0), Π(step0, cstep0, ren0, cren0, ext0, cext0), Π(ext0, cext0, ren0, cren0)))((s0, cs0) ' + pcsl0, pal0) ∨ ¬ nounsharedextR(aren0, aext0, ren0) ∨ ¬ nounsharedextR(cren0, cext0, ren0) ∨ ¬ Πok(ext0, aext0, ren0, aren0) ∨ ¬ Πok(ext0, cext0, ren0, cren0) ∨ ¬ ⌜cext0 !(πra(step0, cstep0, ren0, cren0, (s0, cs0) ' + pcsl0, pal0))⌝ ⊑ aext0 !(aα0) ⊦ |
⊦ ext !(α) = ⌜e '⌝ + β ↔ (∃ al, a, α0. α = ⌜al⌝ + ⌜a '⌝ + α0 ∧ ext(a) = Some(e) ∧ ext !(⌜al⌝ ) = [] ∧ ext !(α0) = β)
# pcsl0 = # pal1, cext(ca0) = Some(e), cren(ca0) = ren(a0), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (s1, cs1) ' + pcsl0, ren(a0) ' + pal1, ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(ren(a0) ') + Π(ext, cext, ren, cren) !(pal1), Some(e) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs1), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), step(s, a0, s1), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ∀ pal0, ext0, aext0, ren0, aren0, step0, cstep0, cren0, cext0, s0, cs0, as0, aσ0, aα0, astart0, astep0, start0, cstart0. Π(ext0, aext0, ren0, aren0) !(repla(step0, cstep0, cren0, ren0, aren0, cext0, aext0, (s0, cs0) ' + pcsl0, pal0, ⌜as0 '⌝ + aσ0, aα0)) = Π(ext0, cext0, ren0, cren0) !(pal0) ∨ ¬ frag(IOAut(astart0, astep0, aext0))(⌜as0 '⌝ + aσ0, aα0) ∨ ¬ frag*(IOAut(Π(start0, cstart0), Π(step0, cstep0, ren0, cren0, ext0, cext0), Π(ext0, cext0, ren0, cren0)))((s0, cs0) ' + pcsl0, pal0) ∨ ¬ nounsharedextR(aren0, aext0, ren0) ∨ ¬ nounsharedextR(cren0, cext0, ren0) ∨ ¬ Πok(ext0, aext0, ren0, aren0) ∨ ¬ Πok(ext0, cext0, ren0, cren0) ∨ ¬ ⌜cext0 !(πra(step0, cstep0, ren0, cren0, (s0, cs0) ' + pcsl0, pal0))⌝ ⊑ aext0 !(aα0), ∃ al, aa, α0. aα = ⌜al⌝ + ⌜aa '⌝ + α0 ∧ aext(aa) = Some(e) ∧ aext !(⌜al⌝ ) = [] ∧ aext !(α0) = ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ + β ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream Used terms: aext, aα, e, ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ + β
| ⊦ ext !(α) = ⌜e '⌝ + β ↔ (∃ al, a, α0. α = ⌜al⌝ + ⌜a '⌝ + α0 ∧ ext(a) = Some(e) ∧ ext !(⌜al⌝ ) = [] ∧ ext !(α0) = β) |
| # pcsl0 = # pal1, cext(ca0) = Some(e), cren(ca0) = ren(a0), Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (s1, cs1) ' + pcsl0, ren(a0) ' + pal1, ⌜as '⌝ + aσ, aα)) ≠ Π(ext, cext, ren, cren) !(ren(a0) ') + Π(ext, cext, ren, cren) !(pal1), Some(e) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs1), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, aα), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), step(s, a0, s1), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ∀ pal0, ext0, aext0, ren0, aren0, step0, cstep0, cren0, cext0, s0, cs0, as0, aσ0, aα0, astart0, astep0, start0, cstart0. Π(ext0, aext0, ren0, aren0) !(repla(step0, cstep0, cren0, ren0, aren0, cext0, aext0, (s0, cs0) ' + pcsl0, pal0, ⌜as0 '⌝ + aσ0, aα0)) = Π(ext0, cext0, ren0, cren0) !(pal0) ∨ ¬ frag(IOAut(astart0, astep0, aext0))(⌜as0 '⌝ + aσ0, aα0) ∨ ¬ frag*(IOAut(Π(start0, cstart0), Π(step0, cstep0, ren0, cren0, ext0, cext0), Π(ext0, cext0, ren0, cren0)))((s0, cs0) ' + pcsl0, pal0) ∨ ¬ nounsharedextR(aren0, aext0, ren0) ∨ ¬ nounsharedextR(cren0, cext0, ren0) ∨ ¬ Πok(ext0, aext0, ren0, aren0) ∨ ¬ Πok(ext0, cext0, ren0, cren0) ∨ ¬ ⌜cext0 !(πra(step0, cstep0, ren0, cren0, (s0, cs0) ' + pcsl0, pal0))⌝ ⊑ aext0 !(aα0), ∃ al, aa, α0. aα = ⌜al⌝ + ⌜aa '⌝ + α0 ∧ aext(aa) = Some(e) ∧ aext !(⌜al⌝ ) = [] ∧ aext !(α0) = ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ + β ⊦ |
aext !(aα0) = ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ + β, aext !(aal) = [], # pcsl0 = # pal1, aext(aa) = Some(e), cext(ca0) = Some(e), cren(ca0) = ren(a0), Π(ext, aext, ren, aren) ! (repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (s1, cs1) ' + pcsl0, ren(a0) ' + pal1, ⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0)) ≠ Π(ext, cext, ren, cren) !(ren(a0) ') + Π(ext, cext, ren, cren) !(pal1), Some(e) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs1), 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)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), step(s, a0, s1), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ∀ pal0, ext0, aext0, ren0, aren0, step0, cstep0, cren0, cext0, s0, cs0, as0, aσ0, aα0, astart0, astep0, start0, cstart0. Π(ext0, aext0, ren0, aren0) !(repla(step0, cstep0, cren0, ren0, aren0, cext0, aext0, (s0, cs0) ' + pcsl0, pal0, ⌜as0 '⌝ + aσ0, aα0)) = Π(ext0, cext0, ren0, cren0) !(pal0) ∨ ¬ frag(IOAut(astart0, astep0, aext0))(⌜as0 '⌝ + aσ0, aα0) ∨ ¬ frag*(IOAut(Π(start0, cstart0), Π(step0, cstep0, ren0, cren0, ext0, cext0), Π(ext0, cext0, ren0, cren0)))((s0, cs0) ' + pcsl0, pal0) ∨ ¬ nounsharedextR(aren0, aext0, ren0) ∨ ¬ nounsharedextR(cren0, cext0, ren0) ∨ ¬ Πok(ext0, aext0, ren0, aren0) ∨ ¬ Πok(ext0, cext0, ren0, cren0) ∨ ¬ ⌜cext0 !(πra(step0, cstep0, ren0, cren0, (s0, cs0) ' + pcsl0, pal0))⌝ ⊑ aext0 !(aα0) ⊦
Used simplifier rules: ⊦ ⌜x⌝ = [] ↔ x = []; (s) ⊦ ext !(⌜al⌝ ) = ⌜ext !(al)⌝ ; (s)
| aext !(aα0) = ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ + β, aext !(aal) = [], # pcsl0 = # pal1, aext(aa) = Some(e), cext(ca0) = Some(e), cren(ca0) = ren(a0), Π(ext, aext, ren, aren) ! (repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (s1, cs1) ' + pcsl0, ren(a0) ' + pal1, ⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0)) ≠ Π(ext, cext, ren, cren) !(ren(a0) ') + Π(ext, cext, ren, cren) !(pal1), Some(e) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs1), 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)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), step(s, a0, s1), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ∀ pal0, ext0, aext0, ren0, aren0, step0, cstep0, cren0, cext0, s0, cs0, as0, aσ0, aα0, astart0, astep0, start0, cstart0. Π(ext0, aext0, ren0, aren0) !(repla(step0, cstep0, cren0, ren0, aren0, cext0, aext0, (s0, cs0) ' + pcsl0, pal0, ⌜as0 '⌝ + aσ0, aα0)) = Π(ext0, cext0, ren0, cren0) !(pal0) ∨ ¬ frag(IOAut(astart0, astep0, aext0))(⌜as0 '⌝ + aσ0, aα0) ∨ ¬ frag*(IOAut(Π(start0, cstart0), Π(step0, cstep0, ren0, cren0, ext0, cext0), Π(ext0, cext0, ren0, cren0)))((s0, cs0) ' + pcsl0, pal0) ∨ ¬ nounsharedextR(aren0, aext0, ren0) ∨ ¬ nounsharedextR(cren0, cext0, ren0) ∨ ¬ Πok(ext0, aext0, ren0, aren0) ∨ ¬ Πok(ext0, cext0, ren0, cren0) ∨ ¬ ⌜cext0 !(πra(step0, cstep0, ren0, cren0, (s0, cs0) ' + pcsl0, pal0))⌝ ⊑ aext0 !(aα0) ⊦ |
⊦ step(s, a, s0) ∧ cstep(cs, ca, cs0) ∧ cren(ca) = ren(a) ∧ aext !(⌜aal⌝ ) = [] ∧ cext(ca) = aext(aa) ∧ n = # aal → repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (s0, cs0) ' + pcsl, ren(a) ' + pal, aσ, ⌜aal⌝ + ⌜aa '⌝ + aα) = aal.map(aren) + aren(aa) ' + repla(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + pcsl, pal, aσ.drop(n + 1), aα)
aext !(aal) = [], aext !(aα0) = ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ + β, aext !(⌜aal⌝ ) = [], # pcsl0 = # pal1, # aal = # aal, aext(aa) = Some(e), cext(ca0) = Some(e), cext(ca0) = aext(aa), cren(ca0) = ren(a0), Π(ext, aext, ren, aren) ! (aal.map(aren) + aren(aa) ' + repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, (⌜as '⌝ + aσ).drop(# aal + 1), aα0)) ≠ Π(ext, cext, ren, cren) !(ren(a0) ') + Π(ext, cext, ren, cren) !(pal1), Some(e) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs1), 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)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), step(s, a0, s1), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ∀ pal0, ext0, aext0, ren0, aren0, step0, cstep0, cren0, cext0, s0, cs0, as0, aσ0, aα0, astart0, astep0, start0, cstart0. Π(ext0, aext0, ren0, aren0) !(repla(step0, cstep0, cren0, ren0, aren0, cext0, aext0, (s0, cs0) ' + pcsl0, pal0, ⌜as0 '⌝ + aσ0, aα0)) = Π(ext0, cext0, ren0, cren0) !(pal0) ∨ ¬ frag(IOAut(astart0, astep0, aext0))(⌜as0 '⌝ + aσ0, aα0) ∨ ¬ frag*(IOAut(Π(start0, cstart0), Π(step0, cstep0, ren0, cren0, ext0, cext0), Π(ext0, cext0, ren0, cren0)))((s0, cs0) ' + pcsl0, pal0) ∨ ¬ nounsharedextR(aren0, aext0, ren0) ∨ ¬ nounsharedextR(cren0, cext0, ren0) ∨ ¬ Πok(ext0, aext0, ren0, aren0) ∨ ¬ Πok(ext0, cext0, ren0, cren0) ∨ ¬ ⌜cext0 !(πra(step0, cstep0, ren0, cren0, (s0, cs0) ' + pcsl0, pal0))⌝ ⊑ aext0 !(aα0) ⊦
Used simplifier rules: ⊦ ext !(⌜al⌝ ) = ⌜ext !(al)⌝ ; (s) ⊦ ⌜x⌝ = [] ↔ x = []; (s) Used terms: aren, ren, cstep, cext, aa, s, aext, aα0, ca0, a0, pal1, cren, aal, pcsl0, cs1, s1, cs, # aal, ⌜as '⌝ + aσ, step
| ⊦ step(s, a, s0) ∧ cstep(cs, ca, cs0) ∧ cren(ca) = ren(a) ∧ aext !(⌜aal⌝ ) = [] ∧ cext(ca) = aext(aa) ∧ n = # aal → repla(step, cstep, cren, ren, aren, cext, aext, (s, cs) ' + (s0, cs0) ' + pcsl, ren(a) ' + pal, aσ, ⌜aal⌝ + ⌜aa '⌝ + aα) = aal.map(aren) + aren(aa) ' + repla(step, cstep, cren, ren, aren, cext, aext, (s0, cs0) ' + pcsl, pal, aσ.drop(n + 1), aα) |
| aext !(aal) = [], aext !(aα0) = ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ + β, aext !(⌜aal⌝ ) = [], # pcsl0 = # pal1, # aal = # aal, aext(aa) = Some(e), cext(ca0) = Some(e), cext(ca0) = aext(aa), cren(ca0) = ren(a0), Π(ext, aext, ren, aren) ! (aal.map(aren) + aren(aa) ' + repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, (⌜as '⌝ + aσ).drop(# aal + 1), aα0)) ≠ Π(ext, cext, ren, cren) !(ren(a0) ') + Π(ext, cext, ren, cren) !(pal1), Some(e) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs1), 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)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), step(s, a0, s1), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ∀ pal0, ext0, aext0, ren0, aren0, step0, cstep0, cren0, cext0, s0, cs0, as0, aσ0, aα0, astart0, astep0, start0, cstart0. Π(ext0, aext0, ren0, aren0) !(repla(step0, cstep0, cren0, ren0, aren0, cext0, aext0, (s0, cs0) ' + pcsl0, pal0, ⌜as0 '⌝ + aσ0, aα0)) = Π(ext0, cext0, ren0, cren0) !(pal0) ∨ ¬ frag(IOAut(astart0, astep0, aext0))(⌜as0 '⌝ + aσ0, aα0) ∨ ¬ frag*(IOAut(Π(start0, cstart0), Π(step0, cstep0, ren0, cren0, ext0, cext0), Π(ext0, cext0, ren0, cren0)))((s0, cs0) ' + pcsl0, pal0) ∨ ¬ nounsharedextR(aren0, aext0, ren0) ∨ ¬ nounsharedextR(cren0, cext0, ren0) ∨ ¬ Πok(ext0, aext0, ren0, aren0) ∨ ¬ Πok(ext0, cext0, ren0, cren0) ∨ ¬ ⌜cext0 !(πra(step0, cstep0, ren0, cren0, (s0, cs0) ' + pcsl0, pal0))⌝ ⊑ aext0 !(aα0) ⊦ |
aext !(aal) = [], aext !(aα0) = ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ + β, # pcsl0 = # pal1, aext(aa) = Some(e), cext(ca0) = Some(e), cren(ca0) = ren(a0), Π(ext, aext, ren, aren) !(aal.map(aren)) + Π(ext, aext, ren, aren) !(aren(aa) ') + Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, aσ.drop(# aal), aα0)) ≠ Π(ext, cext, ren, cren) !(ren(a0) ') + Π(ext, cext, ren, cren) !(pal1), Some(e) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs1), 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)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), step(s, a0, s1), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ∀ pal0, ext0, aext0, ren0, aren0, step0, cstep0, cren0, cext0, s0, cs0, as0, aσ0, aα0, astart0, astep0, start0, cstart0. Π(ext0, aext0, ren0, aren0) !(repla(step0, cstep0, cren0, ren0, aren0, cext0, aext0, (s0, cs0) ' + pcsl0, pal0, ⌜as0 '⌝ + aσ0, aα0)) = Π(ext0, cext0, ren0, cren0) !(pal0) ∨ ¬ frag(IOAut(astart0, astep0, aext0))(⌜as0 '⌝ + aσ0, aα0) ∨ ¬ frag*(IOAut(Π(start0, cstart0), Π(step0, cstep0, ren0, cren0, ext0, cext0), Π(ext0, cext0, ren0, cren0)))((s0, cs0) ' + pcsl0, pal0) ∨ ¬ nounsharedextR(aren0, aext0, ren0) ∨ ¬ nounsharedextR(cren0, cext0, ren0) ∨ ¬ Πok(ext0, aext0, ren0, aren0) ∨ ¬ Πok(ext0, cext0, ren0, cren0) ∨ ¬ ⌜cext0 !(πra(step0, cstep0, ren0, cren0, (s0, cs0) ' + pcsl0, pal0))⌝ ⊑ aext0 !(aα0) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ext !(al + al0) = ext !(al) + ext !(al0); (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ n + 0 = n; (s) ⊦ n ≠ 0 → (⌜a '⌝ + σ).drop((* n) + m) = σ.drop((n - 1) + m); (s) ⊦ ⌜x⌝ = [] ↔ x = []; (s) ⊦ ext !(⌜al⌝ ) = ⌜ext !(al)⌝ ; (s)
| aext !(aal) = [], aext !(aα0) = ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ + β, # pcsl0 = # pal1, aext(aa) = Some(e), cext(ca0) = Some(e), cren(ca0) = ren(a0), Π(ext, aext, ren, aren) !(aal.map(aren)) + Π(ext, aext, ren, aren) !(aren(aa) ') + Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, aσ.drop(# aal), aα0)) ≠ Π(ext, cext, ren, cren) !(ren(a0) ') + Π(ext, cext, ren, cren) !(pal1), Some(e) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs1), 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)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), step(s, a0, s1), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ∀ pal0, ext0, aext0, ren0, aren0, step0, cstep0, cren0, cext0, s0, cs0, as0, aσ0, aα0, astart0, astep0, start0, cstart0. Π(ext0, aext0, ren0, aren0) !(repla(step0, cstep0, cren0, ren0, aren0, cext0, aext0, (s0, cs0) ' + pcsl0, pal0, ⌜as0 '⌝ + aσ0, aα0)) = Π(ext0, cext0, ren0, cren0) !(pal0) ∨ ¬ frag(IOAut(astart0, astep0, aext0))(⌜as0 '⌝ + aσ0, aα0) ∨ ¬ frag*(IOAut(Π(start0, cstart0), Π(step0, cstep0, ren0, cren0, ext0, cext0), Π(ext0, cext0, ren0, cren0)))((s0, cs0) ' + pcsl0, pal0) ∨ ¬ nounsharedextR(aren0, aext0, ren0) ∨ ¬ nounsharedextR(cren0, cext0, ren0) ∨ ¬ Πok(ext0, aext0, ren0, aren0) ∨ ¬ Πok(ext0, cext0, ren0, cren0) ∨ ¬ ⌜cext0 !(πra(step0, cstep0, ren0, cren0, (s0, cs0) ' + pcsl0, pal0))⌝ ⊑ aext0 !(aα0) ⊦ |
aext !(aα0) = ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ + β, aext !(aal) = [], # pcsl0 = # pal1, aext(aa) = Some(e), cext(ca0) = Some(e), cren(ca0) = ren(a0), Π(ext, aext, ren, aren) !(aal.map(aren)) + Π(ext, aext, ren, aren) !(aren(aa) ') + Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, aσ.drop(# aal), aα0)) ≠ Π(ext, cext, ren, cren) !(ren(a0) ') + Π(ext, cext, ren, cren) !(pal1), Some(e) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs1), 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)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), step(s, a0, s1), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), Π(ext, aext, ren, aren) ! (repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, ⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0)) = Π(ext, cext, ren, cren) !(pal1) ∨ ¬ frag(IOAut(astart, astep, aext))(⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0) ∨ ¬ frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s1, cs1) ' + pcsl0, pal1) ∨ ¬ nounsharedextR(aren, aext, ren) ∨ ¬ nounsharedextR(cren, cext, ren) ∨ ¬ Πok(ext, aext, ren, aren) ∨ ¬ Πok(ext, cext, ren, cren) ∨ ¬ ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ ⊑ aext !(aα0) ⊦
Used terms: pal1, ext, aext, ren, aren, step, cstep, cren, cext, s1, cs1, aσ[# aal], aσ.drop(# aal + 1), aα0, astart, astep, start, cstart
| aext !(aα0) = ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ + β, aext !(aal) = [], # pcsl0 = # pal1, aext(aa) = Some(e), cext(ca0) = Some(e), cren(ca0) = ren(a0), Π(ext, aext, ren, aren) !(aal.map(aren)) + Π(ext, aext, ren, aren) !(aren(aa) ') + Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, aσ.drop(# aal), aα0)) ≠ Π(ext, cext, ren, cren) !(ren(a0) ') + Π(ext, cext, ren, cren) !(pal1), Some(e) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs1), 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)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), step(s, a0, s1), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), Π(ext, aext, ren, aren) ! (repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, ⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0)) = Π(ext, cext, ren, cren) !(pal1) ∨ ¬ frag(IOAut(astart, astep, aext))(⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0) ∨ ¬ frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s1, cs1) ' + pcsl0, pal1) ∨ ¬ nounsharedextR(aren, aext, ren) ∨ ¬ nounsharedextR(cren, cext, ren) ∨ ¬ Πok(ext, aext, ren, aren) ∨ ¬ Πok(ext, cext, ren, cren) ∨ ¬ ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ ⊑ aext !(aα0) ⊦ |
aext !(aal) = [], aext !(aα0) = ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ + β, # pcsl0 = # pal1, aext(aa) = Some(e), cext(ca0) = Some(e), cren(ca0) = ren(a0), Π(ext, aext, ren, aren) !(aal.map(aren)) + Π(ext, aext, ren, aren) !(aren(aa) ') + Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, aσ.drop(# aal), aα0)) ≠ Π(ext, cext, ren, cren) !(ren(a0) ') + Π(ext, cext, ren, cren) !(pal1), Some(e) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs1), 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)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), step(s, a0, s1), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), Π(ext, aext, ren, aren) ! (repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, ⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0)) = Π(ext, cext, ren, cren) !(pal1) ∨ ¬ frag(IOAut(astart, astep, aext))(⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0) ∨ ¬ ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ ⊑ aext !(aα0) ⊦
| aext !(aal) = [], aext !(aα0) = ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ + β, # pcsl0 = # pal1, aext(aa) = Some(e), cext(ca0) = Some(e), cren(ca0) = ren(a0), Π(ext, aext, ren, aren) !(aal.map(aren)) + Π(ext, aext, ren, aren) !(aren(aa) ') + Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, aσ.drop(# aal), aα0)) ≠ Π(ext, cext, ren, cren) !(ren(a0) ') + Π(ext, cext, ren, cren) !(pal1), Some(e) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs1), 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)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), step(s, a0, s1), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), Π(ext, aext, ren, aren) ! (repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, ⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0)) = Π(ext, cext, ren, cren) !(pal1) ∨ ¬ frag(IOAut(astart, astep, aext))(⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0) ∨ ¬ ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ ⊑ aext !(aα0) ⊦ |
⊦ ⌜n⌝ < # σ → σ.drop(n) = σ[n] + σ.drop(n + 1)
aext !(aα0) = ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ + β, aext !(aal) = [], # pcsl0 = # pal1, aext(aa) = Some(e), cext(ca0) = Some(e), cren(ca0) = ren(a0), Π(ext, aext, ren, aren) !(aal.map(aren)) + Π(ext, aext, ren, aren) !(aren(aa) ') + Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, aσ.drop(# aal), aα0)) ≠ Π(ext, cext, ren, cren) !(ren(a0) ') + Π(ext, cext, ren, cren) !(pal1), Some(e) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs1), 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)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), step(s, a0, s1), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ ⌜# aal⌝ < # aσ, Π(ext, aext, ren, aren) ! (repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, ⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0)) = Π(ext, cext, ren, cren) !(pal1) ∨ ¬ frag(IOAut(astart, astep, aext))(⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0) ∨ ¬ ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ ⊑ aext !(aα0) ⊦
aext !(aα0) = ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ + β, aext !(aal) = [], # pcsl0 = # pal1, aext(aa) = Some(e), cext(ca0) = Some(e), cren(ca0) = ren(a0), Π(ext, aext, ren, aren) !(aal.map(aren)) + Π(ext, aext, ren, aren) !(aren(aa) ') + Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, aσ[# aal] + aσ.drop(# aal + 1), aα0)) ≠ Π(ext, cext, ren, cren) !(ren(a0) ') + Π(ext, cext, ren, cren) !(pal1), Some(e) ≠ None, ext(a0) ≠ None, ⌜# aal⌝ < # aσ, cstep(cs, ca0, cs1), 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)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), step(s, a0, s1), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), Π(ext, aext, ren, aren) ! (repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, ⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0)) = Π(ext, cext, ren, cren) !(pal1) ∨ ¬ frag(IOAut(astart, astep, aext))(⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0) ∨ ¬ ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ ⊑ aext !(aα0) ⊦
Used terms: aσ, # aal
| ⊦ ⌜n⌝ < # σ → σ.drop(n) = σ[n] + σ.drop(n + 1) |
| aext !(aα0) = ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ + β, aext !(aal) = [], # pcsl0 = # pal1, aext(aa) = Some(e), cext(ca0) = Some(e), cren(ca0) = ren(a0), Π(ext, aext, ren, aren) !(aal.map(aren)) + Π(ext, aext, ren, aren) !(aren(aa) ') + Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, aσ.drop(# aal), aα0)) ≠ Π(ext, cext, ren, cren) !(ren(a0) ') + Π(ext, cext, ren, cren) !(pal1), Some(e) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs1), 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)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), step(s, a0, s1), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ ⌜# aal⌝ < # aσ, Π(ext, aext, ren, aren) ! (repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, ⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0)) = Π(ext, cext, ren, cren) !(pal1) ∨ ¬ frag(IOAut(astart, astep, aext))(⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0) ∨ ¬ ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ ⊑ aext !(aα0) ⊦ |
⊦ frag(IOAut(start, step, ext))(σ, α) ↔ # σ = # α + ⌜1⌝ ∧ (∀ n. ⌜n⌝ < # α → step(σ[n], α[n], σ[n +1]))
aext !(aal) = [], aext !(aα0) = ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ + β, #(⌜as '⌝ + aσ) = #(⌜aal⌝ + ⌜aa '⌝ + aα0) + ⌜1⌝ , # pcsl0 = # pal1, aext(aa) = Some(e), cext(ca0) = Some(e), cren(ca0) = ren(a0), Π(ext, aext, ren, aren) !(aal.map(aren)) + Π(ext, aext, ren, aren) !(aren(aa) ') + Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, aσ.drop(# aal), aα0)) ≠ Π(ext, cext, ren, cren) !(ren(a0) ') + Π(ext, cext, ren, cren) !(pal1), Some(e) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs1), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), step(s, a0, s1), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ ⌜# aal⌝ < # aσ, ∀ n. ⌜n⌝ < #(⌜aal⌝ + ⌜aa '⌝ + aα0) → astep((⌜as '⌝ + aσ)[n], (⌜aal⌝ + ⌜aa '⌝ + aα0)[n], (⌜as '⌝ + aσ)[n +1]), Π(ext, aext, ren, aren) ! (repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, ⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0)) = Π(ext, cext, ren, cren) !(pal1) ∨ ¬ frag(IOAut(astart, astep, aext))(⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0) ∨ ¬ ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ ⊑ aext !(aα0) ⊦
Used terms: aext, ⌜aal⌝ + ⌜aa '⌝ + aα0, astart, ⌜as '⌝ + aσ, astep
| ⊦ frag(IOAut(start, step, ext))(σ, α) ↔ # σ = # α + ⌜1⌝ ∧ (∀ n. ⌜n⌝ < # α → step(σ[n], α[n], σ[n +1])) |
| aext !(aal) = [], aext !(aα0) = ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ + β, #(⌜as '⌝ + aσ) = #(⌜aal⌝ + ⌜aa '⌝ + aα0) + ⌜1⌝ , # pcsl0 = # pal1, aext(aa) = Some(e), cext(ca0) = Some(e), cren(ca0) = ren(a0), Π(ext, aext, ren, aren) !(aal.map(aren)) + Π(ext, aext, ren, aren) !(aren(aa) ') + Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, aσ.drop(# aal), aα0)) ≠ Π(ext, cext, ren, cren) !(ren(a0) ') + Π(ext, cext, ren, cren) !(pal1), Some(e) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs1), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), step(s, a0, s1), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ ⌜# aal⌝ < # aσ, ∀ n. ⌜n⌝ < #(⌜aal⌝ + ⌜aa '⌝ + aα0) → astep((⌜as '⌝ + aσ)[n], (⌜aal⌝ + ⌜aa '⌝ + aα0)[n], (⌜as '⌝ + aσ)[n +1]), Π(ext, aext, ren, aren) ! (repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, ⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0)) = Π(ext, cext, ren, cren) !(pal1) ∨ ¬ frag(IOAut(astart, astep, aext))(⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0) ∨ ¬ ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ ⊑ aext !(aα0) ⊦ |
aext !(aα0) = ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ + β, aext !(aal) = [], # pcsl0 = # pal1, # aσ = ⌜1⌝ + ⌜# aal⌝ + # aα0, aext(aa) = Some(e), cext(ca0) = Some(e), cren(ca0) = ren(a0), Π(ext, aext, ren, aren) !(aal.map(aren)) + Π(ext, aext, ren, aren) !(aren(aa) ') + Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, aσ.drop(# aal), aα0)) ≠ Π(ext, cext, ren, cren) !(ren(a0) ') + Π(ext, cext, ren, cren) !(pal1), Some(e) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs1), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), step(s, a0, s1), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ ⌜# aal⌝ < # aσ, ∀ n. ¬ ⌜# aal⌝ + # aα0 < ⌜n⌝ → astep((⌜as '⌝ + aσ)[n], (⌜aal⌝ + ⌜aa '⌝ + aα0)[n], aσ[n]), Π(ext, aext, ren, aren) ! (repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, ⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0)) = Π(ext, cext, ren, cren) !(pal1) ∨ ¬ frag(IOAut(astart, astep, aext))(⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0) ∨ ¬ ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ ⊑ aext !(aα0) ⊦
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 ⊦ (⌜a '⌝ + σ)[n + 1] = σ[n]; (s) ⊦ m +1 = m + 1; (s) add-comm: ⊦ n∞1 + n∞2 = n∞2 + n∞1; from specification nat-inf add-assoc: ⊦ (n∞ + n∞1) + n∞2 = n∞ + n∞1 + n∞2; from specification nat-inf ⊦ ⌜n⌝ < ⌜1⌝ + n∞ ↔ ¬ n∞ < ⌜n⌝ ; (s) ⊦ # a ' = 0 +1; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ #(σ + σ1) = # σ + # σ1; (s) ⊦ n < m → (⌜(* n)⌝ + n∞1 = ⌜(* m)⌝ + n∞2 ↔ n∞1 = ⌜m - n⌝ + n∞2); (s) ⊦ ⌜(* n)⌝ + ⌜(* m)⌝ = ⌜n + m⌝ ; (s)
| aext !(aα0) = ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ + β, aext !(aal) = [], # pcsl0 = # pal1, # aσ = ⌜1⌝ + ⌜# aal⌝ + # aα0, aext(aa) = Some(e), cext(ca0) = Some(e), cren(ca0) = ren(a0), Π(ext, aext, ren, aren) !(aal.map(aren)) + Π(ext, aext, ren, aren) !(aren(aa) ') + Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, aσ.drop(# aal), aα0)) ≠ Π(ext, cext, ren, cren) !(ren(a0) ') + Π(ext, cext, ren, cren) !(pal1), Some(e) ≠ None, ext(a0) ≠ None, cstep(cs, ca0, cs1), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), step(s, a0, s1), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ ⌜# aal⌝ < # aσ, ∀ n. ¬ ⌜# aal⌝ + # aα0 < ⌜n⌝ → astep((⌜as '⌝ + aσ)[n], (⌜aal⌝ + ⌜aa '⌝ + aα0)[n], aσ[n]), Π(ext, aext, ren, aren) ! (repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, ⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0)) = Π(ext, cext, ren, cren) !(pal1) ∨ ¬ frag(IOAut(astart, astep, aext))(⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0) ∨ ¬ ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ ⊑ aext !(aα0) ⊦ |
Used simplifier rules: ⊦ ⌜n⌝ < ⌜1⌝ + n∞ ↔ ¬ n∞ < ⌜n⌝ ; (s) ⊦ ¬ n∞ + n∞1 < n∞1; (s) add-assoc: ⊦ (n∞ + n∞1) + n∞2 = n∞ + n∞1 + n∞2; from specification nat-inf add-comm: ⊦ n∞1 + n∞2 = n∞2 + n∞1; from specification nat-inf
| aext !(aα0) = ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ + β, aext !(aal) = [], # pcsl0 = # pal1, aext(aa) = Some(e), cext(ca0) = Some(e), cren(ca0) = ren(a0), Π(ext, aext, ren, aren) !(aal.map(aren)) + Π(ext, aext, ren, aren) !(aren(aa) ') + Π(ext, aext, ren, aren) !(repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, aσ[# aal] + aσ.drop(# aal + 1), aα0)) ≠ Π(ext, cext, ren, cren) !(ren(a0) ') + Π(ext, cext, ren, cren) !(pal1), Some(e) ≠ None, ext(a0) ≠ None, ⌜# aal⌝ < # aσ, cstep(cs, ca0, cs1), 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)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), step(s, a0, s1), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), Π(ext, aext, ren, aren) ! (repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, ⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0)) = Π(ext, cext, ren, cren) !(pal1) ∨ ¬ frag(IOAut(astart, astep, aext))(⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0) ∨ ¬ ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ ⊑ aext !(aα0) ⊦ |
aext !(aal) = [], aext !(aα0) = ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ + β, # pcsl0 = # pal1, aext(aa) = Some(e), cext(ca0) = Some(e), cren(ca0) = ren(a0), Π(ext, aext, ren, aren) !(aren(aa) ') + Π(ext, aext, ren, aren) ! (repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, ⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0)) ≠ Π(ext, cext, ren, cren) !(ren(a0) ') + Π(ext, cext, ren, cren) !(pal1), Some(e) ≠ None, ext(a0) ≠ None, ⌜# aal⌝ < # aσ, cstep(cs, ca0, cs1), 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)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), step(s, a0, s1), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), Π(ext, aext, ren, aren) ! (repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, ⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0)) = Π(ext, cext, ren, cren) !(pal1) ∨ ¬ frag(IOAut(astart, astep, aext))(⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0) ∨ ¬ ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ ⊑ aext !(aα0) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ [] + x = x; (s) ⊦ a + σ = ⌜a '⌝ + σ; (s) ⊦ rext !(ral) = [] ∧ Πok(lext, rext, lren, rren) → Π(lext, rext, lren, rren) !(ral.map(rren)) = []; (s)
| aext !(aal) = [], aext !(aα0) = ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ + β, # pcsl0 = # pal1, aext(aa) = Some(e), cext(ca0) = Some(e), cren(ca0) = ren(a0), Π(ext, aext, ren, aren) !(aren(aa) ') + Π(ext, aext, ren, aren) ! (repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, ⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0)) ≠ Π(ext, cext, ren, cren) !(ren(a0) ') + Π(ext, cext, ren, cren) !(pal1), Some(e) ≠ None, ext(a0) ≠ None, ⌜# aal⌝ < # aσ, cstep(cs, ca0, cs1), 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)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), step(s, a0, s1), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), Π(ext, aext, ren, aren) ! (repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, ⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0)) = Π(ext, cext, ren, cren) !(pal1) ∨ ¬ frag(IOAut(astart, astep, aext))(⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0) ∨ ¬ ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ ⊑ aext !(aα0) ⊦ |
aext !(aα0) = ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ + β, aext !(aal) = [], Π(ext, aext, ren, aren) ! (repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, ⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0)) = Π(ext, cext, ren, cren) !(pal1), # pcsl0 = # pal1, aext(aa) = Some(e), cext(ca0) = Some(e), cren(ca0) = ren(a0), Π(ext, aext, ren, aren) !(aren(aa) ') + Π(ext, aext, ren, aren) ! (repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, ⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0)) ≠ Π(ext, cext, ren, cren) !(ren(a0) ') + Π(ext, cext, ren, cren) !(pal1), Some(e) ≠ None, ext(a0) ≠ None, ⌜# aal⌝ < # aσ, cstep(cs, ca0, cs1), 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)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), step(s, a0, s1), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren) ⊦
aext !(aα0) = ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ + β, aext !(aal) = [], # pcsl0 = # pal1, aext(aa) = Some(e), cext(ca0) = Some(e), cren(ca0) = ren(a0), Π(ext, aext, ren, aren) !(aren(aa) ') + Π(ext, aext, ren, aren) ! (repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, ⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0)) ≠ Π(ext, cext, ren, cren) !(ren(a0) ') + Π(ext, cext, ren, cren) !(pal1), Some(e) ≠ None, ext(a0) ≠ None, ⌜# aal⌝ < # aσ, cstep(cs, ca0, cs1), 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)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), step(s, a0, s1), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(astart, astep, aext))(⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0) ⊦
aext !(aα0) = ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ + β, aext !(aal) = [], # pcsl0 = # pal1, aext(aa) = Some(e), cext(ca0) = Some(e), cren(ca0) = ren(a0), Π(ext, aext, ren, aren) !(aren(aa) ') + Π(ext, aext, ren, aren) ! (repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, ⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0)) ≠ Π(ext, cext, ren, cren) !(ren(a0) ') + Π(ext, cext, ren, cren) !(pal1), Some(e) ≠ None, ext(a0) ≠ None, ⌜# aal⌝ < # aσ, cstep(cs, ca0, cs1), 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)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), step(s, a0, s1), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ ⊑ aext !(aα0) ⊦
| aext !(aα0) = ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ + β, aext !(aal) = [], Π(ext, aext, ren, aren) ! (repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, ⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0)) = Π(ext, cext, ren, cren) !(pal1), # pcsl0 = # pal1, aext(aa) = Some(e), cext(ca0) = Some(e), cren(ca0) = ren(a0), Π(ext, aext, ren, aren) !(aren(aa) ') + Π(ext, aext, ren, aren) ! (repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, ⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0)) ≠ Π(ext, cext, ren, cren) !(ren(a0) ') + Π(ext, cext, ren, cren) !(pal1), Some(e) ≠ None, ext(a0) ≠ None, ⌜# aal⌝ < # aσ, cstep(cs, ca0, cs1), 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)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), step(s, a0, s1), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren) ⊦ |
aext !(aα0) = ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ + β, aext !(aal) = [], Π(ext, aext, ren, aren) ! (repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, ⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0)) = Π(ext, cext, ren, cren) !(pal1), # pcsl0 = # pal1, aext(aa) = Some(e), cext(ca0) = Some(e), cren(ca0) = ren(a0), Π(ext, aext, ren, aren) !(aren(aa) ') ≠ Π(ext, cext, ren, cren) !(ren(a0) '), Some(e) ≠ None, ext(a0) ≠ None, ⌜# aal⌝ < # aσ, cstep(cs, ca0, cs1), 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)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), step(s, a0, s1), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ # y = # y0 → (x + y = z + y0 ↔ x = z ∧ y = y0); (ws)
| aext !(aα0) = ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ + β, aext !(aal) = [], Π(ext, aext, ren, aren) ! (repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, ⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0)) = Π(ext, cext, ren, cren) !(pal1), # pcsl0 = # pal1, aext(aa) = Some(e), cext(ca0) = Some(e), cren(ca0) = ren(a0), Π(ext, aext, ren, aren) !(aren(aa) ') ≠ Π(ext, cext, ren, cren) !(ren(a0) '), Some(e) ≠ None, ext(a0) ≠ None, ⌜# aal⌝ < # aσ, cstep(cs, ca0, cs1), 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)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), step(s, a0, s1), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren) ⊦ |
Π(ext, aext, ren, aren) ! (repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, ⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0)) = Π(ext, cext, ren, cren) !(pal1), aext !(aal) = [], aext !(aα0) = ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ + β, # pcsl0 = # pal1, aext(aa) = Some(e), cext(ca0) = Some(e), Π(ext, aext, ren, aren) !(aren(aa) ') ≠ Π(ext, cext, ren, cren) !(cren(ca0) '), Some(e) ≠ None, ext(a0) ≠ None, ⌜# aal⌝ < # aσ, cstep(cs, ca0, cs1), 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)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), step(s, a0, s1), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren) ⊦
| Π(ext, aext, ren, aren) ! (repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, ⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0)) = Π(ext, cext, ren, cren) !(pal1), aext !(aal) = [], aext !(aα0) = ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ + β, # pcsl0 = # pal1, aext(aa) = Some(e), cext(ca0) = Some(e), Π(ext, aext, ren, aren) !(aren(aa) ') ≠ Π(ext, cext, ren, cren) !(cren(ca0) '), Some(e) ≠ None, ext(a0) ≠ None, ⌜# aal⌝ < # aσ, cstep(cs, ca0, cs1), 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)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), step(s, a0, s1), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren) ⊦ |
⊦ ext !(a ') = (ext(a) = None ⊃ [];ext(a).get ')
aext !(aα0) = ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ + β, aext !(aal) = [], Π(ext, aext, ren, aren) ! (repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, ⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0)) = Π(ext, cext, ren, cren) !(pal1), # pcsl0 = # pal1, aext(aa) = Some(e), cext(ca0) = Some(e), Π(ext, aext, ren, aren) !(aren(aa) ') ≠ (Π(ext, cext, ren, cren)(cren(ca0)) = None ⊃ [];Π(ext, cext, ren, cren)(cren(ca0)).get '), Some(e) ≠ None, ext(a0) ≠ None, ⌜# aal⌝ < # aσ, cstep(cs, ca0, cs1), 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)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), step(s, a0, s1), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren) ⊦
Used terms: Π(ext, cext, ren, cren), cren(ca0)
| ⊦ ext !(a ') = (ext(a) = None ⊃ [];ext(a).get ') |
| aext !(aα0) = ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ + β, aext !(aal) = [], Π(ext, aext, ren, aren) ! (repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, ⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0)) = Π(ext, cext, ren, cren) !(pal1), # pcsl0 = # pal1, aext(aa) = Some(e), cext(ca0) = Some(e), Π(ext, aext, ren, aren) !(aren(aa) ') ≠ (Π(ext, cext, ren, cren)(cren(ca0)) = None ⊃ [];Π(ext, cext, ren, cren)(cren(ca0)).get '), Some(e) ≠ None, ext(a0) ≠ None, ⌜# aal⌝ < # aσ, cstep(cs, ca0, cs1), 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)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), step(s, a0, s1), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren) ⊦ |
aext !(aα0) = ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ + β, aext !(aal) = [], Π(ext, aext, ren, aren) ! (repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, ⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0)) = Π(ext, cext, ren, cren) !(pal1), # pcsl0 = # pal1, aext(aa) = Some(e), cext(ca0) = Some(e), Π(ext, aext, ren, aren) !(aren(aa) ') ≠ Some(e).get ', Some(e) ≠ None, ext(a0) ≠ None, ⌜# aal⌝ < # aσ, cstep(cs, ca0, cs1), 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)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), step(s, a0, s1), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren) ⊦
Used simplifier rules: ⊦ Πok(lext, rext, lren, rren) → Π(lext, rext, lren, rren)(rren(ra)) = rext(ra); (s)
| aext !(aα0) = ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ + β, aext !(aal) = [], Π(ext, aext, ren, aren) ! (repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, ⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0)) = Π(ext, cext, ren, cren) !(pal1), # pcsl0 = # pal1, aext(aa) = Some(e), cext(ca0) = Some(e), Π(ext, aext, ren, aren) !(aren(aa) ') ≠ Some(e).get ', Some(e) ≠ None, ext(a0) ≠ None, ⌜# aal⌝ < # aσ, cstep(cs, ca0, cs1), 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)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), step(s, a0, s1), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren) ⊦ |
⊦ ext !(a ') = (ext(a) = None ⊃ [];ext(a).get ')
Used simplifier rules: ⊦ Πok(lext, rext, lren, rren) → Π(lext, rext, lren, rren)(rren(ra)) = rext(ra); (s) ⊦ a ' = a0 ' ↔ a = a0; (s) Used terms: Π(ext, aext, ren, aren), aren(aa)
| ⊦ ext !(a ') = (ext(a) = None ⊃ [];ext(a).get ') |
| aext !(aα0) = ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ + β, aext !(aal) = [], # pcsl0 = # pal1, aext(aa) = Some(e), cext(ca0) = Some(e), cren(ca0) = ren(a0), Π(ext, aext, ren, aren) !(aren(aa) ') + Π(ext, aext, ren, aren) ! (repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, ⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0)) ≠ Π(ext, cext, ren, cren) !(ren(a0) ') + Π(ext, cext, ren, cren) !(pal1), Some(e) ≠ None, ext(a0) ≠ None, ⌜# aal⌝ < # aσ, cstep(cs, ca0, cs1), 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)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), step(s, a0, s1), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(astart, astep, aext))(⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0) ⊦ |
⊦ frag(IOAut(start, step, ext))(σ, α) ∧ ¬ # α < ⌜n⌝ → (frag(IOAut(start, step, ext))(σ.drop(n), α.drop(n)) ↔ true)
aext !(aal) = [], aext !(aα0) = ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ + β, # pcsl0 = # pal1, aext(aa) = Some(e), cext(ca0) = Some(e), cren(ca0) = ren(a0), Π(ext, aext, ren, aren) !(aren(aa) ') + Π(ext, aext, ren, aren) ! (repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, ⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0)) ≠ Π(ext, cext, ren, cren) !(ren(a0) ') + Π(ext, cext, ren, cren) !(pal1), Some(e) ≠ None, ext(a0) ≠ None, ⌜# aal⌝ < # aσ, cstep(cs, ca0, cs1), 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)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), step(s, a0, s1), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(astart, astep, aext))(⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0) ∧ ¬ #(⌜aal⌝ + ⌜aa '⌝ + aα0) < ⌜# aal + 1⌝ → (frag(IOAut(astart, astep, aext))((⌜as '⌝ + aσ).drop(# aal + 1), (⌜aal⌝ + ⌜aa '⌝ + aα0).drop(# aal + 1)) ↔ true) ⊦
Used terms: aext, ⌜aal⌝ + ⌜aa '⌝ + aα0, astart, ⌜as '⌝ + aσ, # aal + 1, astep
| ⊦ frag(IOAut(start, step, ext))(σ, α) ∧ ¬ # α < ⌜n⌝ → (frag(IOAut(start, step, ext))(σ.drop(n), α.drop(n)) ↔ true) |
| aext !(aal) = [], aext !(aα0) = ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ + β, # pcsl0 = # pal1, aext(aa) = Some(e), cext(ca0) = Some(e), cren(ca0) = ren(a0), Π(ext, aext, ren, aren) !(aren(aa) ') + Π(ext, aext, ren, aren) ! (repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, ⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0)) ≠ Π(ext, cext, ren, cren) !(ren(a0) ') + Π(ext, cext, ren, cren) !(pal1), Some(e) ≠ None, ext(a0) ≠ None, ⌜# aal⌝ < # aσ, cstep(cs, ca0, cs1), 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)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), step(s, a0, s1), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ¬ frag(IOAut(astart, astep, aext))(⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0) ∧ ¬ #(⌜aal⌝ + ⌜aa '⌝ + aα0) < ⌜# aal + 1⌝ → (frag(IOAut(astart, astep, aext))((⌜as '⌝ + aσ).drop(# aal + 1), (⌜aal⌝ + ⌜aa '⌝ + aα0).drop(# aal + 1)) ↔ true) ⊦ |
aext !(aα0) = ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ + β, aext !(aal) = [], # pcsl0 = # pal1, aext(aa) = Some(e), cext(ca0) = Some(e), cren(ca0) = ren(a0), Π(ext, aext, ren, aren) !(aren(aa) ') + Π(ext, aext, ren, aren) ! (repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, ⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0)) ≠ Π(ext, cext, ren, cren) !(ren(a0) ') + Π(ext, cext, ren, cren) !(pal1), Some(e) ≠ None, ext(a0) ≠ None, ⌜# aal⌝ < # aσ, cstep(cs, ca0, cs1), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0), frag(IOAut(astart, astep, aext))(aσ.drop(# aal), aα0), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), step(s, a0, s1), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(astart, astep, aext))(⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0) ⊦
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 ⊦ (⌜a '⌝ + σ).drop(1) = σ; (s) ⊦ (⌜x⌝ + σ).drop(m + # x) = σ.drop(m); (s) ⊦ n + 0 = n; (s) ⊦ n ≠ 0 → (⌜a '⌝ + σ).drop((* n) + m) = σ.drop((n - 1) + m); (s) add-comm: ⊦ n∞1 + n∞2 = n∞2 + n∞1; from specification nat-inf add-assoc: ⊦ (n∞ + n∞1) + n∞2 = n∞ + n∞1 + n∞2; from specification nat-inf ⊦ ¬ n∞ + n∞1 < n∞1; (s) ⊦ n∞ + ⌜0⌝ = n∞; (s) ⊦ m ≤ n → (⌜(* m)⌝ + n∞2 < ⌜(* n)⌝ + n∞1 ↔ n∞2 < ⌜n - m⌝ + n∞1); (s) ⊦ ⌜m + n⌝ = ⌜m⌝ + ⌜n⌝ ; (s) ⊦ # a ' = 0 +1; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ #(σ + σ1) = # σ + # σ1; (s)
| aext !(aα0) = ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ + β, aext !(aal) = [], # pcsl0 = # pal1, aext(aa) = Some(e), cext(ca0) = Some(e), cren(ca0) = ren(a0), Π(ext, aext, ren, aren) !(aren(aa) ') + Π(ext, aext, ren, aren) ! (repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, ⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0)) ≠ Π(ext, cext, ren, cren) !(ren(a0) ') + Π(ext, cext, ren, cren) !(pal1), Some(e) ≠ None, ext(a0) ≠ None, ⌜# aal⌝ < # aσ, cstep(cs, ca0, cs1), frag(IOAut(astart, astep, aext))(⌜as '⌝ + aσ, ⌜aal⌝ + ⌜aa '⌝ + aα0), frag(IOAut(astart, astep, aext))(aσ.drop(# aal), aα0), frag*(IOAut(Π(start, cstart), Π(step, cstep, ren, cren, ext, cext), Π(ext, cext, ren, cren)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), step(s, a0, s1), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ frag(IOAut(astart, astep, aext))(⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0) ⊦ |
⊦ ⌜n⌝ < # σ → σ.drop(n) = σ[n] + σ.drop(n + 1)
Used simplifier rules: ⊦ a + σ = ⌜a '⌝ + σ; (s) Used terms: aσ, # aal
| ⊦ ⌜n⌝ < # σ → σ.drop(n) = σ[n] + σ.drop(n + 1) |
| aext !(aα0) = ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ + β, aext !(aal) = [], # pcsl0 = # pal1, aext(aa) = Some(e), cext(ca0) = Some(e), cren(ca0) = ren(a0), Π(ext, aext, ren, aren) !(aren(aa) ') + Π(ext, aext, ren, aren) ! (repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, ⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0)) ≠ Π(ext, cext, ren, cren) !(ren(a0) ') + Π(ext, cext, ren, cren) !(pal1), Some(e) ≠ None, ext(a0) ≠ None, ⌜# aal⌝ < # aσ, cstep(cs, ca0, cs1), 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)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(aren, aext, ren), nounsharedextR(cren, cext, ren), step(s, a0, s1), Πok(ext, aext, ren, aren), Πok(ext, cext, ren, cren), ¬ ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ ⊑ aext !(aα0) ⊦ |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
aext !(aal) = [], aext !(aα0) = ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ + β, # pcsl0 = # pal1, aext(aa) = Some(e), cext(ca0) = Some(e), cren(ca0) = ren(a0), Π(ext, aext, ren, aren) !(aren(aa) ') + Π(ext, aext, ren, aren) ! (repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, ⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0)) ≠ Π(ext, cext, ren, cren) !(ren(a0) ') + Π(ext, cext, ren, cren) !(pal1), Some(e) ≠ None, ext(a0) ≠ None, ⌜# aal⌝ < # aσ, cstep(cs, ca0, cs1), 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)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), step(s, a0, s1), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ∀ σ1. ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ + σ1 ≠ aext !(aα0) ⊦
Used terms: ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ , aext !(aα0)
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| aext !(aal) = [], aext !(aα0) = ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ + β, # pcsl0 = # pal1, aext(aa) = Some(e), cext(ca0) = Some(e), cren(ca0) = ren(a0), Π(ext, aext, ren, aren) !(aren(aa) ') + Π(ext, aext, ren, aren) ! (repla(step, cstep, cren, ren, aren, cext, aext, (s1, cs1) ' + pcsl0, pal1, ⌜aσ[# aal] '⌝ + aσ.drop(# aal + 1), aα0)) ≠ Π(ext, cext, ren, cren) !(ren(a0) ') + Π(ext, cext, ren, cren) !(pal1), Some(e) ≠ None, ext(a0) ≠ None, ⌜# aal⌝ < # aσ, cstep(cs, ca0, cs1), 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)))((s1, cs1) ' + pcsl0, pal1), nounsharedextR(cren, cext, ren), nounsharedextR(aren, aext, ren), step(s, a0, s1), Πok(ext, cext, ren, cren), Πok(ext, aext, ren, aren), ∀ σ1. ⌜cext !(πra(step, cstep, ren, cren, (s1, cs1) ' + pcsl0, pal1))⌝ + σ1 ≠ aext !(aα0) ⊦ |
Used terms: β
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.