| bwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass) ⊦ C_≤T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)) |
bwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), ¬ C_≤T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass) ⊦
| bwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), ¬ C_≤T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass) ⊦ |
≤BI(cioaut, aioaut) ⊦ C_≤*T_A(cioaut, aioaut)
bwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), ¬ C_≤T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)), ¬ ≤BI(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass) ⊦
C_≤*T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)), bwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), ¬ C_≤T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass) ⊦
Used terms: IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)
| ≤BI(cioaut, aioaut) ⊦ C_≤*T_A(cioaut, aioaut) |
| bwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), ¬ C_≤T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)), ¬ ≤BI(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass) ⊦ |
⊦ ≤BI(cioaut, aioaut) ↔ (∃ t, aINV, cINV. bwsim(cioaut, aioaut, t, cINV, aINV))
bwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), ¬ C_≤T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ t, aINV, cINV. ¬ bwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV) ⊦
Used terms: IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)
| ⊦ ≤BI(cioaut, aioaut) ↔ (∃ t, aINV, cINV. bwsim(cioaut, aioaut, t, cINV, aINV)) |
| bwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), ¬ C_≤T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ t, aINV, cINV. ¬ bwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV) ⊦ |
Used terms: t, aINV, cINV
| C_≤*T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)), bwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), ¬ C_≤T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass) ⊦ |
⊦ bwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV) ↔ (∀ cs. cstart(cs) → cINV(cs)) ∧ (∀ as. astart(as) → aINV(as)) ∧ (∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0)) ∧ (∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0)) ∧ (∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as))) ∧ (∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as)) ∧ (∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)))
C_≤*T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)), ¬ C_≤T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)) ⊦
Used terms: astep, astart, t, aext, cstart, cstep, aINV, cext, cINV
| ⊦ bwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV) ↔ (∀ cs. cstart(cs) → cINV(cs)) ∧ (∀ as. astart(as) → aINV(as)) ∧ (∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0)) ∧ (∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0)) ∧ (∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as))) ∧ (∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as)) ∧ (∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as))) |
| C_≤*T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)), ¬ C_≤T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)) ⊦ |
C_≤*T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)), ¬ C_≤T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ cs. (∃ csl, cal. exec*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cs = csl.last) → cINV(cs) ⊦
C_≤*T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)), ¬ C_≤T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass) ⊦ ∀ cs. (∃ csl, cal. exec*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cs = csl.last) → cINV(cs)
Used formulas: ∀ cs. (∃ csl, cal. exec*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cs = csl.last) → cINV(cs)
| C_≤*T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)), ¬ C_≤T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ cs. (∃ csl, cal. exec*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cs = csl.last) → cINV(cs) ⊦ |
C_≤*T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)), ¬ C_≤T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦
Used simplifier rules: ⊦ IOAut(start, step, ext).start = start; (s) ⊦ exec*(ioa)(sl, al) ↔ frag*(ioa)(sl, al) ∧ ioa.start(sl[0]); (s)
| C_≤*T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)), ¬ C_≤T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ |
⊦ C_≤T_A(cioaut, aioaut) ↔ (∀ β. trace(cioaut)(β) → trace(aioaut)(β))
C_≤*T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∃ β. ¬(trace(IOAut(cstart, cstep, cext))(β) → trace(IOAut(astart, astep, aext))(β)) ⊦
Used terms: IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)
| ⊦ C_≤T_A(cioaut, aioaut) ↔ (∀ β. trace(cioaut)(β) → trace(aioaut)(β)) |
| C_≤*T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∃ β. ¬(trace(IOAut(cstart, cstep, cext))(β) → trace(IOAut(astart, astep, aext))(β)) ⊦ |
C_≤*T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)), trace(IOAut(cstart, cstep, cext))(β), ¬ trace(IOAut(astart, astep, aext))(β), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦
| C_≤*T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)), trace(IOAut(cstart, cstep, cext))(β), ¬ trace(IOAut(astart, astep, aext))(β), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ |
⊦ C_≤*T_A(cioaut, aioaut) ↔ (∀ el. trace*(cioaut)(el) → trace*(aioaut)(el))
trace(IOAut(cstart, cstep, cext))(β), ¬ trace(IOAut(astart, astep, aext))(β), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el) ⊦
Used terms: IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)
| ⊦ C_≤*T_A(cioaut, aioaut) ↔ (∀ el. trace*(cioaut)(el) → trace*(aioaut)(el)) |
| trace(IOAut(cstart, cstep, cext))(β), ¬ trace(IOAut(astart, astep, aext))(β), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el) ⊦ |
trace(IOAut(cstart, cstep, cext))(β), ¬ trace(IOAut(astart, astep, aext))(β), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦
| trace(IOAut(cstart, cstep, cext))(β), ¬ trace(IOAut(astart, astep, aext))(β), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ |
β = ⌜el0⌝ , trace(IOAut(cstart, cstep, cext))(β), ¬ trace(IOAut(astart, astep, aext))(β), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el) ⊦
β = ⌜ef⌝ , trace(IOAut(cstart, cstep, cext))(β), ¬ trace(IOAut(astart, astep, aext))(β), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el) ⊦
Used simplifier rules: Stream('a) freely generated by ⌜ ⌝, ⌜ ⌝;;
| β = ⌜el0⌝ , trace(IOAut(cstart, cstep, cext))(β), ¬ trace(IOAut(astart, astep, aext))(β), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el) ⊦ |
trace*(IOAut(cstart, cstep, cext))(el0), ¬ trace*(IOAut(astart, astep, aext))(el0), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦
Used simplifier rules: ⊦ trace(ioa)(⌜el⌝ ) ↔ trace*(ioa)(el); (s)
| trace*(IOAut(cstart, cstep, cext))(el0), ¬ trace*(IOAut(astart, astep, aext))(el0), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ |
Used terms: el0
| β = ⌜ef⌝ , trace(IOAut(cstart, cstep, cext))(β), ¬ trace(IOAut(astart, astep, aext))(β), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el) ⊦ |
traceω(IOAut(cstart, cstep, cext))(ef), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦
Used simplifier rules: ⊦ trace(ioa)(⌜ef⌝ ) ↔ traceω(ioa)(ef); (s)
| traceω(IOAut(cstart, cstep, cext))(ef), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ |
⊦ traceω(IOAut(start, step, ext))(ef) ↔ (∃ sf, af. ⌜ef⌝ = ext !(⌜af⌝ ) ∧ execω(IOAut(start, step, ext))(sf, af))
¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∃ sf, af. ⌜ef⌝ = cext !(⌜af⌝ ) ∧ execω(IOAut(cstart, cstep, cext))(sf, af) ⊦
Used terms: cstart, cstep, cext, ef
| ⊦ traceω(IOAut(start, step, ext))(ef) ↔ (∃ sf, af. ⌜ef⌝ = ext !(⌜af⌝ ) ∧ execω(IOAut(start, step, ext))(sf, af)) |
| ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∃ sf, af. ⌜ef⌝ = cext !(⌜af⌝ ) ∧ execω(IOAut(cstart, cstep, cext))(sf, af) ⊦ |
⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦
Used simplifier rules: ⊦ IOAut(start, step, ext).start = start; (s) ⊦ execω(ioa)(sf, af) ↔ fragω(ioa)(sf, af) ∧ ioa.start(sf(0)); (s)
| ⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ |
infgraph(g), finroot(g), finout(g), allreachable(g) ⊦ ∃ nf. isroot(g)(nf(0)) ∧ pathp(g)(⌜nf⌝ )
⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el) ⊦ infgraph ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ∧ finroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ∧ finout ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ∧ allreachable ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1)))
⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∃ nf. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (nf(0)) ∧ pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (⌜nf⌝ ) ⊦
Used terms: (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))
| infgraph(g), finroot(g), finout(g), allreachable(g) ⊦ ∃ nf. isroot(g)(nf(0)) ∧ pathp(g)(⌜nf⌝ ) |
| ⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el) ⊦ infgraph ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ∧ finroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ∧ finout ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ∧ allreachable ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) |
⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ infgraph ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦
⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ finroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦
⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ finout ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦
⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ allreachable ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦
| ⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ infgraph ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ |
⊦ infgraph(g) ↔ (∀ s. ∃ a. dom(g)(a) ∧ ¬ a ∈ s)
⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∃ s. ¬ (∃ a. dom ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ ¬ a ∈ s) ⊦
Used terms: (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))
| ⊦ infgraph(g) ↔ (∀ s. ∃ a. dom(g)(a) ∧ ¬ a ∈ s) |
| ⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∃ s. ¬ (∃ a. dom ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ ¬ a ∈ s) ⊦ |
⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ ∃ a. t(csf(a._2), a._1) ∧ aINV(a._1) ∧ ¬ a ∈ asn-s
Used simplifier rules: ⊦ dom(vs × es) = vs; (s)
| ⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ ∃ a. t(csf(a._2), a._1) ∧ aINV(a._1) ∧ ¬ a ∈ asn-s |
⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∃ n. ∀ asn. asn ∈ asn-s → asn._2 < n ⊦ ∃ a. t(csf(a._2), a._1) ∧ aINV(a._1) ∧ ¬ a ∈ asn-s
⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el) ⊦ ∃ a. t(csf(a._2), a._1) ∧ aINV(a._1) ∧ ¬ a ∈ asn-s, ∃ n. ∀ asn. asn ∈ asn-s → asn._2 < n
Used formulas: ∃ n. ∀ asn. asn ∈ asn-s → asn._2 < n
| ⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∃ n. ∀ asn. asn ∈ asn-s → asn._2 < n ⊦ ∃ a. t(csf(a._2), a._1) ∧ aINV(a._1) ∧ ¬ a ∈ asn-s |
⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ asn. asn ∈ asn-s → asn._2 < n, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ ∃ a. t(csf(a._2), a._1) ∧ aINV(a._1) ∧ ¬ a ∈ asn-s
| ⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ asn. asn ∈ asn-s → asn._2 < n, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ ∃ a. t(csf(a._2), a._1) ∧ aINV(a._1) ∧ ¬ a ∈ asn-s |
⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), cINV(csf(n + 1)) → (∃ as. t(csf(n + 1), as) ∧ aINV(as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ asn. asn ∈ asn-s → asn._2 < n ⊦ ∃ a. t(csf(a._2), a._1) ∧ aINV(a._1) ∧ ¬ a ∈ asn-s
Used terms: csf(n + 1)
| ⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), cINV(csf(n + 1)) → (∃ as. t(csf(n + 1), as) ∧ aINV(as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ asn. asn ∈ asn-s → asn._2 < n ⊦ ∃ a. t(csf(a._2), a._1) ∧ aINV(a._1) ∧ ¬ a ∈ asn-s |
⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), cINV(csf(n + 1)) → t(csf(n + 1), as) ∧ aINV(as), ∀ asn. asn ∈ asn-s → asn._2 < n, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ ∃ a. t(csf(a._2), a._1) ∧ aINV(a._1) ∧ ¬ a ∈ asn-s
| ⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), cINV(csf(n + 1)) → t(csf(n + 1), as) ∧ aINV(as), ∀ asn. asn ∈ asn-s → asn._2 < n, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ ∃ a. t(csf(a._2), a._1) ∧ aINV(a._1) ∧ ¬ a ∈ asn-s |
⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ cINV(csf(n + 1)), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ asn. asn ∈ asn-s → asn._2 < n ⊦ ∃ a. t(csf(a._2), a._1) ∧ aINV(a._1) ∧ ¬ a ∈ asn-s
⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n + 1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ asn. asn ∈ asn-s → asn._2 < n ⊦ ∃ a. t(csf(a._2), a._1) ∧ aINV(a._1) ∧ ¬ a ∈ asn-s
| ⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ cINV(csf(n + 1)), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ asn. asn ∈ asn-s → asn._2 < n ⊦ ∃ a. t(csf(a._2), a._1) ∧ aINV(a._1) ∧ ¬ a ∈ asn-s |
⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ cINV(csf(n + 1)), ¬ traceω(IOAut(astart, astep, aext))(ef), (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ csf(n + 1) = csl.last) → cINV(csf(n + 1)), ∀ asn. asn ∈ asn-s → asn._2 < n, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)) ⊦ ∃ a. t(csf(a._2), a._1) ∧ aINV(a._1) ∧ ¬ a ∈ asn-s
Used terms: csf(n + 1)
| ⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ cINV(csf(n + 1)), ¬ traceω(IOAut(astart, astep, aext))(ef), (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ csf(n + 1) = csl.last) → cINV(csf(n + 1)), ∀ asn. asn ∈ asn-s → asn._2 < n, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)) ⊦ ∃ a. t(csf(a._2), a._1) ∧ aINV(a._1) ∧ ¬ a ∈ asn-s |
⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ cINV(csf(n + 1)), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ asn. asn ∈ asn-s → asn._2 < n ⊦ ∃ a. t(csf(a._2), a._1) ∧ aINV(a._1) ∧ ¬ a ∈ asn-s, ∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ csf(n + 1) = csl.last
| ⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ cINV(csf(n + 1)), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ asn. asn ∈ asn-s → asn._2 < n ⊦ ∃ a. t(csf(a._2), a._1) ∧ aINV(a._1) ∧ ¬ a ∈ asn-s, ∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ csf(n + 1) = csl.last |
⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ cINV(csf(n + 1)), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ asn. asn ∈ asn-s → asn._2 < n, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)) ⊦ ∃ a. t(csf(a._2), a._1) ∧ aINV(a._1) ∧ ¬ a ∈ asn-s, frag*(IOAut(cstart, cstep, cext))(csf.take(n + 2), caf.take(n + 1)) ∧ cstart(csf.take(n + 2)[0]) ∧ csf(n + 1) = (csf.take(n + 2)).last
Used terms: csf.take(n + 2), caf.take(n + 1)
| ⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ cINV(csf(n + 1)), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ asn. asn ∈ asn-s → asn._2 < n, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)) ⊦ ∃ a. t(csf(a._2), a._1) ∧ aINV(a._1) ∧ ¬ a ∈ asn-s, frag*(IOAut(cstart, cstep, cext))(csf.take(n + 2), caf.take(n + 1)) ∧ cstart(csf.take(n + 2)[0]) ∧ csf(n + 1) = (csf.take(n + 2)).last |
⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ cINV(csf(n + 1)), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ asn. asn ∈ asn-s → asn._2 < n ⊦ ∃ a. t(csf(a._2), a._1) ∧ aINV(a._1) ∧ ¬ a ∈ asn-s, frag*(IOAut(cstart, cstep, cext))(csf.take(n + 2), caf.take(n + 1)) ∧ csf(n + 1) = (csf.take(n + 2)).last
Used simplifier rules: m < n ⊦ nf.take(n)[m] = nf(m); (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic n < n0 ⊦ (* n) ≠ m0 + (* n0); (s) ⊦ 0 < m ↔ m ≠ 0; (s)
| ⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ cINV(csf(n + 1)), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ asn. asn ∈ asn-s → asn._2 < n ⊦ ∃ a. t(csf(a._2), a._1) ∧ aINV(a._1) ∧ ¬ a ∈ asn-s, frag*(IOAut(cstart, cstep, cext))(csf.take(n + 2), caf.take(n + 1)) ∧ csf(n + 1) = (csf.take(n + 2)).last |
⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ cINV(csf(n + 1)), ¬ frag*(IOAut(cstart, cstep, cext))(csf.take(n + 2), caf.take(n + 1)), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ asn. asn ∈ asn-s → asn._2 < n, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)) ⊦ ∃ a. t(csf(a._2), a._1) ∧ aINV(a._1) ∧ ¬ a ∈ asn-s
⌜ef⌝ = cext !(⌜caf⌝ ), csf(n + 1) ≠ (csf.take(n + 2)).last, cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ cINV(csf(n + 1)), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ asn. asn ∈ asn-s → asn._2 < n, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)) ⊦ ∃ a. t(csf(a._2), a._1) ∧ aINV(a._1) ∧ ¬ a ∈ asn-s
| ⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ cINV(csf(n + 1)), ¬ frag*(IOAut(cstart, cstep, cext))(csf.take(n + 2), caf.take(n + 1)), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ asn. asn ∈ asn-s → asn._2 < n, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)) ⊦ ∃ a. t(csf(a._2), a._1) ∧ aINV(a._1) ∧ ¬ a ∈ asn-s |
⊦ frag(IOAut(start, step, ext))(σ, α) ∧ ¬ # α < ⌜n⌝ → frag*(IOAut(start, step, ext))(σ.take(n + 1), α.take(n))
Used simplifier rules: ⊦ frag(ioa)(⌜sf⌝ , ⌜af⌝ ) ↔ fragω(ioa)(sf, af); (s) ⊦ # ⌜nf⌝ = ∞; (s) ⊦ ⌜m + n⌝ = ⌜m⌝ + ⌜n⌝ ; (s) ⊦ ¬ ∞ < n∞; (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ ⌜nf⌝ .take(n) = nf.take(n); (s) Used terms: cext, n + 1, ⌜caf⌝ , cstep, cstart, ⌜csf⌝
| ⊦ frag(IOAut(start, step, ext))(σ, α) ∧ ¬ # α < ⌜n⌝ → frag*(IOAut(start, step, ext))(σ.take(n + 1), α.take(n)) |
| ⌜ef⌝ = cext !(⌜caf⌝ ), csf(n + 1) ≠ (csf.take(n + 2)).last, cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ cINV(csf(n + 1)), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ asn. asn ∈ asn-s → asn._2 < n, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)) ⊦ ∃ a. t(csf(a._2), a._1) ∧ aINV(a._1) ∧ ¬ a ∈ asn-s |
⊦ nf.take(n + 2) = nf(0) + (λ n. nf(n + 1)).take(n + 1)
⌜ef⌝ = cext !(⌜caf⌝ ), csf(n + 1) ≠ (csf(0) + (λ n. csf(n + 1)).take(n + 1)).last, cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ cINV(csf(n + 1)), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ asn. asn ∈ asn-s → asn._2 < n ⊦ ∃ a. t(csf(a._2), a._1) ∧ aINV(a._1) ∧ ¬ a ∈ asn-s
Used terms: csf, n
| ⊦ nf.take(n + 2) = nf(0) + (λ n. nf(n + 1)).take(n + 1) |
| ⌜ef⌝ = cext !(⌜caf⌝ ), csf(n + 1) ≠ (csf(0) + (λ n. csf(n + 1)).take(n + 1)).last, cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ cINV(csf(n + 1)), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ asn. asn ∈ asn-s → asn._2 < n ⊦ ∃ a. t(csf(a._2), a._1) ∧ aINV(a._1) ∧ ¬ a ∈ asn-s |
⌜ef⌝ = cext !(⌜caf⌝ ), csf(n + 1) ≠ (csf(0) ' + (λ n. csf(n + 1)).take(n + 1)).last, cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ cINV(csf(n + 1)), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ asn. asn ∈ asn-s → asn._2 < n, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)) ⊦ ∃ a. t(csf(a._2), a._1) ∧ aINV(a._1) ∧ ¬ a ∈ asn-s
Used simplifier rules: ⊦ a + x = a ' + x; (s)
| ⌜ef⌝ = cext !(⌜caf⌝ ), csf(n + 1) ≠ (csf(0) ' + (λ n. csf(n + 1)).take(n + 1)).last, cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ cINV(csf(n + 1)), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ asn. asn ∈ asn-s → asn._2 < n, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)) ⊦ ∃ a. t(csf(a._2), a._1) ∧ aINV(a._1) ∧ ¬ a ∈ asn-s |
⊦ nf.take(m + 1) = nf.take(m) + nf(m) '
Used simplifier rules: ⊦ (a ' + x + b ').last = b; (s) a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: λ n. csf(n + 1), n
| ⊦ nf.take(m + 1) = nf.take(m) + nf(m) ' |
| ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n + 1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ asn. asn ∈ asn-s → asn._2 < n ⊦ ∃ a. t(csf(a._2), a._1) ∧ aINV(a._1) ∧ ¬ a ∈ asn-s |
⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n + 1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ asn. asn ∈ asn-s → asn._2 < n, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ t(csf((as, n + 1)._2), (as, n + 1)._1) ∧ aINV((as, n + 1)._1) ∧ ¬ (as, n + 1) ∈ asn-s
Used terms: (as, n + 1)
| ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n + 1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ asn. asn ∈ asn-s → asn._2 < n, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ t(csf((as, n + 1)._2), (as, n + 1)._1) ∧ aINV((as, n + 1)._1) ∧ ¬ (as, n + 1) ∈ asn-s |
⌜ef⌝ = cext !(⌜caf⌝ ), # asn-s ≠ 0, asn-s ≠ ∅, aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n + 1), as), (as, n + 1) ∈ asn-s, ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ asn. asn ∈ asn-s → asn._2 < n, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦
Used simplifier rules: size-zero-01: ⊦ s ≠ ∅ → # s ≠ 0; (forward) from specification set-basic ne-01: ⊦ a ∈ s → s ≠ ∅; (forward) from specification set-basic
| ⌜ef⌝ = cext !(⌜caf⌝ ), # asn-s ≠ 0, asn-s ≠ ∅, aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n + 1), as), (as, n + 1) ∈ asn-s, ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ asn. asn ∈ asn-s → asn._2 < n, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ |
Used simplifier rules: ⊦ ¬ m + n < m; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: (as, n + 1)
| ⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el) ⊦ ∃ a. t(csf(a._2), a._1) ∧ aINV(a._1) ∧ ¬ a ∈ asn-s, ∃ n. ∀ asn. asn ∈ asn-s → asn._2 < n |
⊦ ∃ n. ∀ asn. asn ∈ asn-s → asn._2 < n
| ⊦ ∃ n. ∀ asn. asn ∈ asn-s → asn._2 < n |
∃ n. ∀ asn. asn ∈ asn-s0 → asn._2 < n ⊦ ∃ n. ∀ asn0. asn0 ∈ asn-s0 ++ asn → asn0._2 < n
Used simplifier rules: Set('a) generated by ∅, ++;; ⊦ ¬ a ∈ ∅; (s)
| ∃ n. ∀ asn. asn ∈ asn-s0 → asn._2 < n ⊦ ∃ n. ∀ asn0. asn0 ∈ asn-s0 ++ asn → asn0._2 < n |
∀ asn. asn ∈ asn-s0 → asn._2 < n ⊦ ∃ n0. ∀ asn0. asn0 = asn ∨ asn0 ∈ asn-s0 → asn0._2 < n0
Used simplifier rules: ⊦ a ∈ s ++ b ↔ a = b ∨ a ∈ s; (s)
| ∀ asn. asn ∈ asn-s0 → asn._2 < n ⊦ ∃ n0. ∀ asn0. asn0 = asn ∨ asn0 ∈ asn-s0 → asn0._2 < n0 |
∀ asn. asn ∈ asn-s0 → asn._2 < n ⊦ ∀ asn0. asn0 = asn ∨ asn0 ∈ asn-s0 → asn0._2 < n, ∃ n0. ∀ asn0. asn0 = asn ∨ asn0 ∈ asn-s0 → asn0._2 < n0
Used terms: n
| ∀ asn. asn ∈ asn-s0 → asn._2 < n ⊦ ∀ asn0. asn0 = asn ∨ asn0 ∈ asn-s0 → asn0._2 < n, ∃ n0. ∀ asn0. asn0 = asn ∨ asn0 ∈ asn-s0 → asn0._2 < n0 |
n ≤ asn0._2, ∀ asn. asn ∈ asn-s0 → asn._2 < n, asn0 = asn ∨ asn0 ∈ asn-s0 ⊦ ∃ n0. ∀ asn0. asn0 = asn ∨ asn0 ∈ asn-s0 → asn0._2 < n0
Used simplifier rules: ⊦ m < n ↔ ¬ n ≤ m; (ss)
| n ≤ asn0._2, ∀ asn. asn ∈ asn-s0 → asn._2 < n, asn0 = asn ∨ asn0 ∈ asn-s0 ⊦ ∃ n0. ∀ asn0. asn0 = asn ∨ asn0 ∈ asn-s0 → asn0._2 < n0 |
asn0 = (as, n0), n ≤ n0, ∀ asn. asn ∈ asn-s0 → asn._2 < n, asn0 = asn ∨ asn0 ∈ asn-s0 ⊦ ∃ n0. ∀ asn0. asn0 = asn ∨ asn0 ∈ asn-s0 → asn0._2 < n0
Used terms: as, n0
| asn0 = (as, n0), n ≤ n0, ∀ asn. asn ∈ asn-s0 → asn._2 < n, asn0 = asn ∨ asn0 ∈ asn-s0 ⊦ ∃ n0. ∀ asn0. asn0 = asn ∨ asn0 ∈ asn-s0 → asn0._2 < n0 |
n ≤ n0, ∀ asn. asn ∈ asn-s0 → asn._2 < n, (as, n0) = asn ∨ (as, n0) ∈ asn-s0 ⊦ ∃ n0. ∀ asn0. asn0 = asn ∨ asn0 ∈ asn-s0 → asn0._2 < n0
| n ≤ n0, ∀ asn. asn ∈ asn-s0 → asn._2 < n, (as, n0) = asn ∨ (as, n0) ∈ asn-s0 ⊦ ∃ n0. ∀ asn0. asn0 = asn ∨ asn0 ∈ asn-s0 → asn0._2 < n0 |
n ≤ n0, ∀ asn. asn ∈ asn-s0 → asn._2 < n, (as, n0) = asn ∨ (as, n0) ∈ asn-s0 ⊦ ∀ asn0. asn0 = asn ∨ asn0 ∈ asn-s0 → asn0._2 < n0 + 1
Used terms: n0 + 1
| n ≤ n0, ∀ asn. asn ∈ asn-s0 → asn._2 < n, (as, n0) = asn ∨ (as, n0) ∈ asn-s0 ⊦ ∀ asn0. asn0 = asn ∨ asn0 ∈ asn-s0 → asn0._2 < n0 + 1 |
n < asn0._2, n0 < asn0._2, n ≤ n0, ∀ asn. asn ∈ asn-s0 → asn._2 < n, (as, n0) = asn ∨ (as, n0) ∈ asn-s0, asn0 = asn ∨ asn0 ∈ asn-s0 ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m < n + 1 ↔ ¬ n < m; (s)
| n < asn0._2, n0 < asn0._2, n ≤ n0, ∀ asn. asn ∈ asn-s0 → asn._2 < n, (as, n0) = asn ∨ (as, n0) ∈ asn-s0, asn0 = asn ∨ asn0 ∈ asn-s0 ⊦ |
asn0 = (as0, n1), n0 < n1, n < n1, n ≤ n0, ∀ asn. asn ∈ asn-s0 → asn._2 < n, asn0 = asn ∨ asn0 ∈ asn-s0, (as, n0) = asn ∨ (as, n0) ∈ asn-s0 ⊦
Used terms: as0, n1
| asn0 = (as0, n1), n0 < n1, n < n1, n ≤ n0, ∀ asn. asn ∈ asn-s0 → asn._2 < n, asn0 = asn ∨ asn0 ∈ asn-s0, (as, n0) = asn ∨ (as, n0) ∈ asn-s0 ⊦ |
n < n1, n0 < n1, n ≤ n0, ∀ asn. asn ∈ asn-s0 → asn._2 < n, (as0, n1) = asn ∨ (as0, n1) ∈ asn-s0, (as, n0) = asn ∨ (as, n0) ∈ asn-s0 ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| n < n1, n0 < n1, n ≤ n0, ∀ asn. asn ∈ asn-s0 → asn._2 < n, (as0, n1) = asn ∨ (as0, n1) ∈ asn-s0, (as, n0) = asn ∨ (as, n0) ∈ asn-s0 ⊦ |
(as0, n1) = asn, n0 < n1, n < n1, n ≤ n0, ∀ asn. asn ∈ asn-s0 → asn._2 < n, (as, n0) = asn ∨ (as, n0) ∈ asn-s0 ⊦
n0 < n1, n < n1, (as0, n1) ∈ asn-s0, n ≤ n0, ∀ asn. asn ∈ asn-s0 → asn._2 < n, (as, n0) = asn ∨ (as, n0) ∈ asn-s0 ⊦
| (as0, n1) = asn, n0 < n1, n < n1, n ≤ n0, ∀ asn. asn ∈ asn-s0 → asn._2 < n, (as, n0) = asn ∨ (as, n0) ∈ asn-s0 ⊦ |
# asn-s0 ≠ 0, (as, n0) ≠ (as0, n1), asn-s0 ≠ ∅, n < n1, n0 < n1, (as, n0) ∈ asn-s0, n ≤ n0, ∀ asn. asn ∈ asn-s0 → asn._2 < n ⊦
Used simplifier rules: size-zero-01: ⊦ s ≠ ∅ → # s ≠ 0; (forward) from specification set-basic ne-01: ⊦ a ∈ s → s ≠ ∅; (forward) from specification set-basic ⊦ ¬ n < n; (s) lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic
| # asn-s0 ≠ 0, (as, n0) ≠ (as0, n1), asn-s0 ≠ ∅, n < n1, n0 < n1, (as, n0) ∈ asn-s0, n ≤ n0, ∀ asn. asn ∈ asn-s0 → asn._2 < n ⊦ |
Used simplifier rules: ⊦ m ≤ n → (n < m ↔ false); (s) Used terms: (as, n0)
| n0 < n1, n < n1, (as0, n1) ∈ asn-s0, n ≤ n0, ∀ asn. asn ∈ asn-s0 → asn._2 < n, (as, n0) = asn ∨ (as, n0) ∈ asn-s0 ⊦ |
# asn-s0 ≠ 0, asn-s0 ≠ ∅, n0 < n1, n < n1, (as0, n1) ∈ asn-s0, n ≤ n0, ∀ asn. asn ∈ asn-s0 → asn._2 < n, (as, n0) = asn ∨ (as, n0) ∈ asn-s0 ⊦
Used simplifier rules: size-zero-01: ⊦ s ≠ ∅ → # s ≠ 0; (forward) from specification set-basic ne-01: ⊦ a ∈ s → s ≠ ∅; (forward) from specification set-basic
| # asn-s0 ≠ 0, asn-s0 ≠ ∅, n0 < n1, n < n1, (as0, n1) ∈ asn-s0, n ≤ n0, ∀ asn. asn ∈ asn-s0 → asn._2 < n, (as, n0) = asn ∨ (as, n0) ∈ asn-s0 ⊦ |
Used simplifier rules: ⊦ m < n → ¬ n < m; (s) Used terms: (as0, n1)
| ⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ finroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ |
⊦ finroot(g) ↔ (∃ s. ∀ a. isroot(g)(a) ↔ a ∈ s)
⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ s. ¬ (∀ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ↔ a ∈ s) ⊦
Used terms: (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))
| ⊦ finroot(g) ↔ (∃ s. ∀ a. isroot(g)(a) ↔ a ∈ s) |
| ⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ s. ¬ (∀ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ↔ a ∈ s) ⊦ |
⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), cstart(csf(0)) → cINV(csf(0)), ∀ s. ¬ (∀ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ↔ a ∈ s), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦
Used terms: csf(0)
| ⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), cstart(csf(0)) → cINV(csf(0)), ∀ s. ¬ (∀ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ↔ a ∈ s), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ |
⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ s. ¬ (∀ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ↔ a ∈ s) ⊦
| ⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ s. ¬ (∀ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ↔ a ∈ s) ⊦ |
⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ s. ¬ (∀ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ↔ a ∈ s), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ ass. ∃ asn-s. (∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s) ∧ (∀ asn. asn ∈ asn-s → asn._2 = 0) ⊦
⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ s. ¬ (∀ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ↔ a ∈ s), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ ∀ ass. ∃ asn-s. (∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s) ∧ (∀ asn. asn ∈ asn-s → asn._2 = 0)
Used formulas: ∀ ass. ∃ asn-s. (∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s) ∧ (∀ asn. asn ∈ asn-s → asn._2 = 0)
| ⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ s. ¬ (∀ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ↔ a ∈ s), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ ass. ∃ asn-s. (∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s) ∧ (∀ asn. asn ∈ asn-s → asn._2 = 0) ⊦ |
⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), cstart(csf(0)) → (∃ ass. ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass), ∀ ass. ∃ asn-s. (∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s) ∧ (∀ asn. asn ∈ asn-s → asn._2 = 0), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ s. ¬ (∀ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ↔ a ∈ s) ⊦
Used terms: csf(0)
| ⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), cstart(csf(0)) → (∃ ass. ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass), ∀ ass. ∃ asn-s. (∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s) ∧ (∀ asn. asn ∈ asn-s → asn._2 = 0), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ s. ¬ (∀ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ↔ a ∈ s) ⊦ |
⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ s. ¬ (∀ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ↔ a ∈ s), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ ass. ∃ asn-s. (∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s) ∧ (∀ asn. asn ∈ asn-s → asn._2 = 0), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass ⊦
| ⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ s. ¬ (∀ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ↔ a ∈ s), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ ass. ∃ asn-s. (∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s) ∧ (∀ asn. asn ∈ asn-s → asn._2 = 0), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass ⊦ |
⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ s. ¬ (∀ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ↔ a ∈ s), ∃ asn-s. (∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s) ∧ (∀ asn. asn ∈ asn-s → asn._2 = 0) ⊦
Used terms: ass
| ⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ s. ¬ (∀ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ↔ a ∈ s), ∃ asn-s. (∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s) ∧ (∀ asn. asn ∈ asn-s → asn._2 = 0) ⊦ |
⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s, ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ s. ¬ (∀ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ↔ a ∈ s), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass ⊦
| ⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s, ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ s. ¬ (∀ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ↔ a ∈ s), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass ⊦ |
⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s ⊦ ∀ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ↔ a ∈ asn-s
Used terms: asn-s
| ⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s ⊦ ∀ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ↔ a ∈ asn-s |
⌜ef⌝ = cext !(⌜caf⌝ ), ¬ ( isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn) ↔ asn ∈ asn-s), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s, ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass ⊦
| ⌜ef⌝ = cext !(⌜caf⌝ ), ¬ ( isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn) ↔ asn ∈ asn-s), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s, ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass ⊦ |
⊦ isroot(g)(b) ↔ dom(g)(b) ∧ (∀ a. ¬ edge(g)(a, b))
⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s ⊦ dom ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, asn)) ↔ asn ∈ asn-s
Used terms: (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1)), asn
| ⊦ isroot(g)(b) ↔ dom(g)(b) ∧ (∀ a. ¬ edge(g)(a, b)) |
| ⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s ⊦ dom ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, asn)) ↔ asn ∈ asn-s |
⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s, ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass ⊦ t(csf(asn._2), asn._1) ∧ aINV(asn._1) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, asn)) ↔ asn ∈ asn-s
Used simplifier rules: ⊦ dom(vs × es) = vs; (s)
| ⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s, ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass ⊦ t(csf(asn._2), asn._1) ∧ aINV(asn._1) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, asn)) ↔ asn ∈ asn-s |
asn = (as, n), ⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s ⊦ t(csf(n), as) ∧ aINV(as) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, asn)) ↔ asn ∈ asn-s
Used terms: as, n
| asn = (as, n), ⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s ⊦ t(csf(n), as) ∧ aINV(as) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, asn)) ↔ asn ∈ asn-s |
⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s, ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass ⊦ t(csf(n), as) ∧ aINV(as) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n))) ↔ (as, n) ∈ asn-s
| ⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s, ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass ⊦ t(csf(n), as) ∧ aINV(as) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n))) ↔ (as, n) ∈ asn-s |
t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s ⊦ t(csf(n), as) ∧ aINV(as) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n))) ↔ (as, n) ∈ asn-s
Used terms: as
| t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s ⊦ t(csf(n), as) ∧ aINV(as) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n))) ↔ (as, n) ∈ asn-s |
t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, as ∈ ass ↔ (as, 0) ∈ asn-s, ⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ t(csf(n), as) ∧ aINV(as) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n))) ↔ (as, n) ∈ asn-s
Used terms: as
| t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, as ∈ ass ↔ (as, 0) ∈ asn-s, ⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ t(csf(n), as) ∧ aINV(as) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n))) ↔ (as, n) ∈ asn-s |
as ∈ ass ↔ (as, 0) ∈ asn-s, t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, n = 0, ⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ asn. asn ∈ asn-s → asn._2 = 0 ⊦ t(csf(n), as) ∧ aINV(as) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n))) ↔ (as, n) ∈ asn-s
as ∈ ass ↔ (as, 0) ∈ asn-s, t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ⌜ef⌝ = cext !(⌜caf⌝ ), n ≠ 0, cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ asn. asn ∈ asn-s → asn._2 = 0 ⊦ t(csf(n), as) ∧ aINV(as) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n))) ↔ (as, n) ∈ asn-s
Used formulas: n = 0
| as ∈ ass ↔ (as, 0) ∈ asn-s, t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, n = 0, ⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ asn. asn ∈ asn-s → asn._2 = 0 ⊦ t(csf(n), as) ∧ aINV(as) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n))) ↔ (as, n) ∈ asn-s |
t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, as ∈ ass ↔ (as, 0) ∈ asn-s, ⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ t(csf(0), as) ∧ aINV(as) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, 0))) ↔ as ∈ ass
| t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, as ∈ ass ↔ (as, 0) ∈ asn-s, ⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ t(csf(0), as) ∧ aINV(as) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, 0))) ↔ as ∈ ass |
Used simplifier rules: ⊦ edge(vs × es)(a, b) ↔ es(a, b) ∧ vs(a) ∧ vs(b); (ws) ⊦ m + 1 ≠ 0; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic
| as ∈ ass ↔ (as, 0) ∈ asn-s, t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ⌜ef⌝ = cext !(⌜caf⌝ ), n ≠ 0, cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ asn. asn ∈ asn-s → asn._2 = 0 ⊦ t(csf(n), as) ∧ aINV(as) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n))) ↔ (as, n) ∈ asn-s |
t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, as ∈ ass ↔ (as, 0) ∈ asn-s, ⌜ef⌝ = cext !(⌜caf⌝ ), n ≠ 0, cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ csf(n - 1) = csl.last) → cINV(csf(n - 1)), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)) ⊦ t(csf(n), as) ∧ aINV(as) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n))) ↔ (as, n) ∈ asn-s
Used terms: csf(n - 1)
| t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, as ∈ ass ↔ (as, 0) ∈ asn-s, ⌜ef⌝ = cext !(⌜caf⌝ ), n ≠ 0, cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ csf(n - 1) = csl.last) → cINV(csf(n - 1)), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)) ⊦ t(csf(n), as) ∧ aINV(as) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n))) ↔ (as, n) ∈ asn-s |
as ∈ ass ↔ (as, 0) ∈ asn-s, t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, n = n0 + 1, ⌜ef⌝ = cext !(⌜caf⌝ ), n ≠ 0, cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ csf(n0) = csl.last) → cINV(csf(n0)), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ asn. asn ∈ asn-s → asn._2 = 0 ⊦ t(csf(n), as) ∧ aINV(as) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n))) ↔ (as, n) ∈ asn-s
Used simplifier rules: n ≠ 0 ⊦ m = n - 1 ↔ n = m + 1; (elim) Used terms: n, n0
| as ∈ ass ↔ (as, 0) ∈ asn-s, t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, n = n0 + 1, ⌜ef⌝ = cext !(⌜caf⌝ ), n ≠ 0, cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ csf(n0) = csl.last) → cINV(csf(n0)), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ asn. asn ∈ asn-s → asn._2 = 0 ⊦ t(csf(n), as) ∧ aINV(as) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n))) ↔ (as, n) ∈ asn-s |
t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, as ∈ ass ↔ (as, 0) ∈ asn-s, ⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ csf(n0) = csl.last) → cINV(csf(n0)), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)) ⊦ t(csf(n0 + 1), as) ∧ aINV(as) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 + 1))) ↔ (as, n0 + 1) ∈ asn-s
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m + 1 ≠ 0; (s)
| t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, as ∈ ass ↔ (as, 0) ∈ asn-s, ⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ csf(n0) = csl.last) → cINV(csf(n0)), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)) ⊦ t(csf(n0 + 1), as) ∧ aINV(as) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 + 1))) ↔ (as, n0 + 1) ∈ asn-s |
as ∈ ass ↔ (as, 0) ∈ asn-s, t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ asn. asn ∈ asn-s → asn._2 = 0 ⊦ t(csf(n0 + 1), as) ∧ aINV(as) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 + 1))) ↔ (as, n0 + 1) ∈ asn-s, ∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ csf(n0) = csl.last
as ∈ ass ↔ (as, 0) ∈ asn-s, t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cINV(csf(n0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ asn. asn ∈ asn-s → asn._2 = 0 ⊦ t(csf(n0 + 1), as) ∧ aINV(as) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 + 1))) ↔ (as, n0 + 1) ∈ asn-s
| as ∈ ass ↔ (as, 0) ∈ asn-s, t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ asn. asn ∈ asn-s → asn._2 = 0 ⊦ t(csf(n0 + 1), as) ∧ aINV(as) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 + 1))) ↔ (as, n0 + 1) ∈ asn-s, ∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ csf(n0) = csl.last |
t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, as ∈ ass ↔ (as, 0) ∈ asn-s, ⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)) ⊦ t(csf(n0 + 1), as) ∧ aINV(as) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 + 1))) ↔ (as, n0 + 1) ∈ asn-s, ∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ csf(n0) = csl.last
| t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, as ∈ ass ↔ (as, 0) ∈ asn-s, ⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)) ⊦ t(csf(n0 + 1), as) ∧ aINV(as) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 + 1))) ↔ (as, n0 + 1) ∈ asn-s, ∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ csf(n0) = csl.last |
as ∈ ass ↔ (as, 0) ∈ asn-s, t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), cINV(csf(n0)) → (∃ as. t(csf(n0), as) ∧ aINV(as)), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ asn. asn ∈ asn-s → asn._2 = 0 ⊦ t(csf(n0 + 1), as) ∧ aINV(as) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 + 1))) ↔ (as, n0 + 1) ∈ asn-s, ∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ csf(n0) = csl.last
Used terms: csf(n0)
| as ∈ ass ↔ (as, 0) ∈ asn-s, t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), cINV(csf(n0)) → (∃ as. t(csf(n0), as) ∧ aINV(as)), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ asn. asn ∈ asn-s → asn._2 = 0 ⊦ t(csf(n0 + 1), as) ∧ aINV(as) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 + 1))) ↔ (as, n0 + 1) ∈ asn-s, ∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ csf(n0) = csl.last |
t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, as ∈ ass ↔ (as, 0) ∈ asn-s, ⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), cINV(csf(n0)) → t(csf(n0), as0) ∧ aINV(as0), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)) ⊦ t(csf(n0 + 1), as) ∧ aINV(as) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 + 1))) ↔ (as, n0 + 1) ∈ asn-s, ∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ csf(n0) = csl.last
| t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, as ∈ ass ↔ (as, 0) ∈ asn-s, ⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), cINV(csf(n0)) → t(csf(n0), as0) ∧ aINV(as0), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)) ⊦ t(csf(n0 + 1), as) ∧ aINV(as) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 + 1))) ↔ (as, n0 + 1) ∈ asn-s, ∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ csf(n0) = csl.last |
as ∈ ass ↔ (as, 0) ∈ asn-s, t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), cINV(csf(n0)) → t(csf(n0), as0) ∧ aINV(as0), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ asn. asn ∈ asn-s → asn._2 = 0 ⊦ t(csf(n0 + 1), as) ∧ aINV(as) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 + 1))) ↔ (as, n0 + 1) ∈ asn-s, frag*(IOAut(cstart, cstep, cext))(csf.take(n0 + 1), caf.take(n0)) ∧ cstart(csf.take(n0 + 1)[0]) ∧ csf(n0) = (csf.take(n0 + 1)).last
Used terms: csf.take(n0 + 1), caf.take(n0)
| as ∈ ass ↔ (as, 0) ∈ asn-s, t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), cINV(csf(n0)) → t(csf(n0), as0) ∧ aINV(as0), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ asn. asn ∈ asn-s → asn._2 = 0 ⊦ t(csf(n0 + 1), as) ∧ aINV(as) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 + 1))) ↔ (as, n0 + 1) ∈ asn-s, frag*(IOAut(cstart, cstep, cext))(csf.take(n0 + 1), caf.take(n0)) ∧ cstart(csf.take(n0 + 1)[0]) ∧ csf(n0) = (csf.take(n0 + 1)).last |
t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, as ∈ ass ↔ (as, 0) ∈ asn-s, ⌜ef⌝ = cext !(⌜caf⌝ ), csf(n0) ≠ (csf.take(n0 + 1)).last, cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), cINV(csf(n0)) → t(csf(n0), as0) ∧ aINV(as0), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)) ⊦ t(csf(n0 + 1), as) ∧ aINV(as) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 + 1))) ↔ (as, n0 + 1) ∈ asn-s
Used simplifier rules: m < n ⊦ nf.take(n)[m] = nf(m); (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m + 1 ≠ 0; (s) ⊦ 0 < m ↔ m ≠ 0; (s) ⊦ fragω(IOAut(start, step, ext))(sf, af) → (frag*(IOAut(start, step, ext))(sf.take(n + 1), af.take(n)) ↔ true); (ss)
| t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, as ∈ ass ↔ (as, 0) ∈ asn-s, ⌜ef⌝ = cext !(⌜caf⌝ ), csf(n0) ≠ (csf.take(n0 + 1)).last, cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), cINV(csf(n0)) → t(csf(n0), as0) ∧ aINV(as0), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)) ⊦ t(csf(n0 + 1), as) ∧ aINV(as) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 + 1))) ↔ (as, n0 + 1) ∈ asn-s |
⊦ nf.take(m + 1) = nf.take(m) + nf(m) '
Used simplifier rules: ⊦ (x + a ').last = a; (s) a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: csf, n0
| ⊦ nf.take(m + 1) = nf.take(m) + nf(m) ' |
| as ∈ ass ↔ (as, 0) ∈ asn-s, t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cINV(csf(n0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ asn. asn ∈ asn-s → asn._2 = 0 ⊦ t(csf(n0 + 1), as) ∧ aINV(as) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 + 1))) ↔ (as, n0 + 1) ∈ asn-s |
⊦ fragω(ioa)(sf, af) ↔ (∀ n. ioa.step(sf(n), af(n), sf(n +1)))
t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, as ∈ ass ↔ (as, 0) ∈ asn-s, ⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(n0)), cINV(csf(0)), cstart(csf(0)), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ n. IOAut(cstart, cstep, cext).step(csf(n), caf(n), csf(n +1)) ⊦ t(csf(n0 + 1), as) ∧ aINV(as) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 + 1))) ↔ (as, n0 + 1) ∈ asn-s
Used terms: IOAut(cstart, cstep, cext), csf, caf
| ⊦ fragω(ioa)(sf, af) ↔ (∀ n. ioa.step(sf(n), af(n), sf(n +1))) |
| t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, as ∈ ass ↔ (as, 0) ∈ asn-s, ⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(n0)), cINV(csf(0)), cstart(csf(0)), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ n. IOAut(cstart, cstep, cext).step(csf(n), caf(n), csf(n +1)) ⊦ t(csf(n0 + 1), as) ∧ aINV(as) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 + 1))) ↔ (as, n0 + 1) ∈ asn-s |
as ∈ ass ↔ (as, 0) ∈ asn-s, t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cINV(csf(n0)), cstart(csf(0)), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ n. cstep(csf(n), caf(n), csf(n + 1)) ⊦ t(csf(n0 + 1), as) ∧ aINV(as) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 + 1))) ↔ (as, n0 + 1) ∈ asn-s
Used simplifier rules: ⊦ IOAut(start, step, ext).step = step; (s) ⊦ m +1 = m + 1; (s)
| as ∈ ass ↔ (as, 0) ∈ asn-s, t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cINV(csf(n0)), cstart(csf(0)), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ n. cstep(csf(n), caf(n), csf(n + 1)) ⊦ t(csf(n0 + 1), as) ∧ aINV(as) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 + 1))) ↔ (as, n0 + 1) ∈ asn-s |
t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, as ∈ ass ↔ (as, 0) ∈ asn-s, ⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(n0)), cINV(csf(0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)) ⊦ t(csf(n0 + 1), as) ∧ aINV(as) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 + 1))) ↔ (as, n0 + 1) ∈ asn-s
Used terms: n0
| t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, as ∈ ass ↔ (as, 0) ∈ asn-s, ⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(n0)), cINV(csf(0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)) ⊦ t(csf(n0 + 1), as) ∧ aINV(as) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 + 1))) ↔ (as, n0 + 1) ∈ asn-s |
as ∈ ass ↔ (as, 0) ∈ asn-s, t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), ¬ traceω(IOAut(astart, astep, aext))(ef), cINV(csf(n0)) ∧ cstep(csf(n0), caf(n0), csf(n0 + 1)) ∧ t(csf(n0 + 1), as) ∧ aINV(as) → (∃ as1. aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as) ∧ t(csf(n0), as1)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ asn. asn ∈ asn-s → asn._2 = 0 ⊦ t(csf(n0 + 1), as) ∧ aINV(as) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 + 1))) ↔ (as, n0 + 1) ∈ asn-s
Used terms: csf(n0), caf(n0), csf(n0 + 1), as
| as ∈ ass ↔ (as, 0) ∈ asn-s, t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), ¬ traceω(IOAut(astart, astep, aext))(ef), cINV(csf(n0)) ∧ cstep(csf(n0), caf(n0), csf(n0 + 1)) ∧ t(csf(n0 + 1), as) ∧ aINV(as) → (∃ as1. aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as) ∧ t(csf(n0), as1)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ asn. asn ∈ asn-s → asn._2 = 0 ⊦ t(csf(n0 + 1), as) ∧ aINV(as) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 + 1))) ↔ (as, n0 + 1) ∈ asn-s |
t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, as ∈ ass ↔ (as, 0) ∈ asn-s, ⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(n0)), cINV(csf(0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), ¬ traceω(IOAut(astart, astep, aext))(ef), t(csf(n0 + 1), as) ∧ aINV(as) → aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as) ∧ t(csf(n0), as1), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as) ⊦ t(csf(n0 + 1), as) ∧ aINV(as) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 + 1))) ↔ (as, n0 + 1) ∈ asn-s
| t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, as ∈ ass ↔ (as, 0) ∈ asn-s, ⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(n0)), cINV(csf(0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), ¬ traceω(IOAut(astart, astep, aext))(ef), t(csf(n0 + 1), as) ∧ aINV(as) → aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as) ∧ t(csf(n0), as1), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as) ⊦ t(csf(n0 + 1), as) ∧ aINV(as) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 + 1))) ↔ (as, n0 + 1) ∈ asn-s |
as ∈ ass ↔ (as, 0) ∈ asn-s, t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cINV(csf(0)), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), t(csf(n0 + 1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ¬ (as, n0 + 1) ∈ asn-s, t(csf(n0 + 1), as) ∧ aINV(as) → aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as) ∧ t(csf(n0), as1), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 + 1)) ⊦
as ∈ ass ↔ (as, 0) ∈ asn-s, t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), (as, n0 + 1) ∈ asn-s, ¬ traceω(IOAut(astart, astep, aext))(ef), t(csf(n0 + 1), as) ∧ aINV(as) → aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as) ∧ t(csf(n0), as1), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ asn. asn ∈ asn-s → asn._2 = 0 ⊦ t(csf(n0 + 1), as) ∧ aINV(as) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 + 1)))
| as ∈ ass ↔ (as, 0) ∈ asn-s, t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cINV(csf(0)), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), t(csf(n0 + 1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ¬ (as, n0 + 1) ∈ asn-s, t(csf(n0 + 1), as) ∧ aINV(as) → aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as) ∧ t(csf(n0), as1), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 + 1)) ⊦ |
as ∈ ass ↔ (as, 0) ∈ asn-s, t(csf(0), as) ↔ as ∈ ass, ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), aINV(as1), cINV(csf(n0)), cINV(csf(0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0 + 1), as), t(csf(n0), as1), ¬ traceω(IOAut(astart, astep, aext))(ef), ¬ (as, n0 + 1) ∈ asn-s, ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 + 1)), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as) ⊦
| as ∈ ass ↔ (as, 0) ∈ asn-s, t(csf(0), as) ↔ as ∈ ass, ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), aINV(as1), cINV(csf(n0)), cINV(csf(0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0 + 1), as), t(csf(n0), as1), ¬ traceω(IOAut(astart, astep, aext))(ef), ¬ (as, n0 + 1) ∈ asn-s, ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 + 1)), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as) ⊦ |
t(csf(0), as) ↔ as ∈ ass, as ∈ ass ↔ (as, 0) ∈ asn-s, ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as1), aINV(as), cINV(csf(0)), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0), as1), t(csf(n0 + 1), as), ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((as1, n0), (as, n0 + 1)), ¬ traceω(IOAut(astart, astep, aext))(ef), ¬ (as, n0 + 1) ∈ asn-s, ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ asn. asn ∈ asn-s → asn._2 = 0 ⊦
Used terms: (as1, n0)
| t(csf(0), as) ↔ as ∈ ass, as ∈ ass ↔ (as, 0) ∈ asn-s, ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as1), aINV(as), cINV(csf(0)), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0), as1), t(csf(n0 + 1), as), ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((as1, n0), (as, n0 + 1)), ¬ traceω(IOAut(astart, astep, aext))(ef), ¬ (as, n0 + 1) ∈ asn-s, ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ asn. asn ∈ asn-s → asn._2 = 0 ⊦ |
⊦ edge(vs × es)(a, b) ↔ es(a, b) ∧ vs(a) ∧ vs(b)
Used simplifier rules: ⊦ m + n = m + n0 ↔ n = n0; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1), λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1), (as1, n0), (as, n0 + 1)
| ⊦ edge(vs × es)(a, b) ↔ es(a, b) ∧ vs(a) ∧ vs(b) |
| as ∈ ass ↔ (as, 0) ∈ asn-s, t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), (as, n0 + 1) ∈ asn-s, ¬ traceω(IOAut(astart, astep, aext))(ef), t(csf(n0 + 1), as) ∧ aINV(as) → aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as) ∧ t(csf(n0), as1), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ asn. asn ∈ asn-s → asn._2 = 0 ⊦ t(csf(n0 + 1), as) ∧ aINV(as) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 + 1))) |
as ∈ ass ↔ (as, 0) ∈ asn-s, t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ⌜ef⌝ = cext !(⌜caf⌝ ), # asn-s ≠ 0, asn-s ≠ ∅, cINV(csf(0)), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), (as, n0 + 1) ∈ asn-s, ¬ traceω(IOAut(astart, astep, aext))(ef), t(csf(n0 + 1), as) ∧ aINV(as) → aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as) ∧ t(csf(n0), as1), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ asn. asn ∈ asn-s → asn._2 = 0 ⊦ t(csf(n0 + 1), as) ∧ aINV(as) ∧ ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn, (as, n0 + 1))
Used simplifier rules: size-zero-01: ⊦ s ≠ ∅ → # s ≠ 0; (forward) from specification set-basic ne-01: ⊦ a ∈ s → s ≠ ∅; (forward) from specification set-basic
| as ∈ ass ↔ (as, 0) ∈ asn-s, t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ⌜ef⌝ = cext !(⌜caf⌝ ), # asn-s ≠ 0, asn-s ≠ ∅, cINV(csf(0)), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), (as, n0 + 1) ∈ asn-s, ¬ traceω(IOAut(astart, astep, aext))(ef), t(csf(n0 + 1), as) ∧ aINV(as) → aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as) ∧ t(csf(n0), as1), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ asn. asn ∈ asn-s → asn._2 = 0 ⊦ t(csf(n0 + 1), as) ∧ aINV(as) ∧ ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn, (as, n0 + 1)) |
Used simplifier rules: ⊦ m + 1 ≠ 0; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: (as, n0 + 1)
| ⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ s. ¬ (∀ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ↔ a ∈ s), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ ∀ ass. ∃ asn-s. (∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s) ∧ (∀ asn. asn ∈ asn-s → asn._2 = 0) |
⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ s. ¬ (∀ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ↔ a ∈ s) ⊦ ∃ asn-s. (∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s) ∧ (∀ asn. asn ∈ asn-s → asn._2 = 0)
| ⌜ef⌝ = cext !(⌜caf⌝ ), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ s. ¬ (∀ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ↔ a ∈ s) ⊦ ∃ asn-s. (∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s) ∧ (∀ asn. asn ∈ asn-s → asn._2 = 0) |
⊦ ∃ asn-s. (∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s) ∧ (∀ asn. asn ∈ asn-s → asn._2 = 0)
| ⊦ ∃ asn-s. (∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s) ∧ (∀ asn. asn ∈ asn-s → asn._2 = 0) |
⊦ ∃ asn-s. (∀ as. as ∈ ∅ ↔ (as, 0) ∈ asn-s) ∧ (∀ asn. asn ∈ asn-s → asn._2 = 0)
∃ asn-s. (∀ as. as ∈ ass0 ↔ (as, 0) ∈ asn-s) ∧ (∀ asn. asn ∈ asn-s → asn._2 = 0) ⊦ ∃ asn-s. (∀ as0. as0 ∈ ass0 ++ as ↔ (as0, 0) ∈ asn-s) ∧ (∀ asn. asn ∈ asn-s → asn._2 = 0)
Used simplifier rules: Set('a) generated by ∅, ++;;
| ⊦ ∃ asn-s. (∀ as. as ∈ ∅ ↔ (as, 0) ∈ asn-s) ∧ (∀ asn. asn ∈ asn-s → asn._2 = 0) |
⊦ ∃ asn-s. (∀ as. ¬ (as, 0) ∈ asn-s) ∧ (∀ asn. asn ∈ asn-s → asn._2 = 0)
Used simplifier rules: ⊦ ¬ a ∈ ∅; (s)
| ⊦ ∃ asn-s. (∀ as. ¬ (as, 0) ∈ asn-s) ∧ (∀ asn. asn ∈ asn-s → asn._2 = 0) |
Used simplifier rules: ⊦ ¬ a ∈ ∅; (s) Used terms: ∅
| ∃ asn-s. (∀ as. as ∈ ass0 ↔ (as, 0) ∈ asn-s) ∧ (∀ asn. asn ∈ asn-s → asn._2 = 0) ⊦ ∃ asn-s. (∀ as0. as0 ∈ ass0 ++ as ↔ (as0, 0) ∈ asn-s) ∧ (∀ asn. asn ∈ asn-s → asn._2 = 0) |
∀ as. as ∈ ass0 ↔ (as, 0) ∈ asn-s, ∀ asn. asn ∈ asn-s → asn._2 = 0 ⊦ ∃ asn-s0. (∀ as0. as0 = as ∨ as0 ∈ ass0 ↔ (as0, 0) ∈ asn-s0) ∧ (∀ asn. asn ∈ asn-s0 → asn._2 = 0)
Used simplifier rules: ⊦ a ∈ s ++ b ↔ a = b ∨ a ∈ s; (s)
| ∀ as. as ∈ ass0 ↔ (as, 0) ∈ asn-s, ∀ asn. asn ∈ asn-s → asn._2 = 0 ⊦ ∃ asn-s0. (∀ as0. as0 = as ∨ as0 ∈ ass0 ↔ (as0, 0) ∈ asn-s0) ∧ (∀ asn. asn ∈ asn-s0 → asn._2 = 0) |
∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ as. as ∈ ass0 ↔ (as, 0) ∈ asn-s ⊦ (∀ as0. as0 = as ∨ as0 ∈ ass0 ↔ (as0, 0) ∈ asn-s ++ (as, 0)) ∧ (∀ asn. asn ∈ asn-s ++ (as, 0) → asn._2 = 0)
Used terms: asn-s ++ (as, 0)
| ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ as. as ∈ ass0 ↔ (as, 0) ∈ asn-s ⊦ (∀ as0. as0 = as ∨ as0 ∈ ass0 ↔ (as0, 0) ∈ asn-s ++ (as, 0)) ∧ (∀ asn. asn ∈ asn-s ++ (as, 0) → asn._2 = 0) |
∀ as. as ∈ ass0 ↔ (as, 0) ∈ asn-s, ∀ asn. asn ∈ asn-s → asn._2 = 0 ⊦ (as0 ≠ as → (as0 ∈ ass0 ↔ (as0, 0) ∈ asn-s)) ∧ (asn = (as, 0) ∨ asn ∈ asn-s → asn._2 = 0)
Used simplifier rules: ⊦ a ∈ s ++ b ↔ a = b ∨ a ∈ s; (s)
| ∀ as. as ∈ ass0 ↔ (as, 0) ∈ asn-s, ∀ asn. asn ∈ asn-s → asn._2 = 0 ⊦ (as0 ≠ as → (as0 ∈ ass0 ↔ (as0, 0) ∈ asn-s)) ∧ (asn = (as, 0) ∨ asn ∈ asn-s → asn._2 = 0) |
asn = (as1, n), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ as. as ∈ ass0 ↔ (as, 0) ∈ asn-s ⊦ (as0 ≠ as → (as0 ∈ ass0 ↔ (as0, 0) ∈ asn-s)) ∧ (asn = (as, 0) ∨ asn ∈ asn-s → n = 0)
Used terms: as1, n
| asn = (as1, n), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ as. as ∈ ass0 ↔ (as, 0) ∈ asn-s ⊦ (as0 ≠ as → (as0 ∈ ass0 ↔ (as0, 0) ∈ asn-s)) ∧ (asn = (as, 0) ∨ asn ∈ asn-s → n = 0) |
∀ as. as ∈ ass0 ↔ (as, 0) ∈ asn-s, ∀ asn. asn ∈ asn-s → asn._2 = 0 ⊦ (as0 ≠ as → (as0 ∈ ass0 ↔ (as0, 0) ∈ asn-s)) ∧ ((as1, n) = (as, 0) ∨ (as1, n) ∈ asn-s → n = 0)
| ∀ as. as ∈ ass0 ↔ (as, 0) ∈ asn-s, ∀ asn. asn ∈ asn-s → asn._2 = 0 ⊦ (as0 ≠ as → (as0 ∈ ass0 ↔ (as0, 0) ∈ asn-s)) ∧ ((as1, n) = (as, 0) ∨ (as1, n) ∈ asn-s → n = 0) |
¬(as0 ∈ ass0 ↔ (as0, 0) ∈ asn-s), as0 ≠ as, ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ as. as ∈ ass0 ↔ (as, 0) ∈ asn-s ⊦
n ≠ 0, ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ as. as ∈ ass0 ↔ (as, 0) ∈ asn-s, (as1, n) = (as, 0) ∨ (as1, n) ∈ asn-s ⊦
| ¬(as0 ∈ ass0 ↔ (as0, 0) ∈ asn-s), as0 ≠ as, ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ as. as ∈ ass0 ↔ (as, 0) ∈ asn-s ⊦ |
Used terms: as0
| n ≠ 0, ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ as. as ∈ ass0 ↔ (as, 0) ∈ asn-s, (as1, n) = (as, 0) ∨ (as1, n) ∈ asn-s ⊦ |
# asn-s ≠ 0, (as1, n) ≠ (as, 0), asn-s ≠ ∅, n ≠ 0, (as1, n) ∈ asn-s, ∀ as. as ∈ ass0 ↔ (as, 0) ∈ asn-s, ∀ asn. asn ∈ asn-s → asn._2 = 0 ⊦
Used simplifier rules: size-zero-01: ⊦ s ≠ ∅ → # s ≠ 0; (forward) from specification set-basic ne-01: ⊦ a ∈ s → s ≠ ∅; (forward) from specification set-basic
| # asn-s ≠ 0, (as1, n) ≠ (as, 0), asn-s ≠ ∅, n ≠ 0, (as1, n) ∈ asn-s, ∀ as. as ∈ ass0 ↔ (as, 0) ∈ asn-s, ∀ asn. asn ∈ asn-s → asn._2 = 0 ⊦ |
Used terms: (as1, n)
| ⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ finout ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ |
⊦ finout(g) ↔ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s)
⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∃ a. ¬ (∃ s. ∀ b. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, b) ↔ b ∈ s) ⊦
Used terms: (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))
| ⊦ finout(g) ↔ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) |
| ⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∃ a. ¬ (∃ s. ∀ b. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, b) ↔ b ∈ s) ⊦ |
⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ ∃ s. ∀ b. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn, b) ↔ b ∈ s
| ⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ ∃ s. ∀ b. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn, b) ↔ b ∈ s |
asn = (as3, n), ⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el) ⊦ ∃ s. ∀ b. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn, b) ↔ b ∈ s
| asn = (as3, n), ⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el) ⊦ ∃ s. ∀ b. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn, b) ↔ b ∈ s |
⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ ∃ s. ∀ b. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((as3, n), b) ↔ b ∈ s
| ⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ ∃ s. ∀ b. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((as3, n), b) ↔ b ∈ s |
⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as3), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el) ⊦ ∃ s. ∀ b. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((as3, n), b) ↔ b ∈ s
⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ aINV(as3), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el) ⊦ ∃ s. ∀ b. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((as3, n), b) ↔ b ∈ s
Used formulas: aINV(as3)
| ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as3), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el) ⊦ ∃ s. ∀ b. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((as3, n), b) ↔ b ∈ s |
⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as3), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), aINV(as3) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ ∃ s. ∀ b. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((as3, n), b) ↔ b ∈ s
Used terms: as3, cext !(caf(n) ')
| ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as3), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), aINV(as3) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ ∃ s. ∀ b. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((as3, n), b) ↔ b ∈ s |
⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as3), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ as2. move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as2) ∧ aINV(as2) ↔ as2 ∈ ass ⊦ ∃ s. ∀ b. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((as3, n), b) ↔ b ∈ s
| ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as3), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ as2. move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as2) ∧ aINV(as2) ↔ as2 ∈ ass ⊦ ∃ s. ∀ b. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((as3, n), b) ↔ b ∈ s |
⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as3), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ as2. move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as2) ∧ aINV(as2) ↔ as2 ∈ ass, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∃ asn-s. ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as) ∧ aINV(as) ⊦ ∃ s. ∀ b. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((as3, n), b) ↔ b ∈ s
⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as3), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ as2. move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as2) ∧ aINV(as2) ↔ as2 ∈ ass, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ ∃ s. ∀ b. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((as3, n), b) ↔ b ∈ s, ∃ asn-s. ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as) ∧ aINV(as)
Used formulas: ∃ asn-s. ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as) ∧ aINV(as)
| ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as3), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ as2. move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as2) ∧ aINV(as2) ↔ as2 ∈ ass, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∃ asn-s. ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as) ∧ aINV(as) ⊦ ∃ s. ∀ b. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((as3, n), b) ↔ b ∈ s |
⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as3), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as) ∧ aINV(as), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ as2. move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as2) ∧ aINV(as2) ↔ as2 ∈ ass ⊦ ∃ s. ∀ b. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((as3, n), b) ↔ b ∈ s
| ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as3), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as) ∧ aINV(as), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ as2. move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as2) ∧ aINV(as2) ↔ as2 ∈ ass ⊦ ∃ s. ∀ b. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((as3, n), b) ↔ b ∈ s |
⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as3), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ as2. move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as2) ∧ aINV(as2) ↔ as2 ∈ ass, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as) ∧ aINV(as) ⊦ ∀ b. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((as3, n), b) ↔ b ∈ asn-s
Used terms: asn-s
| ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as3), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ as2. move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as2) ∧ aINV(as2) ↔ as2 ∈ ass, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as) ∧ aINV(as) ⊦ ∀ b. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((as3, n), b) ↔ b ∈ asn-s |
⌜ef⌝ = cext !(⌜caf⌝ ), ¬ ( edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((as3, n), asn) ↔ asn ∈ asn-s), aINV(as3), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as) ∧ aINV(as), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ as2. move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as2) ∧ aINV(as2) ↔ as2 ∈ ass ⊦
| ⌜ef⌝ = cext !(⌜caf⌝ ), ¬ ( edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((as3, n), asn) ↔ asn ∈ asn-s), aINV(as3), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as) ∧ aINV(as), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ as2. move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as2) ∧ aINV(as2) ↔ as2 ∈ ass ⊦ |
asn = (as1, n0), ⌜ef⌝ = cext !(⌜caf⌝ ), ¬ ( edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((as3, n), asn) ↔ asn ∈ asn-s), aINV(as3), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ as2. move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as2) ∧ aINV(as2) ↔ as2 ∈ ass, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as) ∧ aINV(as) ⊦
| asn = (as1, n0), ⌜ef⌝ = cext !(⌜caf⌝ ), ¬ ( edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((as3, n), asn) ↔ asn ∈ asn-s), aINV(as3), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ as2. move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as2) ∧ aINV(as2) ↔ as2 ∈ ass, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as) ∧ aINV(as) ⊦ |
⌜ef⌝ = cext !(⌜caf⌝ ), ¬ ( edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((as3, n), (as1, n0)) ↔ (as1, n0) ∈ asn-s), aINV(as3), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as) ∧ aINV(as), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ as2. move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as2) ∧ aINV(as2) ↔ as2 ∈ ass ⊦
| ⌜ef⌝ = cext !(⌜caf⌝ ), ¬ ( edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((as3, n), (as1, n0)) ↔ (as1, n0) ∈ asn-s), aINV(as3), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as) ∧ aINV(as), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ as2. move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as2) ∧ aINV(as2) ↔ as2 ∈ ass ⊦ |
(as1, n0) ∈ asn-s ↔ as1 ∈ ass ∧ n0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as1) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as1) ∧ aINV(as1), ⌜ef⌝ = cext !(⌜caf⌝ ), ¬ ( edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((as3, n), (as1, n0)) ↔ (as1, n0) ∈ asn-s), aINV(as3), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ as2. move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as2) ∧ aINV(as2) ↔ as2 ∈ ass, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦
Used terms: as1, n0
| (as1, n0) ∈ asn-s ↔ as1 ∈ ass ∧ n0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as1) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as1) ∧ aINV(as1), ⌜ef⌝ = cext !(⌜caf⌝ ), ¬ ( edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((as3, n), (as1, n0)) ↔ (as1, n0) ∈ asn-s), aINV(as3), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ as2. move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as2) ∧ aINV(as2) ↔ as2 ∈ ass, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ |
⊦ edge(vs × es)(a, b) ↔ es(a, b) ∧ vs(a) ∧ vs(b)
(as1, n0) ∈ asn-s ↔ as1 ∈ ass ∧ n0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as1) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as1) ∧ aINV(as1), ⌜ef⌝ = cext !(⌜caf⌝ ), ¬ ( ( aINV((as3, n)._1) ∧ aINV((as1, n0)._1) ∧ (as1, n0)._2 = (as3, n)._2 + 1 ∧ move(IOAut(astart, astep, aext))((as3, n)._1, cext !(caf((as3, n)._2) '), (as1, n0)._1)) ∧ (t(csf((as3, n)._2), (as3, n)._1) ∧ aINV((as3, n)._1)) ∧ t(csf((as1, n0)._2), (as1, n0)._1) ∧ aINV((as1, n0)._1) ↔ (as1, n0) ∈ asn-s), aINV(as3), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ as2. move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as2) ∧ aINV(as2) ↔ as2 ∈ ass ⊦
Used terms: λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1), λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1), (as3, n), (as1, n0)
| ⊦ edge(vs × es)(a, b) ↔ es(a, b) ∧ vs(a) ∧ vs(b) |
| (as1, n0) ∈ asn-s ↔ as1 ∈ ass ∧ n0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as1) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as1) ∧ aINV(as1), ⌜ef⌝ = cext !(⌜caf⌝ ), ¬ ( ( aINV((as3, n)._1) ∧ aINV((as1, n0)._1) ∧ (as1, n0)._2 = (as3, n)._2 + 1 ∧ move(IOAut(astart, astep, aext))((as3, n)._1, cext !(caf((as3, n)._2) '), (as1, n0)._1)) ∧ (t(csf((as3, n)._2), (as3, n)._1) ∧ aINV((as3, n)._1)) ∧ t(csf((as1, n0)._2), (as1, n0)._1) ∧ aINV((as1, n0)._1) ↔ (as1, n0) ∈ asn-s), aINV(as3), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ as2. move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as2) ∧ aINV(as2) ↔ as2 ∈ ass ⊦ |
(as1, n0) ∈ asn-s ↔ as1 ∈ ass ∧ n0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as1) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as1) ∧ aINV(as1), ⌜ef⌝ = cext !(⌜caf⌝ ), ¬(aINV(as1) ∧ n0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as1) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as1) ↔ (as1, n0) ∈ asn-s), aINV(as3), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ as2. move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as2) ∧ aINV(as2) ↔ as2 ∈ ass, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦
| (as1, n0) ∈ asn-s ↔ as1 ∈ ass ∧ n0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as1) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as1) ∧ aINV(as1), ⌜ef⌝ = cext !(⌜caf⌝ ), ¬(aINV(as1) ∧ n0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as1) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as1) ↔ (as1, n0) ∈ asn-s), aINV(as3), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ as2. move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as2) ∧ aINV(as2) ↔ as2 ∈ ass, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ |
(as1, n0) ∈ asn-s ↔ as1 ∈ ass ∧ n0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as1) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as1) ∧ aINV(as1), n0 = n + 1, ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as3), aINV(as1), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as1), t(csf(n), as3), t(csf(n + 1), as1), ¬ traceω(IOAut(astart, astep, aext))(ef), ¬ (as1, n0) ∈ asn-s, ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ as2. move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as2) ∧ aINV(as2) ↔ as2 ∈ ass ⊦
| (as1, n0) ∈ asn-s ↔ as1 ∈ ass ∧ n0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as1) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as1) ∧ aINV(as1), n0 = n + 1, ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as3), aINV(as1), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as1), t(csf(n), as3), t(csf(n + 1), as1), ¬ traceω(IOAut(astart, astep, aext))(ef), ¬ (as1, n0) ∈ asn-s, ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ as2. move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as2) ∧ aINV(as2) ↔ as2 ∈ ass ⊦ |
⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as1), aINV(as3), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as1), t(csf(n + 1), as1), t(csf(n), as3), ¬ traceω(IOAut(astart, astep, aext))(ef), ¬ (as1, n + 1) ∈ asn-s, ¬ as1 ∈ ass, ∀ as2. move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as2) ∧ aINV(as2) ↔ as2 ∈ ass, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦
| ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as1), aINV(as3), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as1), t(csf(n + 1), as1), t(csf(n), as3), ¬ traceω(IOAut(astart, astep, aext))(ef), ¬ (as1, n + 1) ∈ asn-s, ¬ as1 ∈ ass, ∀ as2. move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as2) ∧ aINV(as2) ↔ as2 ∈ ass, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ |
Used terms: as1
| ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as3), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ as2. move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as2) ∧ aINV(as2) ↔ as2 ∈ ass, ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ ∃ s. ∀ b. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((as3, n), b) ↔ b ∈ s, ∃ asn-s. ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as) ∧ aINV(as) |
⊦ ∃ asn-s. ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as) ∧ aINV(as)
| ⊦ ∃ asn-s. ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as) ∧ aINV(as) |
⊦ ∃ asn-s. ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ∅ ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as) ∧ aINV(as)
∀ n, astart, astep, aext, as3, cext, caf, t, csf, aINV. ∃ asn-s. ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as) ∧ aINV(as) ⊦ ∃ asn-s. ∀ as0, m0. (as0, m0) ∈ asn-s ↔ as0 ∈ ass0 ++ as ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as0) ∧ aINV(as0)
Used simplifier rules: Set('a) generated by ∅, ++;;
| ⊦ ∃ asn-s. ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ∅ ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as) ∧ aINV(as) |
⊦ ∃ asn-s. ∀ as, n0. ¬ (as, n0) ∈ asn-s
Used simplifier rules: ⊦ ¬ a ∈ ∅; (s)
| ⊦ ∃ asn-s. ∀ as, n0. ¬ (as, n0) ∈ asn-s |
Used simplifier rules: ⊦ ¬ a ∈ ∅; (s) Used terms: ∅
| ∀ n, astart, astep, aext, as3, cext, caf, t, csf, aINV. ∃ asn-s. ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as) ∧ aINV(as) ⊦ ∃ asn-s. ∀ as0, m0. (as0, m0) ∈ asn-s ↔ as0 ∈ ass0 ++ as ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as0) ∧ aINV(as0) |
∀ n, astart, astep, aext, as3, cext, caf, t, csf, aINV. ∃ asn-s. ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as) ∧ aINV(as) ⊦ ∃ asn-s. ∀ as0, n0. (as0, n0) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as0) ∧ aINV(as0)
Used simplifier rules: ⊦ a ∈ s ++ b ↔ a = b ∨ a ∈ s; (s)
| ∀ n, astart, astep, aext, as3, cext, caf, t, csf, aINV. ∃ asn-s. ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as) ∧ aINV(as) ⊦ ∃ asn-s. ∀ as0, n0. (as0, n0) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as0) ∧ aINV(as0) |
∃ asn-s. ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as) ∧ aINV(as) ⊦ ∃ asn-s. ∀ as0, n0. (as0, n0) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as0) ∧ aINV(as0)
Used terms: n, astart, astep, aext, as3, cext, caf, t, csf, aINV
| ∃ asn-s. ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as) ∧ aINV(as) ⊦ ∃ asn-s. ∀ as0, n0. (as0, n0) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as0) ∧ aINV(as0) |
∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as) ∧ aINV(as) ⊦ ∃ asn-s. ∀ as0, n0. (as0, n0) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as0) ∧ aINV(as0)
| ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as) ∧ aINV(as) ⊦ ∃ asn-s. ∀ as0, n0. (as0, n0) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as0) ∧ aINV(as0) |
∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as) ∧ aINV(as) ⊦ ∀ as0, n0. (as0, n0) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as0) ∧ aINV(as0), ∃ asn-s. ∀ as0, n0. (as0, n0) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as0) ∧ aINV(as0)
Used terms: asn-s
| ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as) ∧ aINV(as) ⊦ ∀ as0, n0. (as0, n0) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as0) ∧ aINV(as0), ∃ asn-s. ∀ as0, n0. (as0, n0) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as0) ∧ aINV(as0) |
¬ ( (as0, n0) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as0) ∧ aINV(as0)), ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as) ∧ aINV(as) ⊦ ∃ asn-s. ∀ as0, n0. (as0, n0) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as0) ∧ aINV(as0)
| ¬ ( (as0, n0) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as0) ∧ aINV(as0)), ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as) ∧ aINV(as) ⊦ ∃ asn-s. ∀ as0, n0. (as0, n0) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as0) ∧ aINV(as0) |
¬ ( (as0, n0) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as0) ∧ aINV(as0)), ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as) ∧ aINV(as) ⊦ ∀ as0, n0. (as0, n0) ∈ asn-s ++ (as, n + 1) ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as0) ∧ aINV(as0)
Used terms: asn-s ++ (as, n + 1)
| ¬ ( (as0, n0) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as0) ∧ aINV(as0)), ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as) ∧ aINV(as) ⊦ ∀ as0, n0. (as0, n0) ∈ asn-s ++ (as, n + 1) ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as0) ∧ aINV(as0) |
¬ ( (as0, n0) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as0) ∧ aINV(as0)), ¬ ( (as1, n1) = (as, n + 1) ∨ (as1, n1) ∈ asn-s ↔ (as1 = as ∨ as1 ∈ ass0) ∧ n1 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as1) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as1) ∧ aINV(as1)), ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as) ∧ aINV(as) ⊦
Used simplifier rules: ⊦ a ∈ s ++ b ↔ a = b ∨ a ∈ s; (s)
| ¬ ( (as0, n0) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as0) ∧ aINV(as0)), ¬ ( (as1, n1) = (as, n + 1) ∨ (as1, n1) ∈ asn-s ↔ (as1 = as ∨ as1 ∈ ass0) ∧ n1 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as1) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as1) ∧ aINV(as1)), ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as) ∧ aINV(as) ⊦ |
¬ ( (as0, n0) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as0) ∧ aINV(as0)), ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as) ∧ aINV(as), (as1, n1) = (as, n + 1) ∨ (as1, n1) ∈ asn-s ⊦ (as1 = as ∨ as1 ∈ ass0) ∧ n1 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as1) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as1) ∧ aINV(as1)
n1 = n + 1, (as1, n1) ≠ (as, n + 1), ¬ ( (as0, n0) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as0) ∧ aINV(as0)), aINV(as1), move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as1), t(csf(n), as3), t(csf(n + 1), as1), ¬ (as1, n1) ∈ asn-s, ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as) ∧ aINV(as), as1 = as ∨ as1 ∈ ass0 ⊦
| ¬ ( (as0, n0) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as0) ∧ aINV(as0)), ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as) ∧ aINV(as), (as1, n1) = (as, n + 1) ∨ (as1, n1) ∈ asn-s ⊦ (as1 = as ∨ as1 ∈ ass0) ∧ n1 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as1) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as1) ∧ aINV(as1) |
(as0, n0) ∈ asn-s, ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as) ∧ aINV(as), (as1, n1) = (as, n + 1) ∨ (as1, n1) ∈ asn-s ⊦ (as1 = as ∨ as1 ∈ ass0) ∧ n1 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as1) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as1) ∧ aINV(as1), (as0 = as ∨ as0 ∈ ass0) ∧ n0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as0) ∧ aINV(as0)
n0 = n + 1, aINV(as0), move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0), t(csf(n), as3), t(csf(n + 1), as0), ¬ (as0, n0) ∈ asn-s, ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as) ∧ aINV(as), (as1, n1) = (as, n + 1) ∨ (as1, n1) ∈ asn-s, as0 = as ∨ as0 ∈ ass0 ⊦ (as1 = as ∨ as1 ∈ ass0) ∧ n1 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as1) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as1) ∧ aINV(as1)
| (as0, n0) ∈ asn-s, ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as) ∧ aINV(as), (as1, n1) = (as, n + 1) ∨ (as1, n1) ∈ asn-s ⊦ (as1 = as ∨ as1 ∈ ass0) ∧ n1 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as1) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as1) ∧ aINV(as1), (as0 = as ∨ as0 ∈ ass0) ∧ n0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as0) ∧ aINV(as0) |
# asn-s ≠ 0, asn-s ≠ ∅, (as0, n0) ∈ asn-s, ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as) ∧ aINV(as), (as1, n1) = (as, n + 1) ∨ (as1, n1) ∈ asn-s ⊦ (as1 = as ∨ as1 ∈ ass0) ∧ n1 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as1) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as1) ∧ aINV(as1), (as0 = as ∨ as0 ∈ ass0) ∧ n0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as0) ∧ aINV(as0)
Used simplifier rules: size-zero-01: ⊦ s ≠ ∅ → # s ≠ 0; (forward) from specification set-basic ne-01: ⊦ a ∈ s → s ≠ ∅; (forward) from specification set-basic
| # asn-s ≠ 0, asn-s ≠ ∅, (as0, n0) ∈ asn-s, ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as) ∧ aINV(as), (as1, n1) = (as, n + 1) ∨ (as1, n1) ∈ asn-s ⊦ (as1 = as ∨ as1 ∈ ass0) ∧ n1 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as1) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as1) ∧ aINV(as1), (as0 = as ∨ as0 ∈ ass0) ∧ n0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as0) ∧ aINV(as0) |
(as1, n1) = (as, n + 1), # asn-s ≠ 0, asn-s ≠ ∅, (as0, n0) ∈ asn-s, ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as) ∧ aINV(as) ⊦ (as0 = as ∨ as0 ∈ ass0) ∧ n0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as0) ∧ aINV(as0), (as1 = as ∨ as1 ∈ ass0) ∧ n1 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as1) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as1) ∧ aINV(as1)
# asn-s ≠ 0, asn-s ≠ ∅, (as0, n0) ∈ asn-s, (as1, n1) ∈ asn-s, ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as) ∧ aINV(as) ⊦ (as0 = as ∨ as0 ∈ ass0) ∧ n0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as0) ∧ aINV(as0), (as1 = as ∨ as1 ∈ ass0) ∧ n1 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as1) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as1) ∧ aINV(as1)
| (as1, n1) = (as, n + 1), # asn-s ≠ 0, asn-s ≠ ∅, (as0, n0) ∈ asn-s, ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as) ∧ aINV(as) ⊦ (as0 = as ∨ as0 ∈ ass0) ∧ n0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as0) ∧ aINV(as0), (as1 = as ∨ as1 ∈ ass0) ∧ n1 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as1) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as1) ∧ aINV(as1) |
# asn-s ≠ 0, asn-s ≠ ∅, (as0, n0) ∈ asn-s, ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as) ∧ aINV(as) ⊦ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as) ∧ aINV(as), (as0 = as ∨ as0 ∈ ass0) ∧ n0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as0) ∧ aINV(as0)
| # asn-s ≠ 0, asn-s ≠ ∅, (as0, n0) ∈ asn-s, ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as) ∧ aINV(as) ⊦ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as) ∧ aINV(as), (as0 = as ∨ as0 ∈ ass0) ∧ n0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as0) ∧ aINV(as0) |
Used terms: as0, n0
| # asn-s ≠ 0, asn-s ≠ ∅, (as0, n0) ∈ asn-s, (as1, n1) ∈ asn-s, ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as) ∧ aINV(as) ⊦ (as0 = as ∨ as0 ∈ ass0) ∧ n0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as0) ∧ aINV(as0), (as1 = as ∨ as1 ∈ ass0) ∧ n1 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as1) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as1) ∧ aINV(as1) |
Used terms: as1, n1
| n0 = n + 1, aINV(as0), move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0), t(csf(n), as3), t(csf(n + 1), as0), ¬ (as0, n0) ∈ asn-s, ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as) ∧ aINV(as), (as1, n1) = (as, n + 1) ∨ (as1, n1) ∈ asn-s, as0 = as ∨ as0 ∈ ass0 ⊦ (as1 = as ∨ as1 ∈ ass0) ∧ n1 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as1) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as1) ∧ aINV(as1) |
aINV(as0), move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0), t(csf(n + 1), as0), t(csf(n), as3), ¬ (as0, n + 1) ∈ asn-s, ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as2) ∧ t(csf(n + 1), as2) ∧ aINV(as2), as0 = as ∨ as0 ∈ ass0, (as1, n1) = (as, n + 1) ∨ (as1, n1) ∈ asn-s ⊦ (as1 = as ∨ as1 ∈ ass0) ∧ n1 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as1) ∧ t(csf(n + 1), as1) ∧ aINV(as1)
| aINV(as0), move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0), t(csf(n + 1), as0), t(csf(n), as3), ¬ (as0, n + 1) ∈ asn-s, ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as2) ∧ t(csf(n + 1), as2) ∧ aINV(as2), as0 = as ∨ as0 ∈ ass0, (as1, n1) = (as, n + 1) ∨ (as1, n1) ∈ asn-s ⊦ (as1 = as ∨ as1 ∈ ass0) ∧ n1 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as1) ∧ t(csf(n + 1), as1) ∧ aINV(as1) |
(as0, n + 1) ∈ asn-s ↔ as0 ∈ ass0 ∧ n + 1 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0) ∧ t(csf(n + 1), as0) ∧ aINV(as0), aINV(as0), move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0), t(csf(n), as3), t(csf(n + 1), as0), ¬ (as0, n + 1) ∈ asn-s, ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as2) ∧ t(csf(n + 1), as2) ∧ aINV(as2), (as1, n1) = (as, n + 1) ∨ (as1, n1) ∈ asn-s, as0 = as ∨ as0 ∈ ass0 ⊦ (as1 = as ∨ as1 ∈ ass0) ∧ n1 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as1) ∧ t(csf(n + 1), as1) ∧ aINV(as1)
Used terms: as0, n + 1
| (as0, n + 1) ∈ asn-s ↔ as0 ∈ ass0 ∧ n + 1 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0) ∧ t(csf(n + 1), as0) ∧ aINV(as0), aINV(as0), move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0), t(csf(n), as3), t(csf(n + 1), as0), ¬ (as0, n + 1) ∈ asn-s, ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as2) ∧ t(csf(n + 1), as2) ∧ aINV(as2), (as1, n1) = (as, n + 1) ∨ (as1, n1) ∈ asn-s, as0 = as ∨ as0 ∈ ass0 ⊦ (as1 = as ∨ as1 ∈ ass0) ∧ n1 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as1) ∧ t(csf(n + 1), as1) ∧ aINV(as1) |
aINV(as), move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as), t(csf(n), as3), t(csf(n + 1), as), ¬ as ∈ ass0, ¬ (as, n + 1) ∈ asn-s, ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as2) ∧ t(csf(n + 1), as2) ∧ aINV(as2), (as1, n1) = (as, n + 1) ∨ (as1, n1) ∈ asn-s ⊦ (as1 = as ∨ as1 ∈ ass0) ∧ n1 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as1) ∧ t(csf(n + 1), as1) ∧ aINV(as1)
| aINV(as), move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as), t(csf(n), as3), t(csf(n + 1), as), ¬ as ∈ ass0, ¬ (as, n + 1) ∈ asn-s, ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as2) ∧ t(csf(n + 1), as2) ∧ aINV(as2), (as1, n1) = (as, n + 1) ∨ (as1, n1) ∈ asn-s ⊦ (as1 = as ∨ as1 ∈ ass0) ∧ n1 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as1) ∧ t(csf(n + 1), as1) ∧ aINV(as1) |
aINV(as), move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as), t(csf(n + 1), as), t(csf(n), as3), (as1, n1) ∈ asn-s, ¬ as ∈ ass0, ¬ (as, n + 1) ∈ asn-s, ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as2) ∧ t(csf(n + 1), as2) ∧ aINV(as2) ⊦ (as1 = as ∨ as1 ∈ ass0) ∧ n1 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as1) ∧ t(csf(n + 1), as1) ∧ aINV(as1)
| aINV(as), move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as), t(csf(n + 1), as), t(csf(n), as3), (as1, n1) ∈ asn-s, ¬ as ∈ ass0, ¬ (as, n + 1) ∈ asn-s, ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as2) ∧ t(csf(n + 1), as2) ∧ aINV(as2) ⊦ (as1 = as ∨ as1 ∈ ass0) ∧ n1 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as1) ∧ t(csf(n + 1), as1) ∧ aINV(as1) |
# asn-s ≠ 0, asn-s ≠ ∅, aINV(as), move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as), t(csf(n + 1), as), t(csf(n), as3), (as1, n1) ∈ asn-s, ¬ (as, n + 1) ∈ asn-s, ¬ as ∈ ass0, ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as2) ∧ t(csf(n + 1), as2) ∧ aINV(as2) ⊦ as1 ∈ ass0 ∧ n1 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as1) ∧ t(csf(n + 1), as1) ∧ aINV(as1)
Used simplifier rules: size-zero-01: ⊦ s ≠ ∅ → # s ≠ 0; (forward) from specification set-basic ne-01: ⊦ a ∈ s → s ≠ ∅; (forward) from specification set-basic
| # asn-s ≠ 0, asn-s ≠ ∅, aINV(as), move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as), t(csf(n + 1), as), t(csf(n), as3), (as1, n1) ∈ asn-s, ¬ (as, n + 1) ∈ asn-s, ¬ as ∈ ass0, ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as2) ∧ t(csf(n + 1), as2) ∧ aINV(as2) ⊦ as1 ∈ ass0 ∧ n1 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as1) ∧ t(csf(n + 1), as1) ∧ aINV(as1) |
Used terms: as1, n1
| n1 = n + 1, (as1, n1) ≠ (as, n + 1), ¬ ( (as0, n0) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as0) ∧ aINV(as0)), aINV(as1), move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as1), t(csf(n), as3), t(csf(n + 1), as1), ¬ (as1, n1) ∈ asn-s, ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as) ∧ t(csf(n), as3) ∧ t(csf(n + 1), as) ∧ aINV(as), as1 = as ∨ as1 ∈ ass0 ⊦ |
# ass0 ≠ 0, ¬ ( (as0, n0) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0) ∧ t(csf(n + 1), as0) ∧ aINV(as0)), as1 ≠ as, ass0 ≠ ∅, aINV(as1), move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as1), t(csf(n), as3), t(csf(n + 1), as1), as1 ∈ ass0, ¬ (as1, n + 1) ∈ asn-s, ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as2) ∧ t(csf(n + 1), as2) ∧ aINV(as2) ⊦
Used simplifier rules: size-zero-01: ⊦ s ≠ ∅ → # s ≠ 0; (forward) from specification set-basic ne-01: ⊦ a ∈ s → s ≠ ∅; (forward) from specification set-basic
| # ass0 ≠ 0, ¬ ( (as0, n0) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0) ∧ t(csf(n + 1), as0) ∧ aINV(as0)), as1 ≠ as, ass0 ≠ ∅, aINV(as1), move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as1), t(csf(n), as3), t(csf(n + 1), as1), as1 ∈ ass0, ¬ (as1, n + 1) ∈ asn-s, ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as2) ∧ t(csf(n + 1), as2) ∧ aINV(as2) ⊦ |
# ass0 ≠ 0, as1 ≠ as, ass0 ≠ ∅, aINV(as1), move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as1), t(csf(n + 1), as1), t(csf(n), as3), as1 ∈ ass0, (as0, n0) ∈ asn-s, ¬ (as1, n + 1) ∈ asn-s, ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as2) ∧ t(csf(n + 1), as2) ∧ aINV(as2) ⊦ (as0 = as ∨ as0 ∈ ass0) ∧ n0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0) ∧ t(csf(n + 1), as0) ∧ aINV(as0)
n0 = n + 1, # ass0 ≠ 0, as1 ≠ as, ass0 ≠ ∅, aINV(as1), aINV(as0), move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as1), move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0), t(csf(n + 1), as1), t(csf(n), as3), t(csf(n + 1), as0), as1 ∈ ass0, ¬ (as0, n0) ∈ asn-s, ¬ (as1, n + 1) ∈ asn-s, ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as2) ∧ t(csf(n + 1), as2) ∧ aINV(as2), as0 = as ∨ as0 ∈ ass0 ⊦
| # ass0 ≠ 0, as1 ≠ as, ass0 ≠ ∅, aINV(as1), move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as1), t(csf(n + 1), as1), t(csf(n), as3), as1 ∈ ass0, (as0, n0) ∈ asn-s, ¬ (as1, n + 1) ∈ asn-s, ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as2) ∧ t(csf(n + 1), as2) ∧ aINV(as2) ⊦ (as0 = as ∨ as0 ∈ ass0) ∧ n0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0) ∧ t(csf(n + 1), as0) ∧ aINV(as0) |
# ass0 ≠ 0, # asn-s ≠ 0, as1 ≠ as, asn-s ≠ ∅, ass0 ≠ ∅, aINV(as1), move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as1), t(csf(n + 1), as1), t(csf(n), as3), as1 ∈ ass0, (as0, n0) ∈ asn-s, ¬ (as1, n + 1) ∈ asn-s, ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as2) ∧ t(csf(n + 1), as2) ∧ aINV(as2) ⊦ (as0 = as ∨ as0 ∈ ass0) ∧ n0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0) ∧ t(csf(n + 1), as0) ∧ aINV(as0)
Used simplifier rules: size-zero-01: ⊦ s ≠ ∅ → # s ≠ 0; (forward) from specification set-basic ne-01: ⊦ a ∈ s → s ≠ ∅; (forward) from specification set-basic
| # ass0 ≠ 0, # asn-s ≠ 0, as1 ≠ as, asn-s ≠ ∅, ass0 ≠ ∅, aINV(as1), move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as1), t(csf(n + 1), as1), t(csf(n), as3), as1 ∈ ass0, (as0, n0) ∈ asn-s, ¬ (as1, n + 1) ∈ asn-s, ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as2) ∧ t(csf(n + 1), as2) ∧ aINV(as2) ⊦ (as0 = as ∨ as0 ∈ ass0) ∧ n0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0) ∧ t(csf(n + 1), as0) ∧ aINV(as0) |
Used terms: as1, n + 1
| n0 = n + 1, # ass0 ≠ 0, as1 ≠ as, ass0 ≠ ∅, aINV(as1), aINV(as0), move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as1), move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0), t(csf(n + 1), as1), t(csf(n), as3), t(csf(n + 1), as0), as1 ∈ ass0, ¬ (as0, n0) ∈ asn-s, ¬ (as1, n + 1) ∈ asn-s, ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as2) ∧ t(csf(n + 1), as2) ∧ aINV(as2), as0 = as ∨ as0 ∈ ass0 ⊦ |
# ass0 ≠ 0, as1 ≠ as, ass0 ≠ ∅, aINV(as0), aINV(as1), move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0), move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as1), t(csf(n + 1), as0), t(csf(n), as3), t(csf(n + 1), as1), as1 ∈ ass0, ¬ (as0, n + 1) ∈ asn-s, ¬ (as1, n + 1) ∈ asn-s, ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as2) ∧ t(csf(n + 1), as2) ∧ aINV(as2), as0 = as ∨ as0 ∈ ass0 ⊦
| # ass0 ≠ 0, as1 ≠ as, ass0 ≠ ∅, aINV(as0), aINV(as1), move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as0), move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as1), t(csf(n + 1), as0), t(csf(n), as3), t(csf(n + 1), as1), as1 ∈ ass0, ¬ (as0, n + 1) ∈ asn-s, ¬ (as1, n + 1) ∈ asn-s, ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart, astep, aext))(as3, cext !(caf(n) '), as2) ∧ t(csf(n + 1), as2) ∧ aINV(as2), as0 = as ∨ as0 ∈ ass0 ⊦ |
Used terms: as1, n + 1
| ⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ aINV(as3), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el) ⊦ ∃ s. ∀ b. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((as3, n), b) ↔ b ∈ s |
Used simplifier rules: ⊦ ¬ a ∈ ∅; (s) ⊦ edge(vs × es)(a, b) ↔ es(a, b) ∧ vs(a) ∧ vs(b); (ws) Used terms: ∅
| ⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ allreachable ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ |
⊦ allreachable(g) ↔ (∀ b. dom(g)(b) → (∃ a. isroot(g)(a) ∧ path(g)(a, b)))
⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∃ b. ¬ ( dom ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (b) → (∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, b))) ⊦
Used terms: (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))
| ⊦ allreachable(g) ↔ (∀ b. dom(g)(b) → (∃ a. isroot(g)(a) ∧ path(g)(a, b))) |
| ⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∃ b. ¬ ( dom ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (b) → (∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, b))) ⊦ |
⌜ef⌝ = cext !(⌜caf⌝ ), aINV(asn._1), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(asn._2), asn._1), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, asn)
Used simplifier rules: ⊦ dom(vs × es) = vs; (s)
| ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(asn._1), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(asn._2), asn._1), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, asn) |
asn = (as, n), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, asn)
Used terms: as, n
| asn = (as, n), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, asn) |
⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n))
| ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n)) |
⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, 0))
⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n0 +1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ ef, cext, caf, aINV, as, cstart, csf, cstep, t, astart, astep, aext, cINV. ⌜ef⌝ = cext !(⌜caf⌝ ) ∧ aINV(as) ∧ cstart(csf(0)) ∧ fragω(IOAut(cstart, cstep, cext))(csf, caf) ∧ t(csf(n0), as) ∧ ¬ traceω(IOAut(astart, astep, aext))(ef) ∧ (∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el)) ∧ (∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass)) ∧ (∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass)) ∧ (∀ cs. cstart(cs) → cINV(cs)) ∧ (∀ as. astart(as) → aINV(as)) ∧ (∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0)) ∧ (∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0)) ∧ (∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as))) ∧ (∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as)) ∧ (∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as))) ∧ (∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs)) → (∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0))) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 +1))
Used simplifier rules: Nat freely generated by 0, +1;;
| ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, 0)) |
⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((as, 0)) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((as, 0), (as, 0))
Used terms: (as, 0)
| ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((as, 0)) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((as, 0), (as, 0)) |
⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((as, 0)), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el) ⊦
⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((as, 0), (as, 0)), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el) ⊦
| ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((as, 0)), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el) ⊦ |
⊦ isroot(g)(b) ↔ dom(g)(b) ∧ (∀ a. ¬ edge(g)(a, b))
Used simplifier rules: ⊦ dom(vs × es) = vs; (s) ⊦ edge(vs × es)(a, b) ↔ es(a, b) ∧ vs(a) ∧ vs(b); (ws) ⊦ m + 1 ≠ 0; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1)), (as, 0)
| ⊦ isroot(g)(b) ↔ dom(g)(b) ∧ (∀ a. ¬ edge(g)(a, b)) |
| ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((as, 0), (as, 0)), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el) ⊦ |
⊦ path(g)(a, b) ↔ (∃ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ a = x.head ∧ b = x.last)
⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ x. ¬ ( pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (⌜x⌝ ) ∧ x ≠ [] ∧ (as, 0) = x.head ∧ (as, 0) = x.last) ⊦
Used terms: (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1)), (as, 0), (as, 0)
| ⊦ path(g)(a, b) ↔ (∃ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ a = x.head ∧ b = x.last) |
| ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ x. ¬ ( pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (⌜x⌝ ) ∧ x ≠ [] ∧ (as, 0) = x.head ∧ (as, 0) = x.last) ⊦ |
⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ x. ¬ pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (⌜x⌝ ) ∨ x = [] ∨ (as, 0) ≠ x.head ∨ (as, 0) ≠ x.last ⊦
| ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ x. ¬ pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (⌜x⌝ ) ∨ x = [] ∨ (as, 0) ≠ x.head ∨ (as, 0) ≠ x.last ⊦ |
⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ¬ pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (⌜(as, 0) '⌝ ) ∨ (as, 0) ' = [] ∨ (as, 0) ≠ (as, 0) '.head ∨ (as, 0) ≠ (as, 0) '.last ⊦
Used terms: (as, 0) '
| ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ¬ pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (⌜(as, 0) '⌝ ) ∨ (as, 0) ' = [] ∨ (as, 0) ≠ (as, 0) '.head ∨ (as, 0) ≠ (as, 0) '.last ⊦ |
⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (⌜(as, 0) '⌝ ), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el) ⊦
Used simplifier rules: ⊦ a '.last = a; (s) ⊦ a '.head = a; (s) ⊦ a ' ≠ []; (s)
| ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (⌜(as, 0) '⌝ ), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el) ⊦ |
⊦ pathp(g)(σ) ↔ (∀ n. ⌜n⌝ < # σ → dom(g)(σ[n])) ∧ (∀ n. ⌜n + 1⌝ < # σ → edge(g)(σ[n], σ[n + 1]))
Used simplifier rules: ⊦ m < 1 ↔ m = 0; (s) ⊦ ⌜x⌝ [n] = x[n]; (s) ⊦ a '[0] = a; (s) ⊦ dom(vs × es) = vs; (s) ⊦ ⌜m + n⌝ = ⌜m⌝ + ⌜n⌝ ; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ # a ' = 0 +1; (s) ⊦ m ≤ n → (⌜(* m)⌝ + n∞2 < ⌜(* n)⌝ ↔ n∞2 < ⌜n - m⌝ ); (s) ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ ¬ n < 0; (s) add-assoc: ⊦ (n∞ + n∞1) + n∞2 = n∞ + n∞1 + n∞2; from specification nat-inf add-comm: ⊦ n∞1 + n∞2 = n∞2 + n∞1; from specification nat-inf Used terms: (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1)), ⌜(as, 0) '⌝
| ⊦ pathp(g)(σ) ↔ (∀ n. ⌜n⌝ < # σ → dom(g)(σ[n])) ∧ (∀ n. ⌜n + 1⌝ < # σ → edge(g)(σ[n], σ[n + 1])) |
| ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n0 +1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ ef, cext, caf, aINV, as, cstart, csf, cstep, t, astart, astep, aext, cINV. ⌜ef⌝ = cext !(⌜caf⌝ ) ∧ aINV(as) ∧ cstart(csf(0)) ∧ fragω(IOAut(cstart, cstep, cext))(csf, caf) ∧ t(csf(n0), as) ∧ ¬ traceω(IOAut(astart, astep, aext))(ef) ∧ (∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el)) ∧ (∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass)) ∧ (∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass)) ∧ (∀ cs. cstart(cs) → cINV(cs)) ∧ (∀ as. astart(as) → aINV(as)) ∧ (∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0)) ∧ (∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0)) ∧ (∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as))) ∧ (∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as)) ∧ (∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as))) ∧ (∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs)) → (∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0))) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 +1)) |
⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n0 + 1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ ef, cext, caf, aINV, as, cstart, csf, cstep, t, astart, astep, aext, cINV. ⌜ef⌝ = cext !(⌜caf⌝ ) ∧ aINV(as) ∧ cstart(csf(0)) ∧ fragω(IOAut(cstart, cstep, cext))(csf, caf) ∧ t(csf(n0), as) ∧ ¬ traceω(IOAut(astart, astep, aext))(ef) ∧ (∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el)) ∧ (∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass)) ∧ (∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass)) ∧ (∀ cs. cstart(cs) → cINV(cs)) ∧ (∀ as. astart(as) → aINV(as)) ∧ (∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0)) ∧ (∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0)) ∧ (∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as))) ∧ (∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as)) ∧ (∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as))) ∧ (∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs)) → (∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0))), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 + 1))
Used simplifier rules: ⊦ m +1 = m + 1; (s)
| ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n0 + 1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ ef, cext, caf, aINV, as, cstart, csf, cstep, t, astart, astep, aext, cINV. ⌜ef⌝ = cext !(⌜caf⌝ ) ∧ aINV(as) ∧ cstart(csf(0)) ∧ fragω(IOAut(cstart, cstep, cext))(csf, caf) ∧ t(csf(n0), as) ∧ ¬ traceω(IOAut(astart, astep, aext))(ef) ∧ (∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el)) ∧ (∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass)) ∧ (∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass)) ∧ (∀ cs. cstart(cs) → cINV(cs)) ∧ (∀ as. astart(as) → aINV(as)) ∧ (∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0)) ∧ (∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0)) ∧ (∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as))) ∧ (∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as)) ∧ (∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as))) ∧ (∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs)) → (∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0))), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 + 1)) |
⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n0 + 1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ csf(n0) = csl.last) → cINV(csf(n0)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ ef, cext, caf, aINV, as, cstart, csf, cstep, t, astart, astep, aext, cINV. ⌜ef⌝ = cext !(⌜caf⌝ ) ∧ aINV(as) ∧ cstart(csf(0)) ∧ fragω(IOAut(cstart, cstep, cext))(csf, caf) ∧ t(csf(n0), as) ∧ ¬ traceω(IOAut(astart, astep, aext))(ef) ∧ (∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el)) ∧ (∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass)) ∧ (∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass)) ∧ (∀ cs. cstart(cs) → cINV(cs)) ∧ (∀ as. astart(as) → aINV(as)) ∧ (∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0)) ∧ (∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0)) ∧ (∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as))) ∧ (∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as)) ∧ (∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as))) ∧ (∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs)) → (∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0))) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 + 1))
Used terms: csf(n0)
| ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n0 + 1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ csf(n0) = csl.last) → cINV(csf(n0)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ ef, cext, caf, aINV, as, cstart, csf, cstep, t, astart, astep, aext, cINV. ⌜ef⌝ = cext !(⌜caf⌝ ) ∧ aINV(as) ∧ cstart(csf(0)) ∧ fragω(IOAut(cstart, cstep, cext))(csf, caf) ∧ t(csf(n0), as) ∧ ¬ traceω(IOAut(astart, astep, aext))(ef) ∧ (∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el)) ∧ (∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass)) ∧ (∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass)) ∧ (∀ cs. cstart(cs) → cINV(cs)) ∧ (∀ as. astart(as) → aINV(as)) ∧ (∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0)) ∧ (∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0)) ∧ (∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as))) ∧ (∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as)) ∧ (∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as))) ∧ (∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs)) → (∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0))) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 + 1)) |
⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n0 + 1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ ef, cext, caf, aINV, as, cstart, csf, cstep, t, astart, astep, aext, cINV. ⌜ef⌝ = cext !(⌜caf⌝ ) ∧ aINV(as) ∧ cstart(csf(0)) ∧ fragω(IOAut(cstart, cstep, cext))(csf, caf) ∧ t(csf(n0), as) ∧ ¬ traceω(IOAut(astart, astep, aext))(ef) ∧ (∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el)) ∧ (∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass)) ∧ (∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass)) ∧ (∀ cs. cstart(cs) → cINV(cs)) ∧ (∀ as. astart(as) → aINV(as)) ∧ (∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0)) ∧ (∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0)) ∧ (∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as))) ∧ (∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as)) ∧ (∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as))) ∧ (∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs)) → (∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0))), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 + 1)), ∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ csf(n0) = csl.last
⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cINV(csf(n0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n0 + 1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ ef, cext, caf, aINV, as, cstart, csf, cstep, t, astart, astep, aext, cINV. ⌜ef⌝ = cext !(⌜caf⌝ ) ∧ aINV(as) ∧ cstart(csf(0)) ∧ fragω(IOAut(cstart, cstep, cext))(csf, caf) ∧ t(csf(n0), as) ∧ ¬ traceω(IOAut(astart, astep, aext))(ef) ∧ (∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el)) ∧ (∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass)) ∧ (∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass)) ∧ (∀ cs. cstart(cs) → cINV(cs)) ∧ (∀ as. astart(as) → aINV(as)) ∧ (∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0)) ∧ (∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0)) ∧ (∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as))) ∧ (∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as)) ∧ (∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as))) ∧ (∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs)) → (∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0))), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 + 1))
| ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n0 + 1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ ef, cext, caf, aINV, as, cstart, csf, cstep, t, astart, astep, aext, cINV. ⌜ef⌝ = cext !(⌜caf⌝ ) ∧ aINV(as) ∧ cstart(csf(0)) ∧ fragω(IOAut(cstart, cstep, cext))(csf, caf) ∧ t(csf(n0), as) ∧ ¬ traceω(IOAut(astart, astep, aext))(ef) ∧ (∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el)) ∧ (∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass)) ∧ (∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass)) ∧ (∀ cs. cstart(cs) → cINV(cs)) ∧ (∀ as. astart(as) → aINV(as)) ∧ (∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0)) ∧ (∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0)) ∧ (∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as))) ∧ (∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as)) ∧ (∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as))) ∧ (∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs)) → (∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0))), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 + 1)), ∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ csf(n0) = csl.last |
⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n0 + 1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ ef, cext, caf, aINV, as, cstart, csf, cstep, t, astart, astep, aext, cINV. ⌜ef⌝ = cext !(⌜caf⌝ ) ∧ aINV(as) ∧ cstart(csf(0)) ∧ fragω(IOAut(cstart, cstep, cext))(csf, caf) ∧ t(csf(n0), as) ∧ ¬ traceω(IOAut(astart, astep, aext))(ef) ∧ (∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el)) ∧ (∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass)) ∧ (∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass)) ∧ (∀ cs. cstart(cs) → cINV(cs)) ∧ (∀ as. astart(as) → aINV(as)) ∧ (∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0)) ∧ (∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0)) ∧ (∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as))) ∧ (∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as)) ∧ (∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as))) ∧ (∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs)) → (∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0))) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 + 1)), frag*(IOAut(cstart, cstep, cext))(csf.take(n0 + 1), caf.take(n0)) ∧ cstart(csf.take(n0 + 1)[0]) ∧ csf(n0) = (csf.take(n0 + 1)).last
Used terms: csf.take(n0 + 1), caf.take(n0)
| ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n0 + 1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ ef, cext, caf, aINV, as, cstart, csf, cstep, t, astart, astep, aext, cINV. ⌜ef⌝ = cext !(⌜caf⌝ ) ∧ aINV(as) ∧ cstart(csf(0)) ∧ fragω(IOAut(cstart, cstep, cext))(csf, caf) ∧ t(csf(n0), as) ∧ ¬ traceω(IOAut(astart, astep, aext))(ef) ∧ (∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el)) ∧ (∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass)) ∧ (∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass)) ∧ (∀ cs. cstart(cs) → cINV(cs)) ∧ (∀ as. astart(as) → aINV(as)) ∧ (∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0)) ∧ (∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0)) ∧ (∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as))) ∧ (∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as)) ∧ (∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as))) ∧ (∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs)) → (∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0))) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 + 1)), frag*(IOAut(cstart, cstep, cext))(csf.take(n0 + 1), caf.take(n0)) ∧ cstart(csf.take(n0 + 1)[0]) ∧ csf(n0) = (csf.take(n0 + 1)).last |
⌜ef⌝ = cext !(⌜caf⌝ ), csf(n0) ≠ (csf.take(n0 + 1)).last, aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n0 + 1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ ef, cext, caf, aINV, as, cstart, csf, cstep, t, astart, astep, aext, cINV. ⌜ef⌝ = cext !(⌜caf⌝ ) ∧ aINV(as) ∧ cstart(csf(0)) ∧ fragω(IOAut(cstart, cstep, cext))(csf, caf) ∧ t(csf(n0), as) ∧ ¬ traceω(IOAut(astart, astep, aext))(ef) ∧ (∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el)) ∧ (∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass)) ∧ (∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass)) ∧ (∀ cs. cstart(cs) → cINV(cs)) ∧ (∀ as. astart(as) → aINV(as)) ∧ (∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0)) ∧ (∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0)) ∧ (∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as))) ∧ (∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as)) ∧ (∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as))) ∧ (∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs)) → (∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0))), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 + 1))
Used simplifier rules: m < n ⊦ nf.take(n)[m] = nf(m); (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m + 1 ≠ 0; (s) ⊦ 0 < m ↔ m ≠ 0; (s) ⊦ fragω(IOAut(start, step, ext))(sf, af) → (frag*(IOAut(start, step, ext))(sf.take(n + 1), af.take(n)) ↔ true); (ss)
| ⌜ef⌝ = cext !(⌜caf⌝ ), csf(n0) ≠ (csf.take(n0 + 1)).last, aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n0 + 1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ ef, cext, caf, aINV, as, cstart, csf, cstep, t, astart, astep, aext, cINV. ⌜ef⌝ = cext !(⌜caf⌝ ) ∧ aINV(as) ∧ cstart(csf(0)) ∧ fragω(IOAut(cstart, cstep, cext))(csf, caf) ∧ t(csf(n0), as) ∧ ¬ traceω(IOAut(astart, astep, aext))(ef) ∧ (∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el)) ∧ (∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass)) ∧ (∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass)) ∧ (∀ cs. cstart(cs) → cINV(cs)) ∧ (∀ as. astart(as) → aINV(as)) ∧ (∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0)) ∧ (∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0)) ∧ (∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as))) ∧ (∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as)) ∧ (∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as))) ∧ (∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs)) → (∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0))), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 + 1)) |
⊦ nf.take(m + 1) = nf.take(m) + nf(m) '
Used simplifier rules: ⊦ (x + a ').last = a; (s) a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: csf, n0
| ⊦ nf.take(m + 1) = nf.take(m) + nf(m) ' |
| ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cINV(csf(n0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n0 + 1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ ef, cext, caf, aINV, as, cstart, csf, cstep, t, astart, astep, aext, cINV. ⌜ef⌝ = cext !(⌜caf⌝ ) ∧ aINV(as) ∧ cstart(csf(0)) ∧ fragω(IOAut(cstart, cstep, cext))(csf, caf) ∧ t(csf(n0), as) ∧ ¬ traceω(IOAut(astart, astep, aext))(ef) ∧ (∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el)) ∧ (∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass)) ∧ (∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass)) ∧ (∀ cs. cstart(cs) → cINV(cs)) ∧ (∀ as. astart(as) → aINV(as)) ∧ (∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0)) ∧ (∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0)) ∧ (∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as))) ∧ (∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as)) ∧ (∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as))) ∧ (∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs)) → (∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0))), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 + 1)) |
⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cINV(csf(n0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n0 + 1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), cINV(csf(n0)) ∧ cstep(csf(n0), caf(n0), csf(n0 + 1)) ∧ t(csf(n0 + 1), as) ∧ aINV(as) → (∃ as1. aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as) ∧ t(csf(n0), as1)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ ef, cext, caf, aINV, as, cstart, csf, cstep, t, astart, astep, aext, cINV. ⌜ef⌝ = cext !(⌜caf⌝ ) ∧ aINV(as) ∧ cstart(csf(0)) ∧ fragω(IOAut(cstart, cstep, cext))(csf, caf) ∧ t(csf(n0), as) ∧ ¬ traceω(IOAut(astart, astep, aext))(ef) ∧ (∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el)) ∧ (∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass)) ∧ (∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass)) ∧ (∀ cs. cstart(cs) → cINV(cs)) ∧ (∀ as. astart(as) → aINV(as)) ∧ (∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0)) ∧ (∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0)) ∧ (∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as))) ∧ (∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as)) ∧ (∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as))) ∧ (∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs)) → (∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0))) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 + 1))
Used terms: csf(n0), caf(n0), csf(n0 + 1), as
| ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cINV(csf(n0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n0 + 1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), cINV(csf(n0)) ∧ cstep(csf(n0), caf(n0), csf(n0 + 1)) ∧ t(csf(n0 + 1), as) ∧ aINV(as) → (∃ as1. aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as) ∧ t(csf(n0), as1)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ ef, cext, caf, aINV, as, cstart, csf, cstep, t, astart, astep, aext, cINV. ⌜ef⌝ = cext !(⌜caf⌝ ) ∧ aINV(as) ∧ cstart(csf(0)) ∧ fragω(IOAut(cstart, cstep, cext))(csf, caf) ∧ t(csf(n0), as) ∧ ¬ traceω(IOAut(astart, astep, aext))(ef) ∧ (∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el)) ∧ (∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass)) ∧ (∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass)) ∧ (∀ cs. cstart(cs) → cINV(cs)) ∧ (∀ as. astart(as) → aINV(as)) ∧ (∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0)) ∧ (∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0)) ∧ (∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as))) ∧ (∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as)) ∧ (∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as))) ∧ (∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs)) → (∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0))) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 + 1)) |
⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), aINV(as1), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0 + 1), as), t(csf(n0), as1), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ ef, cext, caf, aINV, as, cstart, csf, cstep, t, astart, astep, aext, cINV. ⌜ef⌝ = cext !(⌜caf⌝ ) ∧ aINV(as) ∧ cstart(csf(0)) ∧ fragω(IOAut(cstart, cstep, cext))(csf, caf) ∧ t(csf(n0), as) ∧ ¬ traceω(IOAut(astart, astep, aext))(ef) ∧ (∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el)) ∧ (∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass)) ∧ (∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass)) ∧ (∀ cs. cstart(cs) → cINV(cs)) ∧ (∀ as. astart(as) → aINV(as)) ∧ (∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0)) ∧ (∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0)) ∧ (∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as))) ∧ (∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as)) ∧ (∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as))) ∧ (∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs)) → (∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0))) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 + 1))
Used simplifier rules: ⊦ ¬ step(sf(n), af(n), sf(n + 1)) → (fragω(IOAut(start, step, ext))(sf, af) ↔ false); (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic
| ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), aINV(as1), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0 + 1), as), t(csf(n0), as1), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ ef, cext, caf, aINV, as, cstart, csf, cstep, t, astart, astep, aext, cINV. ⌜ef⌝ = cext !(⌜caf⌝ ) ∧ aINV(as) ∧ cstart(csf(0)) ∧ fragω(IOAut(cstart, cstep, cext))(csf, caf) ∧ t(csf(n0), as) ∧ ¬ traceω(IOAut(astart, astep, aext))(ef) ∧ (∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el)) ∧ (∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass)) ∧ (∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass)) ∧ (∀ cs. cstart(cs) → cINV(cs)) ∧ (∀ as. astart(as) → aINV(as)) ∧ (∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0)) ∧ (∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0)) ∧ (∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as))) ∧ (∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as)) ∧ (∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as))) ∧ (∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs)) → (∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0))) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 + 1)) |
⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as1), aINV(as), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0), as1), t(csf(n0 + 1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ⌜ef⌝ = cext !(⌜caf⌝ ) ∧ aINV(as1) ∧ cstart(csf(0)) ∧ fragω(IOAut(cstart, cstep, cext))(csf, caf) ∧ t(csf(n0), as1) ∧ ¬ traceω(IOAut(astart, astep, aext))(ef) ∧ (∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el)) ∧ (∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass)) ∧ (∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass)) ∧ (∀ cs. cstart(cs) → cINV(cs)) ∧ (∀ as. astart(as) → aINV(as)) ∧ (∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0)) ∧ (∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0)) ∧ (∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as))) ∧ (∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as)) ∧ (∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as))) ∧ (∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs)) → (∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as1, n0))), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 + 1))
Used terms: ef, cext, caf, aINV, as1, cstart, csf, cstep, t, astart, astep, aext, cINV
| ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as1), aINV(as), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0), as1), t(csf(n0 + 1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ⌜ef⌝ = cext !(⌜caf⌝ ) ∧ aINV(as1) ∧ cstart(csf(0)) ∧ fragω(IOAut(cstart, cstep, cext))(csf, caf) ∧ t(csf(n0), as1) ∧ ¬ traceω(IOAut(astart, astep, aext))(ef) ∧ (∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el)) ∧ (∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass)) ∧ (∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass)) ∧ (∀ cs. cstart(cs) → cINV(cs)) ∧ (∀ as. astart(as) → aINV(as)) ∧ (∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0)) ∧ (∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0)) ∧ (∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as))) ∧ (∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as)) ∧ (∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as))) ∧ (∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs)) → (∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as1, n0))), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 + 1)) |
⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), aINV(as1), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn, (as1, n0)), t(csf(n0 + 1), as), t(csf(n0), as1), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 + 1))
| ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), aINV(as1), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn, (as1, n0)), t(csf(n0 + 1), as), t(csf(n0), as1), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n0 + 1)) |
⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as1), aINV(as), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn, (as1, n0)), t(csf(n0), as1), t(csf(n0 + 1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn, (as, n0 + 1))
Used terms: asn
| ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as1), aINV(as), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn, (as1, n0)), t(csf(n0), as1), t(csf(n0 + 1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn, (as, n0 + 1)) |
⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), aINV(as1), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn, (as1, n0)), t(csf(n0 + 1), as), t(csf(n0), as1), ¬ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn, (as, n0 + 1)), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el) ⊦
| ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), aINV(as1), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn, (as1, n0)), t(csf(n0 + 1), as), t(csf(n0), as1), ¬ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn, (as, n0 + 1)), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el) ⊦ |
⊦ path(g)(a, b) ↔ (∃ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ a = x.head ∧ b = x.last)
⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as1), aINV(as), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0), as1), t(csf(n0 + 1), as), ¬ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn, (as, n0 + 1)), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∃ x. pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (⌜x⌝ ) ∧ x ≠ [] ∧ asn = x.head ∧ (as1, n0) = x.last ⊦
Used terms: (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1)), asn, (as1, n0)
| ⊦ path(g)(a, b) ↔ (∃ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ a = x.head ∧ b = x.last) |
| ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as1), aINV(as), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0), as1), t(csf(n0 + 1), as), ¬ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn, (as, n0 + 1)), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∃ x. pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (⌜x⌝ ) ∧ x ≠ [] ∧ asn = x.head ∧ (as1, n0) = x.last ⊦ |
(as1, n0) = x.last, ⌜ef⌝ = cext !(⌜caf⌝ ), x ≠ [], aINV(as), aINV(as1), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (x.head), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (⌜x⌝ ), t(csf(n0 + 1), as), t(csf(n0), as1), ¬ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (x.head, (as, n0 + 1)), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el) ⊦
| (as1, n0) = x.last, ⌜ef⌝ = cext !(⌜caf⌝ ), x ≠ [], aINV(as), aINV(as1), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (x.head), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (⌜x⌝ ), t(csf(n0 + 1), as), t(csf(n0), as1), ¬ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (x.head, (as, n0 + 1)), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el) ⊦ |
(as1, n0) = x.last, x = asn1 + x0, ⌜ef⌝ = cext !(⌜caf⌝ ), x ≠ [], aINV(as1), aINV(as), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (⌜x⌝ ), t(csf(n0), as1), t(csf(n0 + 1), as), ¬ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1, (as, n0 + 1)), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦
Used simplifier rules: ⊦ x ≠ [] → (head = x.head ∧ tail = x.tail ↔ x = head + tail); (elim) Used terms: x, asn1, x0
| (as1, n0) = x.last, x = asn1 + x0, ⌜ef⌝ = cext !(⌜caf⌝ ), x ≠ [], aINV(as1), aINV(as), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (⌜x⌝ ), t(csf(n0), as1), t(csf(n0 + 1), as), ¬ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1, (as, n0 + 1)), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ |
(as1, n0) = (asn1 ' + x0).last, ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), aINV(as1), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (⌜asn1 '⌝ + ⌜x0⌝ ), t(csf(n0 + 1), as), t(csf(n0), as1), ¬ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1, (as, n0 + 1)), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ⌜x + y⌝ = ⌜x⌝ + ⌜y⌝ ; (s) ⊦ a + x = a ' + x; (s) ⊦ a ' ≠ []; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s)
| (as1, n0) = (asn1 ' + x0).last, ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), aINV(as1), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (⌜asn1 '⌝ + ⌜x0⌝ ), t(csf(n0 + 1), as), t(csf(n0), as1), ¬ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1, (as, n0 + 1)), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el) ⊦ |
⊦ path(g)(a, b) ↔ (∃ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ a = x.head ∧ b = x.last)
(as1, n0) = (asn1 ' + x0).last, ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as1), aINV(as), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (⌜asn1 '⌝ + ⌜x0⌝ ), t(csf(n0), as1), t(csf(n0 + 1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ x. ¬ ( pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (⌜x⌝ ) ∧ x ≠ [] ∧ asn1 = x.head ∧ (as, n0 + 1) = x.last) ⊦
Used terms: (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1)), asn1, (as, n0 + 1)
| ⊦ path(g)(a, b) ↔ (∃ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ a = x.head ∧ b = x.last) |
| (as1, n0) = (asn1 ' + x0).last, ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as1), aINV(as), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (⌜asn1 '⌝ + ⌜x0⌝ ), t(csf(n0), as1), t(csf(n0 + 1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ x. ¬ ( pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (⌜x⌝ ) ∧ x ≠ [] ∧ asn1 = x.head ∧ (as, n0 + 1) = x.last) ⊦ |
(as1, n0) = (asn1 ' + x0).last, ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), aINV(as1), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (⌜asn1 '⌝ + ⌜x0⌝ ), t(csf(n0 + 1), as), t(csf(n0), as1), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ x. ¬ pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (⌜x⌝ ) ∨ x = [] ∨ asn1 ≠ x.head ∨ (as, n0 + 1) ≠ x.last ⊦
| (as1, n0) = (asn1 ' + x0).last, ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), aINV(as1), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (⌜asn1 '⌝ + ⌜x0⌝ ), t(csf(n0 + 1), as), t(csf(n0), as1), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ x. ¬ pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (⌜x⌝ ) ∨ x = [] ∨ asn1 ≠ x.head ∨ (as, n0 + 1) ≠ x.last ⊦ |
(as1, n0) = (asn1 ' + x0).last, ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as1), aINV(as), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (⌜asn1 '⌝ + ⌜x0⌝ ), t(csf(n0), as1), t(csf(n0 + 1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ¬ pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (⌜asn1 ' + (x0 + (as, n0 + 1))⌝ ) ∨ asn1 ' + (x0 + (as, n0 + 1)) = [] ∨ asn1 ≠ (asn1 ' + (x0 + (as, n0 + 1))).head ∨ (as, n0 + 1) ≠ (asn1 ' + (x0 + (as, n0 + 1))).last ⊦
Used terms: asn1 ' + (x0 + (as, n0 + 1))
| (as1, n0) = (asn1 ' + x0).last, ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as1), aINV(as), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (⌜asn1 '⌝ + ⌜x0⌝ ), t(csf(n0), as1), t(csf(n0 + 1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ¬ pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (⌜asn1 ' + (x0 + (as, n0 + 1))⌝ ) ∨ asn1 ' + (x0 + (as, n0 + 1)) = [] ∨ asn1 ≠ (asn1 ' + (x0 + (as, n0 + 1))).head ∨ (as, n0 + 1) ≠ (asn1 ' + (x0 + (as, n0 + 1))).last ⊦ |
(as1, n0) = (asn1 ' + x0).last, ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), aINV(as1), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (⌜asn1 '⌝ + ⌜x0⌝ ), t(csf(n0 + 1), as), t(csf(n0), as1), ¬ pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (⌜asn1 '⌝ + ⌜x0⌝ + ⌜(as, n0 + 1) '⌝ ), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ (a ' + x + b ').last = b; (s) ⊦ x + a = x + a '; (s) ⊦ (a ' + x).head = a; (s) ⊦ a ' ≠ []; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) ⊦ ⌜x + y⌝ = ⌜x⌝ + ⌜y⌝ ; (s)
| (as1, n0) = (asn1 ' + x0).last, ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), aINV(as1), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (⌜asn1 '⌝ + ⌜x0⌝ ), t(csf(n0 + 1), as), t(csf(n0), as1), ¬ pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (⌜asn1 '⌝ + ⌜x0⌝ + ⌜(as, n0 + 1) '⌝ ), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el) ⊦ |
⊦ pathp(g)(σ) ↔ (∀ n. ⌜n⌝ < # σ → dom(g)(σ[n])) ∧ (∀ n. ⌜n + 1⌝ < # σ → edge(g)(σ[n], σ[n + 1]))
(as1, n0) = (asn1 ' + x0).last, ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as1), aINV(as), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0), as1), t(csf(n0 + 1), as), ¬ pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (⌜asn1 '⌝ + ⌜x0⌝ + ⌜(as, n0 + 1) '⌝ ), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ n. ⌜n⌝ < #(⌜asn1 '⌝ + ⌜x0⌝ ) → dom ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((⌜asn1 '⌝ + ⌜x0⌝ )[n]), ∀ n. ⌜n + 1⌝ < #(⌜asn1 '⌝ + ⌜x0⌝ ) → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((⌜asn1 '⌝ + ⌜x0⌝ )[n], (⌜asn1 '⌝ + ⌜x0⌝ )[n + 1]) ⊦
Used terms: (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1)), ⌜asn1 '⌝ + ⌜x0⌝
| ⊦ pathp(g)(σ) ↔ (∀ n. ⌜n⌝ < # σ → dom(g)(σ[n])) ∧ (∀ n. ⌜n + 1⌝ < # σ → edge(g)(σ[n], σ[n + 1])) |
| (as1, n0) = (asn1 ' + x0).last, ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as1), aINV(as), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0), as1), t(csf(n0 + 1), as), ¬ pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (⌜asn1 '⌝ + ⌜x0⌝ + ⌜(as, n0 + 1) '⌝ ), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ n. ⌜n⌝ < #(⌜asn1 '⌝ + ⌜x0⌝ ) → dom ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((⌜asn1 '⌝ + ⌜x0⌝ )[n]), ∀ n. ⌜n + 1⌝ < #(⌜asn1 '⌝ + ⌜x0⌝ ) → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((⌜asn1 '⌝ + ⌜x0⌝ )[n], (⌜asn1 '⌝ + ⌜x0⌝ )[n + 1]) ⊦ |
(as1, n0) = (asn1 ' + x0).last, ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), aINV(as1), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0 + 1), as), t(csf(n0), as1), ¬ pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (⌜asn1 '⌝ + ⌜x0⌝ + ⌜(as, n0 + 1) '⌝ ), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1) ⊦
Used simplifier rules: ⊦ dom(vs × es) = vs; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ (⌜x⌝ + ⌜x0⌝ )[m] = (x + x0)[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 ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ ⌜n⌝ < ⌜1⌝ + n∞ ↔ ¬ n∞ < ⌜n⌝ ; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ # a ' = 0 +1; (s) ⊦ #(σ + σ1) = # σ + # σ1; (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ ⌜x⌝ [n] = x[n]; (s) ⊦ (⌜a '⌝ + σ)[n + 1] = σ[n]; (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)
| (as1, n0) = (asn1 ' + x0).last, ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), aINV(as1), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0 + 1), as), t(csf(n0), as1), ¬ pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (⌜asn1 '⌝ + ⌜x0⌝ + ⌜(as, n0 + 1) '⌝ ), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1) ⊦ |
⊦ pathp(g)(σ) ↔ (∀ n. ⌜n⌝ < # σ → dom(g)(σ[n])) ∧ (∀ n. ⌜n + 1⌝ < # σ → edge(g)(σ[n], σ[n + 1]))
(as1, n0) = (asn1 ' + x0).last, ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as1), aINV(as), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0), as1), t(csf(n0 + 1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), (∃ n. ¬ ( ⌜n⌝ < #(⌜asn1 '⌝ + ⌜x0⌝ + ⌜(as, n0 + 1) '⌝ ) → dom ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((⌜asn1 '⌝ + ⌜x0⌝ + ⌜(as, n0 + 1) '⌝ )[n]))) ∨ (∃ n. ¬ ( ⌜n + 1⌝ < #(⌜asn1 '⌝ + ⌜x0⌝ + ⌜(as, n0 + 1) '⌝ ) → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((⌜asn1 '⌝ + ⌜x0⌝ + ⌜(as, n0 + 1) '⌝ )[n], (⌜asn1 '⌝ + ⌜x0⌝ + ⌜(as, n0 + 1) '⌝ )[n + 1]))) ⊦
Used terms: (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1)), ⌜asn1 '⌝ + ⌜x0⌝ + ⌜(as, n0 + 1) '⌝
| ⊦ pathp(g)(σ) ↔ (∀ n. ⌜n⌝ < # σ → dom(g)(σ[n])) ∧ (∀ n. ⌜n + 1⌝ < # σ → edge(g)(σ[n], σ[n + 1])) |
| (as1, n0) = (asn1 ' + x0).last, ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as1), aINV(as), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0), as1), t(csf(n0 + 1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), (∃ n. ¬ ( ⌜n⌝ < #(⌜asn1 '⌝ + ⌜x0⌝ + ⌜(as, n0 + 1) '⌝ ) → dom ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((⌜asn1 '⌝ + ⌜x0⌝ + ⌜(as, n0 + 1) '⌝ )[n]))) ∨ (∃ n. ¬ ( ⌜n + 1⌝ < #(⌜asn1 '⌝ + ⌜x0⌝ + ⌜(as, n0 + 1) '⌝ ) → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((⌜asn1 '⌝ + ⌜x0⌝ + ⌜(as, n0 + 1) '⌝ )[n], (⌜asn1 '⌝ + ⌜x0⌝ + ⌜(as, n0 + 1) '⌝ )[n + 1]))) ⊦ |
(as1, n0) = (asn1 ' + x0).last, ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), aINV(as1), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0 + 1), as), t(csf(n0), as1), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1), ¬ ( n < 2 + # x0 → t(csf((asn1 ' + x0 + (as, n0 + 1) ')[n]._2), (asn1 ' + x0 + (as, n0 + 1) ')[n]._1) ∧ aINV((asn1 ' + x0 + (as, n0 + 1) ')[n]._1)) ∨ ¬ ( ¬ # x0 < n1 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0 + (as, n0 + 1) ')[n1], (x0 + (as, n0 + 1) ')[n1])) ⊦
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 ⊦ (⌜x⌝ + ⌜x0⌝ )[m] = (x + x0)[m]; (s) ⊦ (⌜a '⌝ + σ)[n + 1] = σ[n]; (s) ⊦ (⌜x⌝ + ⌜x0⌝ + ⌜x1⌝ )[m] = (x + x0 + x1)[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 ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ ⌜n⌝ < ⌜1⌝ + n∞ ↔ ¬ n∞ < ⌜n⌝ ; (s) ⊦ m ≤ n → (⌜(* m)⌝ + n∞2 < ⌜(* n)⌝ + n∞1 ↔ n∞2 < ⌜n - m⌝ + n∞1); (s) ⊦ ⌜(* n)⌝ + ⌜(* m)⌝ = ⌜n + m⌝ ; (s) ⊦ # a ' = 0 +1; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ #(σ + σ1) = # σ + # σ1; (s) ⊦ ⌜m + n⌝ = ⌜m⌝ + ⌜n⌝ ; (s) ⊦ dom(vs × es) = vs; (s) ⊦ ⌜n⌝ < ⌜m⌝ + ⌜n0⌝ ↔ n < m + n0; (s)
| (as1, n0) = (asn1 ' + x0).last, ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), aINV(as1), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0 + 1), as), t(csf(n0), as1), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1), ¬ ( n < 2 + # x0 → t(csf((asn1 ' + x0 + (as, n0 + 1) ')[n]._2), (asn1 ' + x0 + (as, n0 + 1) ')[n]._1) ∧ aINV((asn1 ' + x0 + (as, n0 + 1) ')[n]._1)) ∨ ¬ ( ¬ # x0 < n1 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0 + (as, n0 + 1) ')[n1], (x0 + (as, n0 + 1) ')[n1])) ⊦ |
(as1, n0) = (asn1 ' + x0).last, (asn1 ' + x0 + (as, n0 + 1) ')[n] = (as0, n2), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as1), aINV(as), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0), as1), t(csf(n0 + 1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ¬(n < 2 + # x0 → t(csf(n2), as0) ∧ aINV(as0)) ∨ ¬ ( ¬ # x0 < n1 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0 + (as, n0 + 1) ')[n1], (x0 + (as, n0 + 1) ')[n1])) ⊦
Used terms: as0, n2
| (as1, n0) = (asn1 ' + x0).last, (asn1 ' + x0 + (as, n0 + 1) ')[n] = (as0, n2), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as1), aINV(as), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0), as1), t(csf(n0 + 1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ¬(n < 2 + # x0 → t(csf(n2), as0) ∧ aINV(as0)) ∨ ¬ ( ¬ # x0 < n1 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0 + (as, n0 + 1) ')[n1], (x0 + (as, n0 + 1) ')[n1])) ⊦ |
(as1, n0) = (asn1 ' + x0).last, (asn1 ' + x0 + (as, n0 + 1) ')[n] = (as0, n2), ⌜ef⌝ = cext !(⌜caf⌝ ), n < 2 + # x0, aINV(as), aINV(as1), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0 + 1), as), t(csf(n0), as1), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1) ⊦ t(csf(n2), as0) ∧ aINV(as0)
(as1, n0) = (asn1 ' + x0).last, (asn1 ' + x0 + (as, n0 + 1) ')[n] = (as0, n2), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), aINV(as1), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0 + 1), as), t(csf(n0), as1), ¬ # x0 < n1, ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0 + (as, n0 + 1) ')[n1], (x0 + (as, n0 + 1) ')[n1]), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1) ⊦
| (as1, n0) = (asn1 ' + x0).last, (asn1 ' + x0 + (as, n0 + 1) ')[n] = (as0, n2), ⌜ef⌝ = cext !(⌜caf⌝ ), n < 2 + # x0, aINV(as), aINV(as1), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0 + 1), as), t(csf(n0), as1), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1) ⊦ t(csf(n2), as0) ∧ aINV(as0) |
(as1, n0) = (asn1 ' + x0).last, (asn1 ' + x0 + (as, n0 + 1) ')[n] = (as0, n2), ⌜ef⌝ = cext !(⌜caf⌝ ), n < 2 + # x0, aINV(as1), aINV(as), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0), as1), t(csf(n0 + 1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ t(csf(n2), as0) ∧ aINV(as0)
Used terms: n
| (as1, n0) = (asn1 ' + x0).last, (asn1 ' + x0 + (as, n0 + 1) ')[n] = (as0, n2), ⌜ef⌝ = cext !(⌜caf⌝ ), n < 2 + # x0, aINV(as1), aINV(as), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0), as1), t(csf(n0 + 1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ t(csf(n2), as0) ∧ aINV(as0) |
(as1, n0) = (asn1 ' + x0).last, (asn1 ' + x0 + (as, n0 + 1) ')[n] = (as0, n2), (asn1 ' + x0)[n] = (as2, n1), ⌜ef⌝ = cext !(⌜caf⌝ ), n < 2 + # x0, aINV(as), aINV(as1), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0 + 1), as), t(csf(n0), as1), ¬ traceω(IOAut(astart, astep, aext))(ef), ¬ # x0 < n → t(csf(n1), as2) ∧ aINV(as2), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1) ⊦ t(csf(n2), as0) ∧ aINV(as0)
Used terms: as2, n1
| (as1, n0) = (asn1 ' + x0).last, (asn1 ' + x0 + (as, n0 + 1) ')[n] = (as0, n2), (asn1 ' + x0)[n] = (as2, n1), ⌜ef⌝ = cext !(⌜caf⌝ ), n < 2 + # x0, aINV(as), aINV(as1), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0 + 1), as), t(csf(n0), as1), ¬ traceω(IOAut(astart, astep, aext))(ef), ¬ # x0 < n → t(csf(n1), as2) ∧ aINV(as2), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1) ⊦ t(csf(n2), as0) ∧ aINV(as0) |
⊦ n < # x → (x + y)[n] = x[n]
(as1, n0) = (asn1 ' + x0).last, (asn1 ' + x0)[n] = (as2, n1), (asn1 ' + x0 + (as, n0 + 1) ')[n] = (as0, n2), ⌜ef⌝ = cext !(⌜caf⌝ ), n < 2 + # x0, aINV(as1), aINV(as), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0), as1), t(csf(n0 + 1), as), ¬ n < # asn1 ', ¬ traceω(IOAut(astart, astep, aext))(ef), ¬ # x0 < n → t(csf(n1), as2) ∧ aINV(as2), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ t(csf(n2), as0) ∧ aINV(as0)
Used simplifier rules: ⊦ n < # x → (x + y)[n] = x[n]; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ # a ' = 0 +1; (s) ⊦ m < 1 ↔ m = 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic ⊦ a '[0] = a; (s) ⊦ 0 < m ↔ m ≠ 0; (s) n < n0 ⊦ (* n) ≠ m0 + (* n0); (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ ¬ n < 0; (s) Used terms: asn1 ', x0 + (as, n0 + 1) ', n
| ⊦ n < # x → (x + y)[n] = x[n] |
| (as1, n0) = (asn1 ' + x0).last, (asn1 ' + x0)[n] = (as2, n1), (asn1 ' + x0 + (as, n0 + 1) ')[n] = (as0, n2), ⌜ef⌝ = cext !(⌜caf⌝ ), n < 2 + # x0, aINV(as1), aINV(as), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0), as1), t(csf(n0 + 1), as), ¬ n < # asn1 ', ¬ traceω(IOAut(astart, astep, aext))(ef), ¬ # x0 < n → t(csf(n1), as2) ∧ aINV(as2), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ t(csf(n2), as0) ∧ aINV(as0) |
(as1, n0) = (asn1 ' + x0).last, x0[n - 1] = (as2, n1), (x0 + (as, n0 + 1) ')[n - 1] = (as0, n2), ⌜ef⌝ = cext !(⌜caf⌝ ), n ≠ 0, n < 2 + # x0, aINV(as1), aINV(as), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0), as1), t(csf(n0 + 1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ¬ # x0 < n → t(csf(n1), as2) ∧ aINV(as2), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ t(csf(n2), as0) ∧ aINV(as0)
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic n < n0 ⊦ (* n) ≠ m0 + (* n0); (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ m < 1 ↔ m = 0; (s) ⊦ # a ' = 0 +1; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ¬ n < # x → (x + y)[n] = y[n - # x]; (s)
| (as1, n0) = (asn1 ' + x0).last, x0[n - 1] = (as2, n1), (x0 + (as, n0 + 1) ')[n - 1] = (as0, n2), ⌜ef⌝ = cext !(⌜caf⌝ ), n ≠ 0, n < 2 + # x0, aINV(as1), aINV(as), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0), as1), t(csf(n0 + 1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ¬ # x0 < n → t(csf(n1), as2) ∧ aINV(as2), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ t(csf(n2), as0) ∧ aINV(as0) |
(as1, n0) = (asn1 ' + x0).last, (x0 + (as, n0 + 1) ')[n3] = (as0, n2), x0[n3] = (as2, n1), n = n3 + 1, ⌜ef⌝ = cext !(⌜caf⌝ ), n ≠ 0, n < 2 + # x0, aINV(as), aINV(as1), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0 + 1), as), t(csf(n0), as1), ¬ traceω(IOAut(astart, astep, aext))(ef), ¬ # x0 < n → t(csf(n1), as2) ∧ aINV(as2), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1) ⊦ t(csf(n2), as0) ∧ aINV(as0)
Used simplifier rules: n ≠ 0 ⊦ m = n - 1 ↔ n = m + 1; (elim) Used terms: n, n3
| (as1, n0) = (asn1 ' + x0).last, (x0 + (as, n0 + 1) ')[n3] = (as0, n2), x0[n3] = (as2, n1), n = n3 + 1, ⌜ef⌝ = cext !(⌜caf⌝ ), n ≠ 0, n < 2 + # x0, aINV(as), aINV(as1), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0 + 1), as), t(csf(n0), as1), ¬ traceω(IOAut(astart, astep, aext))(ef), ¬ # x0 < n → t(csf(n1), as2) ∧ aINV(as2), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1) ⊦ t(csf(n2), as0) ∧ aINV(as0) |
(as1, n0) = (asn1 ' + x0).last, x0[n3] = (as2, n1), (x0 + (as, n0 + 1) ')[n3] = (as0, n2), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as1), aINV(as), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0), as1), t(csf(n0 + 1), as), n3 ≤ # x0, ¬ traceω(IOAut(astart, astep, aext))(ef), n3 < # x0 → t(csf(n1), as2) ∧ aINV(as2), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ t(csf(n2), as0) ∧ aINV(as0)
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m < n + 1 ↔ ¬ n < m; (s) ⊦ m < n ↔ ¬ n ≤ m; (ss) n < n0 ⊦ m + (* n) < m0 + (* n0) ↔ m < m0 + (n0 - n); (s) ⊦ m + 1 ≠ 0; (s)
| (as1, n0) = (asn1 ' + x0).last, x0[n3] = (as2, n1), (x0 + (as, n0 + 1) ')[n3] = (as0, n2), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as1), aINV(as), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0), as1), t(csf(n0 + 1), as), n3 ≤ # x0, ¬ traceω(IOAut(astart, astep, aext))(ef), n3 < # x0 → t(csf(n1), as2) ∧ aINV(as2), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ t(csf(n2), as0) ∧ aINV(as0) |
⊦ n < # x → (x + y)[n] = x[n]
Used simplifier rules: ⊦ m < n → m ≤ n; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ # x = 0 ↔ x = []; (s) ⊦ x ≠ [] → (a ' + x).last = x.last; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ¬ n < # x → (x + y)[n] = y[n - # x]; (s) ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ m ≤ n → (n ≤ m ↔ m = n); (s) ⊦ m - m = 0; (s) ⊦ a '[0] = a; (s) ⊦ m ≤ m; (s) ⊦ ¬ n < n; (s) Used terms: x0, (as, n0 + 1) ', n3
| ⊦ n < # x → (x + y)[n] = x[n] |
| (as1, n0) = (asn1 ' + x0).last, (asn1 ' + x0 + (as, n0 + 1) ')[n] = (as0, n2), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), aINV(as1), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0 + 1), as), t(csf(n0), as1), ¬ # x0 < n1, ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0 + (as, n0 + 1) ')[n1], (x0 + (as, n0 + 1) ')[n1]), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1) ⊦ |
(as1, n0) = (asn1 ' + x0).last, (asn1 ' + x0 + (as, n0 + 1) ')[n] = (as0, n2), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as1), aINV(as), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0), as1), t(csf(n0 + 1), as), ¬ # x0 < n1, ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0 + (as, n0 + 1) ')[n1], (x0 + (as, n0 + 1) ')[n1]), ¬ traceω(IOAut(astart, astep, aext))(ef), n1 < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n1], x0[n1]), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦
Used terms: n1
| (as1, n0) = (asn1 ' + x0).last, (asn1 ' + x0 + (as, n0 + 1) ')[n] = (as0, n2), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as1), aINV(as), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0), as1), t(csf(n0 + 1), as), ¬ # x0 < n1, ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0 + (as, n0 + 1) ')[n1], (x0 + (as, n0 + 1) ')[n1]), ¬ traceω(IOAut(astart, astep, aext))(ef), n1 < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n1], x0[n1]), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ |
(as1, n0) = (asn1 ' + x0).last, (asn1 ' + x0 + (as, n0 + 1) ')[n] = (as0, n2), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), aINV(as1), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0 + 1), as), t(csf(n0), as1), n1 ≤ # x0, ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0 + (as, n0 + 1) ')[n1], (x0 + (as, n0 + 1) ')[n1]), ¬ traceω(IOAut(astart, astep, aext))(ef), n1 < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n1], x0[n1]), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ m < n ↔ ¬ n ≤ m; (ss)
| (as1, n0) = (asn1 ' + x0).last, (asn1 ' + x0 + (as, n0 + 1) ')[n] = (as0, n2), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), aINV(as1), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0 + 1), as), t(csf(n0), as1), n1 ≤ # x0, ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0 + (as, n0 + 1) ')[n1], (x0 + (as, n0 + 1) ')[n1]), ¬ traceω(IOAut(astart, astep, aext))(ef), n1 < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n1], x0[n1]), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1) ⊦ |
(as1, n0) = (asn1 ' + x0).last, (asn1 ' + x0 + (as, n0 + 1) ')[n] = (as0, n2), ⌜ef⌝ = cext !(⌜caf⌝ ), n1 < # x0, aINV(as1), aINV(as), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0), as1), t(csf(n0 + 1), as), n1 ≤ # x0, ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0 + (as, n0 + 1) ')[n1], (x0 + (as, n0 + 1) ')[n1]), ¬ traceω(IOAut(astart, astep, aext))(ef), n1 < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n1], x0[n1]), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦
(as1, n0) = (asn1 ' + x0).last, (asn1 ' + x0 + (as, n0 + 1) ')[n] = (as0, n2), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as1), aINV(as), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0), as1), t(csf(n0 + 1), as), n1 ≤ # x0, ¬ n1 < # x0, ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0 + (as, n0 + 1) ')[n1], (x0 + (as, n0 + 1) ')[n1]), ¬ traceω(IOAut(astart, astep, aext))(ef), n1 < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n1], x0[n1]), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦
Used formulas: n1 < # x0
| (as1, n0) = (asn1 ' + x0).last, (asn1 ' + x0 + (as, n0 + 1) ')[n] = (as0, n2), ⌜ef⌝ = cext !(⌜caf⌝ ), n1 < # x0, aINV(as1), aINV(as), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0), as1), t(csf(n0 + 1), as), n1 ≤ # x0, ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0 + (as, n0 + 1) ')[n1], (x0 + (as, n0 + 1) ')[n1]), ¬ traceω(IOAut(astart, astep, aext))(ef), n1 < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n1], x0[n1]), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ |
(as1, n0) = x0.last, x0[n1]._2 = (asn1 ' + x0)[n1]._2 + 1, (asn1 ' + x0 + (as, n0 + 1) ')[n] = (as0, n2), ⌜ef⌝ = cext !(⌜caf⌝ ), x0 ≠ [], n1 < # x0, aINV(x0[n1]._1), aINV((asn1 ' + x0)[n1]._1), aINV(as1), aINV(as), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))((asn1 ' + x0)[n1]._1, cext !(caf((asn1 ' + x0)[n1]._2) '), x0[n1]._1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(x0[n1]._2), x0[n1]._1), t(csf((asn1 ' + x0)[n1]._2), (asn1 ' + x0)[n1]._1), t(csf(n0), as1), t(csf(n0 + 1), as), ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0 + (as, n0 + 1) ')[n1], x0[n1]), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ x ≠ [] → (a ' + x).last = x.last; (s) ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ edge(vs × es)(a, b) ↔ es(a, b) ∧ vs(a) ∧ vs(b); (ws) ⊦ n < # x → (x + a ')[n] = x[n]; (s) ⊦ m < n → m ≤ n; (s)
| (as1, n0) = x0.last, x0[n1]._2 = (asn1 ' + x0)[n1]._2 + 1, (asn1 ' + x0 + (as, n0 + 1) ')[n] = (as0, n2), ⌜ef⌝ = cext !(⌜caf⌝ ), x0 ≠ [], n1 < # x0, aINV(x0[n1]._1), aINV((asn1 ' + x0)[n1]._1), aINV(as1), aINV(as), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))((asn1 ' + x0)[n1]._1, cext !(caf((asn1 ' + x0)[n1]._2) '), x0[n1]._1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(x0[n1]._2), x0[n1]._1), t(csf((asn1 ' + x0)[n1]._2), (asn1 ' + x0)[n1]._1), t(csf(n0), as1), t(csf(n0 + 1), as), ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0 + (as, n0 + 1) ')[n1], x0[n1]), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ |
(as1, n0) = x0.last, (asn1 ' + x0 + (as, n0 + 1) ')[n] = (as0, n2), x0[n1] = (as2, n3), n3 = (asn1 ' + x0)[n1]._2 + 1, ⌜ef⌝ = cext !(⌜caf⌝ ), x0 ≠ [], n1 < # x0, aINV(as), aINV(as1), aINV((asn1 ' + x0)[n1]._1), aINV(as2), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), move(IOAut(astart, astep, aext))((asn1 ' + x0)[n1]._1, cext !(caf((asn1 ' + x0)[n1]._2) '), as2), t(csf(n0 + 1), as), t(csf(n0), as1), t(csf((asn1 ' + x0)[n1]._2), (asn1 ' + x0)[n1]._1), t(csf(n3), as2), ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0 + (as, n0 + 1) ')[n1], x0[n1]), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1) ⊦
Used terms: as2, n3
| (as1, n0) = x0.last, (asn1 ' + x0 + (as, n0 + 1) ')[n] = (as0, n2), x0[n1] = (as2, n3), n3 = (asn1 ' + x0)[n1]._2 + 1, ⌜ef⌝ = cext !(⌜caf⌝ ), x0 ≠ [], n1 < # x0, aINV(as), aINV(as1), aINV((asn1 ' + x0)[n1]._1), aINV(as2), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), move(IOAut(astart, astep, aext))((asn1 ' + x0)[n1]._1, cext !(caf((asn1 ' + x0)[n1]._2) '), as2), t(csf(n0 + 1), as), t(csf(n0), as1), t(csf((asn1 ' + x0)[n1]._2), (asn1 ' + x0)[n1]._1), t(csf(n3), as2), ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0 + (as, n0 + 1) ')[n1], x0[n1]), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1) ⊦ |
(as1, n0) = x0.last, x0[n1] = (as2, (asn1 ' + x0)[n1]._2 + 1), (asn1 ' + x0 + (as, n0 + 1) ')[n] = (as0, n2), ⌜ef⌝ = cext !(⌜caf⌝ ), x0 ≠ [], n1 < # x0, aINV(as2), aINV((asn1 ' + x0)[n1]._1), aINV(as1), aINV(as), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))((asn1 ' + x0)[n1]._1, cext !(caf((asn1 ' + x0)[n1]._2) '), as2), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf((asn1 ' + x0)[n1]._2 + 1), as2), t(csf((asn1 ' + x0)[n1]._2), (asn1 ' + x0)[n1]._1), t(csf(n0), as1), t(csf(n0 + 1), as), ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0 + (as, n0 + 1) ')[n1], x0[n1]), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list
| (as1, n0) = x0.last, x0[n1] = (as2, (asn1 ' + x0)[n1]._2 + 1), (asn1 ' + x0 + (as, n0 + 1) ')[n] = (as0, n2), ⌜ef⌝ = cext !(⌜caf⌝ ), x0 ≠ [], n1 < # x0, aINV(as2), aINV((asn1 ' + x0)[n1]._1), aINV(as1), aINV(as), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))((asn1 ' + x0)[n1]._1, cext !(caf((asn1 ' + x0)[n1]._2) '), as2), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf((asn1 ' + x0)[n1]._2 + 1), as2), t(csf((asn1 ' + x0)[n1]._2), (asn1 ' + x0)[n1]._1), t(csf(n0), as1), t(csf(n0 + 1), as), ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0 + (as, n0 + 1) ')[n1], x0[n1]), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ |
(as1, n0) = x0.last, (asn1 ' + x0 + (as, n0 + 1) ')[n] = (as0, n2), x0[n1] = (as2, n3 + 1), (asn1 ' + x0)[n1] = (as3, n3), ⌜ef⌝ = cext !(⌜caf⌝ ), x0 ≠ [], n1 < # x0, aINV(as), aINV(as1), aINV(as3), aINV(as2), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), move(IOAut(astart, astep, aext))(as3, cext !(caf(n3) '), as2), t(csf(n0 + 1), as), t(csf(n0), as1), t(csf(n3), as3), t(csf(n3 + 1), as2), ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0 + (as, n0 + 1) ')[n1], x0[n1]), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1) ⊦
Used terms: as3, n3
| (as1, n0) = x0.last, (asn1 ' + x0 + (as, n0 + 1) ')[n] = (as0, n2), x0[n1] = (as2, n3 + 1), (asn1 ' + x0)[n1] = (as3, n3), ⌜ef⌝ = cext !(⌜caf⌝ ), x0 ≠ [], n1 < # x0, aINV(as), aINV(as1), aINV(as3), aINV(as2), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), move(IOAut(astart, astep, aext))(as3, cext !(caf(n3) '), as2), t(csf(n0 + 1), as), t(csf(n0), as1), t(csf(n3), as3), t(csf(n3 + 1), as2), ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0 + (as, n0 + 1) ')[n1], x0[n1]), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1) ⊦ |
⊦ edge(vs × es)(a, b) ↔ es(a, b) ∧ vs(a) ∧ vs(b)
(as1, n0) = x0.last, (asn1 ' + x0)[n1] = (as3, n3), x0[n1] = (as2, n3 + 1), (asn1 ' + x0 + (as, n0 + 1) ')[n] = (as0, n2), ⌜ef⌝ = cext !(⌜caf⌝ ), x0 ≠ [], n1 < # x0, aINV(as2), aINV(as3), aINV(as1), aINV(as), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as3, cext !(caf(n3) '), as2), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n3 + 1), as2), t(csf(n3), as3), t(csf(n0), as1), t(csf(n0 + 1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ( ¬ aINV((asn1 ' + x0 + (as, n0 + 1) ')[n1]._1) ∨ ¬ aINV(x0[n1]._1) ∨ x0[n1]._2 ≠ (asn1 ' + x0 + (as, n0 + 1) ')[n1]._2 + 1 ∨ ¬ move(IOAut(astart, astep, aext))((asn1 ' + x0 + (as, n0 + 1) ')[n1]._1, cext !(caf((asn1 ' + x0 + (as, n0 + 1) ')[n1]._2) '), x0[n1]._1)) ∨ (¬ t(csf((asn1 ' + x0 + (as, n0 + 1) ')[n1]._2), (asn1 ' + x0 + (as, n0 + 1) ')[n1]._1) ∨ ¬ aINV((asn1 ' + x0 + (as, n0 + 1) ')[n1]._1)) ∨ ¬ t(csf(x0[n1]._2), x0[n1]._1) ∨ ¬ aINV(x0[n1]._1) ⊦
Used terms: λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1), λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1), (asn1 ' + x0 + (as, n0 + 1) ')[n1], x0[n1]
| ⊦ edge(vs × es)(a, b) ↔ es(a, b) ∧ vs(a) ∧ vs(b) |
| (as1, n0) = x0.last, (asn1 ' + x0)[n1] = (as3, n3), x0[n1] = (as2, n3 + 1), (asn1 ' + x0 + (as, n0 + 1) ')[n] = (as0, n2), ⌜ef⌝ = cext !(⌜caf⌝ ), x0 ≠ [], n1 < # x0, aINV(as2), aINV(as3), aINV(as1), aINV(as), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as3, cext !(caf(n3) '), as2), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n3 + 1), as2), t(csf(n3), as3), t(csf(n0), as1), t(csf(n0 + 1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ( ¬ aINV((asn1 ' + x0 + (as, n0 + 1) ')[n1]._1) ∨ ¬ aINV(x0[n1]._1) ∨ x0[n1]._2 ≠ (asn1 ' + x0 + (as, n0 + 1) ')[n1]._2 + 1 ∨ ¬ move(IOAut(astart, astep, aext))((asn1 ' + x0 + (as, n0 + 1) ')[n1]._1, cext !(caf((asn1 ' + x0 + (as, n0 + 1) ')[n1]._2) '), x0[n1]._1)) ∨ (¬ t(csf((asn1 ' + x0 + (as, n0 + 1) ')[n1]._2), (asn1 ' + x0 + (as, n0 + 1) ')[n1]._1) ∨ ¬ aINV((asn1 ' + x0 + (as, n0 + 1) ')[n1]._1)) ∨ ¬ t(csf(x0[n1]._2), x0[n1]._1) ∨ ¬ aINV(x0[n1]._1) ⊦ |
(as1, n0) = x0.last, (asn1 ' + x0 + (as, n0 + 1) ')[n] = (as0, n2), x0[n1] = (as2, n3 + 1), (asn1 ' + x0)[n1] = (as3, n3), ⌜ef⌝ = cext !(⌜caf⌝ ), x0 ≠ [], n1 < # x0, aINV(as), aINV(as1), aINV(as3), aINV(as2), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), move(IOAut(astart, astep, aext))(as3, cext !(caf(n3) '), as2), t(csf(n0 + 1), as), t(csf(n0), as1), t(csf(n3), as3), t(csf(n3 + 1), as2), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1), x0[n1]._2 ≠ (asn1 ' + x0 + (as, n0 + 1) ')[n1]._2 + 1 ∨ ¬ move(IOAut(astart, astep, aext))((asn1 ' + x0 + (as, n0 + 1) ')[n1]._1, cext !(caf((asn1 ' + x0 + (as, n0 + 1) ')[n1]._2) '), x0[n1]._1) ∨ ¬ t(csf((asn1 ' + x0 + (as, n0 + 1) ')[n1]._2), (asn1 ' + x0 + (as, n0 + 1) ')[n1]._1) ∨ ¬ aINV((asn1 ' + x0 + (as, n0 + 1) ')[n1]._1) ∨ ¬ t(csf(x0[n1]._2), x0[n1]._1) ∨ ¬ aINV(x0[n1]._1) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list
| (as1, n0) = x0.last, (asn1 ' + x0 + (as, n0 + 1) ')[n] = (as0, n2), x0[n1] = (as2, n3 + 1), (asn1 ' + x0)[n1] = (as3, n3), ⌜ef⌝ = cext !(⌜caf⌝ ), x0 ≠ [], n1 < # x0, aINV(as), aINV(as1), aINV(as3), aINV(as2), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), move(IOAut(astart, astep, aext))(as3, cext !(caf(n3) '), as2), t(csf(n0 + 1), as), t(csf(n0), as1), t(csf(n3), as3), t(csf(n3 + 1), as2), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1), x0[n1]._2 ≠ (asn1 ' + x0 + (as, n0 + 1) ')[n1]._2 + 1 ∨ ¬ move(IOAut(astart, astep, aext))((asn1 ' + x0 + (as, n0 + 1) ')[n1]._1, cext !(caf((asn1 ' + x0 + (as, n0 + 1) ')[n1]._2) '), x0[n1]._1) ∨ ¬ t(csf((asn1 ' + x0 + (as, n0 + 1) ')[n1]._2), (asn1 ' + x0 + (as, n0 + 1) ')[n1]._1) ∨ ¬ aINV((asn1 ' + x0 + (as, n0 + 1) ')[n1]._1) ∨ ¬ t(csf(x0[n1]._2), x0[n1]._1) ∨ ¬ aINV(x0[n1]._1) ⊦ |
(as1, n0) = x0.last, (asn1 ' + x0)[n1] = (as3, n3), x0[n1] = (as2, n3 + 1), (asn1 ' + x0 + (as, n0 + 1) ')[n] = (as0, n2), x0[n1] = (as4, n4), ⌜ef⌝ = cext !(⌜caf⌝ ), x0 ≠ [], n1 < # x0, aINV(as2), aINV(as3), aINV(as1), aINV(as), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as3, cext !(caf(n3) '), as2), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n3 + 1), as2), t(csf(n3), as3), t(csf(n0), as1), t(csf(n0 + 1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), n4 ≠ (asn1 ' + x0 + (as, n0 + 1) ')[n1]._2 + 1 ∨ ¬ move(IOAut(astart, astep, aext))((asn1 ' + x0 + (as, n0 + 1) ')[n1]._1, cext !(caf((asn1 ' + x0 + (as, n0 + 1) ')[n1]._2) '), as4) ∨ ¬ t(csf((asn1 ' + x0 + (as, n0 + 1) ')[n1]._2), (asn1 ' + x0 + (as, n0 + 1) ')[n1]._1) ∨ ¬ aINV((asn1 ' + x0 + (as, n0 + 1) ')[n1]._1) ∨ ¬ t(csf(n4), as4) ∨ ¬ aINV(as4) ⊦
Used terms: as4, n4
| (as1, n0) = x0.last, (asn1 ' + x0)[n1] = (as3, n3), x0[n1] = (as2, n3 + 1), (asn1 ' + x0 + (as, n0 + 1) ')[n] = (as0, n2), x0[n1] = (as4, n4), ⌜ef⌝ = cext !(⌜caf⌝ ), x0 ≠ [], n1 < # x0, aINV(as2), aINV(as3), aINV(as1), aINV(as), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as3, cext !(caf(n3) '), as2), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n3 + 1), as2), t(csf(n3), as3), t(csf(n0), as1), t(csf(n0 + 1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), n4 ≠ (asn1 ' + x0 + (as, n0 + 1) ')[n1]._2 + 1 ∨ ¬ move(IOAut(astart, astep, aext))((asn1 ' + x0 + (as, n0 + 1) ')[n1]._1, cext !(caf((asn1 ' + x0 + (as, n0 + 1) ')[n1]._2) '), as4) ∨ ¬ t(csf((asn1 ' + x0 + (as, n0 + 1) ')[n1]._2), (asn1 ' + x0 + (as, n0 + 1) ')[n1]._1) ∨ ¬ aINV((asn1 ' + x0 + (as, n0 + 1) ')[n1]._1) ∨ ¬ t(csf(n4), as4) ∨ ¬ aINV(as4) ⊦ |
(as1, n0) = x0.last, (asn1 ' + x0)[n1] = (as3, n3), x0[n1] = (as2, n3 + 1), (asn1 ' + x0 + (as, n0 + 1) ')[n] = (as0, n2), ⌜ef⌝ = cext !(⌜caf⌝ ), x0 ≠ [], n1 < # x0, aINV(as), aINV(as1), aINV(as3), aINV(as2), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), move(IOAut(astart, astep, aext))(as3, cext !(caf(n3) '), as2), t(csf(n0 + 1), as), t(csf(n0), as1), t(csf(n3), as3), t(csf(n3 + 1), as2), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1), n3 ≠ (asn1 ' + x0 + (as, n0 + 1) ')[n1]._2 ∨ ¬ move(IOAut(astart, astep, aext))((asn1 ' + x0 + (as, n0 + 1) ')[n1]._1, cext !(caf((asn1 ' + x0 + (as, n0 + 1) ')[n1]._2) '), as2) ∨ ¬ t(csf((asn1 ' + x0 + (as, n0 + 1) ')[n1]._2), (asn1 ' + x0 + (as, n0 + 1) ')[n1]._1) ∨ ¬ aINV((asn1 ' + x0 + (as, n0 + 1) ')[n1]._1) ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m + n = m + n0 ↔ n = n0; (s) a: ⊦ (x + y) + z = x + y + z; from specification list
| (as1, n0) = x0.last, (asn1 ' + x0)[n1] = (as3, n3), x0[n1] = (as2, n3 + 1), (asn1 ' + x0 + (as, n0 + 1) ')[n] = (as0, n2), ⌜ef⌝ = cext !(⌜caf⌝ ), x0 ≠ [], n1 < # x0, aINV(as), aINV(as1), aINV(as3), aINV(as2), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), move(IOAut(astart, astep, aext))(as3, cext !(caf(n3) '), as2), t(csf(n0 + 1), as), t(csf(n0), as1), t(csf(n3), as3), t(csf(n3 + 1), as2), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1), n3 ≠ (asn1 ' + x0 + (as, n0 + 1) ')[n1]._2 ∨ ¬ move(IOAut(astart, astep, aext))((asn1 ' + x0 + (as, n0 + 1) ')[n1]._1, cext !(caf((asn1 ' + x0 + (as, n0 + 1) ')[n1]._2) '), as2) ∨ ¬ t(csf((asn1 ' + x0 + (as, n0 + 1) ')[n1]._2), (asn1 ' + x0 + (as, n0 + 1) ')[n1]._1) ∨ ¬ aINV((asn1 ' + x0 + (as, n0 + 1) ')[n1]._1) ⊦ |
(as1, n0) = x0.last, (asn1 ' + x0 + (as, n0 + 1) ')[n] = (as0, n2), x0[n1] = (as2, n3 + 1), (asn1 ' + x0)[n1] = (as3, n3), (asn1 ' + x0 + (as, n0 + 1) ')[n1] = (as4, n4), ⌜ef⌝ = cext !(⌜caf⌝ ), x0 ≠ [], n1 < # x0, aINV(as2), aINV(as3), aINV(as1), aINV(as), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as3, cext !(caf(n3) '), as2), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n3 + 1), as2), t(csf(n3), as3), t(csf(n0), as1), t(csf(n0 + 1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), n3 ≠ n4 ∨ ¬ move(IOAut(astart, astep, aext))(as4, cext !(caf(n4) '), as2) ∨ ¬ t(csf(n4), as4) ∨ ¬ aINV(as4) ⊦
Used terms: as4, n4
| (as1, n0) = x0.last, (asn1 ' + x0 + (as, n0 + 1) ')[n] = (as0, n2), x0[n1] = (as2, n3 + 1), (asn1 ' + x0)[n1] = (as3, n3), (asn1 ' + x0 + (as, n0 + 1) ')[n1] = (as4, n4), ⌜ef⌝ = cext !(⌜caf⌝ ), x0 ≠ [], n1 < # x0, aINV(as2), aINV(as3), aINV(as1), aINV(as), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as3, cext !(caf(n3) '), as2), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n3 + 1), as2), t(csf(n3), as3), t(csf(n0), as1), t(csf(n0 + 1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), n3 ≠ n4 ∨ ¬ move(IOAut(astart, astep, aext))(as4, cext !(caf(n4) '), as2) ∨ ¬ t(csf(n4), as4) ∨ ¬ aINV(as4) ⊦ |
⊦ n < # x → (x + y)[n] = x[n]
(as1, n0) = x0.last, (asn1 ' + x0 + (as, n0 + 1) ')[n1] = (as4, n4), (asn1 ' + x0)[n1] = (as3, n3), x0[n1] = (as2, n3 + 1), (asn1 ' + x0 + (as, n0 + 1) ')[n] = (as0, n2), ⌜ef⌝ = cext !(⌜caf⌝ ), x0 ≠ [], n1 < # x0, aINV(as), aINV(as1), aINV(as3), aINV(as2), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), move(IOAut(astart, astep, aext))(as3, cext !(caf(n3) '), as2), t(csf(n0 + 1), as), t(csf(n0), as1), t(csf(n3), as3), t(csf(n3 + 1), as2), ¬ n1 < # asn1 ', ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1), n3 ≠ n4 ∨ ¬ move(IOAut(astart, astep, aext))(as4, cext !(caf(n4) '), as2) ∨ ¬ t(csf(n4), as4) ∨ ¬ aINV(as4) ⊦
Used simplifier rules: ⊦ n < # x → (x + y)[n] = x[n]; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ # a ' = 0 +1; (s) ⊦ m < 1 ↔ m = 0; (s) lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic ⊦ a '[0] = a; (s) ⊦ x ≠ [] → x[0] = x.head; (s) ⊦ 0 < m ↔ m ≠ 0; (s) ⊦ # x = 0 ↔ x = []; (s) Used terms: asn1 ', x0 + (as, n0 + 1) ', n1
| ⊦ n < # x → (x + y)[n] = x[n] |
| (as1, n0) = x0.last, (asn1 ' + x0 + (as, n0 + 1) ')[n1] = (as4, n4), (asn1 ' + x0)[n1] = (as3, n3), x0[n1] = (as2, n3 + 1), (asn1 ' + x0 + (as, n0 + 1) ')[n] = (as0, n2), ⌜ef⌝ = cext !(⌜caf⌝ ), x0 ≠ [], n1 < # x0, aINV(as), aINV(as1), aINV(as3), aINV(as2), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), move(IOAut(astart, astep, aext))(as3, cext !(caf(n3) '), as2), t(csf(n0 + 1), as), t(csf(n0), as1), t(csf(n3), as3), t(csf(n3 + 1), as2), ¬ n1 < # asn1 ', ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1), n3 ≠ n4 ∨ ¬ move(IOAut(astart, astep, aext))(as4, cext !(caf(n4) '), as2) ∨ ¬ t(csf(n4), as4) ∨ ¬ aINV(as4) ⊦ |
(as1, n0) = x0.last, (asn1 ' + x0 + (as, n0 + 1) ')[n] = (as0, n2), x0[n1] = (as2, n3 + 1), x0[n1 - 1] = (as3, n3), (x0 + (as, n0 + 1) ')[n1 - 1] = (as4, n4), ⌜ef⌝ = cext !(⌜caf⌝ ), n1 ≠ 0, x0 ≠ [], n1 < # x0, aINV(as2), aINV(as3), aINV(as1), aINV(as), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as3, cext !(caf(n3) '), as2), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n3 + 1), as2), t(csf(n3), as3), t(csf(n0), as1), t(csf(n0 + 1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), n3 ≠ n4 ∨ ¬ move(IOAut(astart, astep, aext))(as4, cext !(caf(n4) '), as2) ∨ ¬ t(csf(n4), as4) ∨ ¬ aINV(as4) ⊦
Used simplifier rules: ⊦ m < 1 ↔ m = 0; (s) ⊦ # a ' = 0 +1; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ¬ n < # x → (x + y)[n] = y[n - # x]; (s)
| (as1, n0) = x0.last, (asn1 ' + x0 + (as, n0 + 1) ')[n] = (as0, n2), x0[n1] = (as2, n3 + 1), x0[n1 - 1] = (as3, n3), (x0 + (as, n0 + 1) ')[n1 - 1] = (as4, n4), ⌜ef⌝ = cext !(⌜caf⌝ ), n1 ≠ 0, x0 ≠ [], n1 < # x0, aINV(as2), aINV(as3), aINV(as1), aINV(as), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as3, cext !(caf(n3) '), as2), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n3 + 1), as2), t(csf(n3), as3), t(csf(n0), as1), t(csf(n0 + 1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), n3 ≠ n4 ∨ ¬ move(IOAut(astart, astep, aext))(as4, cext !(caf(n4) '), as2) ∨ ¬ t(csf(n4), as4) ∨ ¬ aINV(as4) ⊦ |
(as1, n0) = x0.last, (x0 + (as, n0 + 1) ')[n5] = (as4, n4), x0[n5] = (as3, n3), x0[n1] = (as2, n3 + 1), (asn1 ' + x0 + (as, n0 + 1) ')[n] = (as0, n2), n1 = n5 + 1, ⌜ef⌝ = cext !(⌜caf⌝ ), n1 ≠ 0, x0 ≠ [], n1 < # x0, aINV(as), aINV(as1), aINV(as3), aINV(as2), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), move(IOAut(astart, astep, aext))(as3, cext !(caf(n3) '), as2), t(csf(n0 + 1), as), t(csf(n0), as1), t(csf(n3), as3), t(csf(n3 + 1), as2), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1), n3 ≠ n4 ∨ ¬ move(IOAut(astart, astep, aext))(as4, cext !(caf(n4) '), as2) ∨ ¬ t(csf(n4), as4) ∨ ¬ aINV(as4) ⊦
Used simplifier rules: n ≠ 0 ⊦ m = n - 1 ↔ n = m + 1; (elim) Used terms: n1, n5
| (as1, n0) = x0.last, (x0 + (as, n0 + 1) ')[n5] = (as4, n4), x0[n5] = (as3, n3), x0[n1] = (as2, n3 + 1), (asn1 ' + x0 + (as, n0 + 1) ')[n] = (as0, n2), n1 = n5 + 1, ⌜ef⌝ = cext !(⌜caf⌝ ), n1 ≠ 0, x0 ≠ [], n1 < # x0, aINV(as), aINV(as1), aINV(as3), aINV(as2), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), move(IOAut(astart, astep, aext))(as3, cext !(caf(n3) '), as2), t(csf(n0 + 1), as), t(csf(n0), as1), t(csf(n3), as3), t(csf(n3 + 1), as2), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1), n3 ≠ n4 ∨ ¬ move(IOAut(astart, astep, aext))(as4, cext !(caf(n4) '), as2) ∨ ¬ t(csf(n4), as4) ∨ ¬ aINV(as4) ⊦ |
(as1, n0) = x0.last, (asn1 ' + x0 + (as, n0 + 1) ')[n] = (as0, n2), x0[n5 + 1] = (as2, n3 + 1), x0[n5] = (as3, n3), (x0 + (as, n0 + 1) ')[n5] = (as4, n4), ⌜ef⌝ = cext !(⌜caf⌝ ), x0 ≠ [], n5 + 1 < # x0, aINV(as2), aINV(as3), aINV(as1), aINV(as), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as3, cext !(caf(n3) '), as2), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n3 + 1), as2), t(csf(n3), as3), t(csf(n0), as1), t(csf(n0 + 1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), n3 ≠ n4 ∨ ¬ move(IOAut(astart, astep, aext))(as4, cext !(caf(n4) '), as2) ∨ ¬ t(csf(n4), as4) ∨ ¬ aINV(as4) ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m + 1 ≠ 0; (s)
| (as1, n0) = x0.last, (asn1 ' + x0 + (as, n0 + 1) ')[n] = (as0, n2), x0[n5 + 1] = (as2, n3 + 1), x0[n5] = (as3, n3), (x0 + (as, n0 + 1) ')[n5] = (as4, n4), ⌜ef⌝ = cext !(⌜caf⌝ ), x0 ≠ [], n5 + 1 < # x0, aINV(as2), aINV(as3), aINV(as1), aINV(as), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as3, cext !(caf(n3) '), as2), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n3 + 1), as2), t(csf(n3), as3), t(csf(n0), as1), t(csf(n0 + 1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), n3 ≠ n4 ∨ ¬ move(IOAut(astart, astep, aext))(as4, cext !(caf(n4) '), as2) ∨ ¬ t(csf(n4), as4) ∨ ¬ aINV(as4) ⊦ |
⊦ n < # x → (x + y)[n] = x[n]
Used simplifier rules: ⊦ ¬ n < # x → (x + y)[n] = y[n - # x]; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ¬ m < n → ¬ m + m0 < n; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: x0, (as, n0 + 1) ', n5
| ⊦ n < # x → (x + y)[n] = x[n] |
| (as1, n0) = (asn1 ' + x0).last, (asn1 ' + x0 + (as, n0 + 1) ')[n] = (as0, n2), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as1), aINV(as), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0), as1), t(csf(n0 + 1), as), n1 ≤ # x0, ¬ n1 < # x0, ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0 + (as, n0 + 1) ')[n1], (x0 + (as, n0 + 1) ')[n1]), ¬ traceω(IOAut(astart, astep, aext))(ef), n1 < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n1], x0[n1]), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ |
(as1, n0) = (asn1 ' + x0).last, (asn1 ' + x0 + (as, n0 + 1) ')[n] = (as0, n2), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as1), aINV(as), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0), as1), t(csf(n0 + 1), as), ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((as1, n0), (as, n0 + 1)), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦
Used simplifier rules: ⊦ ¬ n < n; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ (a ' + x + y)[# x] = (a ' + x).last; (s) ⊦ m ≤ m; (s) ⊦ n = # x → (x + a ')[n] = a; (s) ⊦ m ≤ n → (n ≤ m ↔ m = n); (s) ⊦ m < n ↔ ¬ n ≤ m; (ss)
| (as1, n0) = (asn1 ' + x0).last, (asn1 ' + x0 + (as, n0 + 1) ')[n] = (as0, n2), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as1), aINV(as), cINV(csf(n0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asn1), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0), as1), t(csf(n0 + 1), as), ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((as1, n0), (as, n0 + 1)), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. ¬ # x0 < n → t(csf((asn1 ' + x0)[n]._2), (asn1 ' + x0)[n]._1) ∧ aINV((asn1 ' + x0)[n]._1), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((asn1 ' + x0)[n], x0[n]), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ |
⊦ edge(vs × es)(a, b) ↔ es(a, b) ∧ vs(a) ∧ vs(b)
Used simplifier rules: ⊦ m + n = m + n0 ↔ n = n0; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1), λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1), (as1, n0), (as, n0 + 1)
| ⊦ edge(vs × es)(a, b) ↔ es(a, b) ∧ vs(a) ∧ vs(b) |
| ⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∃ nf. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (nf(0)) ∧ pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (⌜nf⌝ ) ⊦ |
⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(0)), pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (⌜asnf⌝ ), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦
| ⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(0)), pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (⌜asnf⌝ ), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs) ⊦ |
⊦ pathp(g)(σ) ↔ (∀ n. ⌜n⌝ < # σ → dom(g)(σ[n])) ∧ (∀ n. ⌜n + 1⌝ < # σ → edge(g)(σ[n], σ[n + 1]))
⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(0)), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ n. ⌜n⌝ < # ⌜asnf⌝ → dom ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (⌜asnf⌝ [n]), ∀ n. ⌜n + 1⌝ < # ⌜asnf⌝ → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (⌜asnf⌝ [n], ⌜asnf⌝ [n + 1]) ⊦
Used terms: (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1)), ⌜asnf⌝
| ⊦ pathp(g)(σ) ↔ (∀ n. ⌜n⌝ < # σ → dom(g)(σ[n])) ∧ (∀ n. ⌜n + 1⌝ < # σ → edge(g)(σ[n], σ[n + 1])) |
| ⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(0)), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ n. ⌜n⌝ < # ⌜asnf⌝ → dom ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (⌜asnf⌝ [n]), ∀ n. ⌜n + 1⌝ < # ⌜asnf⌝ → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (⌜asnf⌝ [n], ⌜asnf⌝ [n + 1]) ⊦ |
⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(0)), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1) ⊦
Used simplifier rules: ⊦ dom(vs × es) = vs; (s) ⊦ ⌜nf⌝ [n] = nf(n); (s) ⊦ ⌜m⌝ < ∞; (s) ⊦ # ⌜nf⌝ = ∞; (s) add-comm: ⊦ n∞1 + n∞2 = n∞2 + n∞1; from specification nat-inf add-assoc: ⊦ (n∞ + n∞1) + n∞2 = n∞ + n∞1 + n∞2; from specification nat-inf ⊦ ⌜n⌝ ≠ ∞; (s) ⊦ ⌜m⌝ + n∞ = ∞ ↔ n∞ = ∞; (s) ⊦ n∞ < ∞ ↔ n∞ ≠ ∞; (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ ⌜m + n⌝ = ⌜m⌝ + ⌜n⌝ ; (s)
| ⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(0)), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1) ⊦ |
⊦ isroot(g)(b) ↔ dom(g)(b) ∧ (∀ a. ¬ edge(g)(a, b))
⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), dom ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, asnf(0)) ⊦
Used terms: (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1)), asnf(0)
| ⊦ isroot(g)(b) ↔ dom(g)(b) ∧ (∀ a. ¬ edge(g)(a, b)) |
| ⌜ef⌝ = cext !(⌜caf⌝ ), cstart(csf(0)), dom ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, asnf(0)) ⊦ |
⌜ef⌝ = cext !(⌜caf⌝ ), aINV(asnf(0)._1), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(asnf(0)._2), asnf(0)._1), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, asnf(0)), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1) ⊦
Used simplifier rules: ⊦ dom(vs × es) = vs; (s)
| ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(asnf(0)._1), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(asnf(0)._2), asnf(0)._1), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, asnf(0)), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1) ⊦ |
asnf(0) = (as, n), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, asnf(0)) ⊦
Used terms: as, n
| asnf(0) = (as, n), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, asnf(0)) ⊦ |
asnf(0) = (as, n), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n)), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1) ⊦
| asnf(0) = (as, n), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n)), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1) ⊦ |
asnf(0) = (as, n), n = 0, ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n)) ⊦
asnf(0) = (as, n), ⌜ef⌝ = cext !(⌜caf⌝ ), n ≠ 0, aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n)) ⊦
Used formulas: n = 0
| asnf(0) = (as, n), n = 0, ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n)) ⊦ |
asnf(0) = (as, 0), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, 0)), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1) ⊦
| asnf(0) = (as, 0), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, 0)), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1) ⊦ |
asnf(0) = (as, 0), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, 0)), ∀ n. asnf(n)._2 = n ⊦
asnf(0) = (as, 0), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, 0)) ⊦ ∀ n. asnf(n)._2 = n
Used formulas: ∀ n. asnf(n)._2 = n
| asnf(0) = (as, 0), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, 0)), ∀ n. asnf(n)._2 = n ⊦ |
asnf(0) = (as, 0), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. asnf(n)._2 = n, ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, 0)), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1), ∀ n. move(IOAut(astart, astep, aext))(asnf(n)._1, cext !(caf(n) '), asnf(n + 1)._1) ⊦
asnf(0) = (as, 0), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. asnf(n)._2 = n, ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, 0)), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1) ⊦ ∀ n. move(IOAut(astart, astep, aext))(asnf(n)._1, cext !(caf(n) '), asnf(n + 1)._1)
Used formulas: ∀ n. move(IOAut(astart, astep, aext))(asnf(n)._1, cext !(caf(n) '), asnf(n + 1)._1)
| asnf(0) = (as, 0), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. asnf(n)._2 = n, ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, 0)), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1), ∀ n. move(IOAut(astart, astep, aext))(asnf(n)._1, cext !(caf(n) '), asnf(n + 1)._1) ⊦ |
start(sf(0)), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)) ⊦ trace(IOAut(start, step, ext))(cext !(⌜caf⌝ ))
asnf(0) = (as, 0), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ astart(asnf(0)._1), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. move(IOAut(astart, astep, aext))(asnf(n)._1, cext !(caf(n) '), asnf(n + 1)._1), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, 0)), ∀ n. asnf(n)._2 = n ⊦
Used simplifier rules: ⊦ trace(ioa)(⌜ef⌝ ) ↔ traceω(ioa)(ef); (s) Used terms: λ n. asnf(n)._1, aext, astep, astart, caf, cext
| start(sf(0)), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)) ⊦ trace(IOAut(start, step, ext))(cext !(⌜caf⌝ )) |
| asnf(0) = (as, 0), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ astart(asnf(0)._1), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. move(IOAut(astart, astep, aext))(asnf(n)._1, cext !(caf(n) '), asnf(n + 1)._1), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, 0)), ∀ n. asnf(n)._2 = n ⊦ |
asnf(0) = (as, 0), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ astart(as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. move(IOAut(astart, astep, aext))(asnf(n)._1, cext !(caf(n) '), asnf(n + 1)._1), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, 0)), ∀ n. asnf(n)._2 = n ⊦
| asnf(0) = (as, 0), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ astart(as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. move(IOAut(astart, astep, aext))(asnf(n)._1, cext !(caf(n) '), asnf(n + 1)._1), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, 0)), ∀ n. asnf(n)._2 = n ⊦ |
Used terms: csf(0), as
| asnf(0) = (as, 0), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. asnf(n)._2 = n, ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, 0)), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1) ⊦ ∀ n. move(IOAut(astart, astep, aext))(asnf(n)._1, cext !(caf(n) '), asnf(n + 1)._1) |
asnf(0) = (as, 0), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ move(IOAut(astart, astep, aext))(asnf(n)._1, cext !(caf(n) '), asnf(n + 1)._1), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, 0)), ∀ n. asnf(n)._2 = n ⊦
| asnf(0) = (as, 0), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ move(IOAut(astart, astep, aext))(asnf(n)._1, cext !(caf(n) '), asnf(n + 1)._1), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, 0)), ∀ n. asnf(n)._2 = n ⊦ |
asnf(0) = (as, 0), asnf(n) = (as0, n0), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ move(IOAut(astart, astep, aext))(as0, cext !(caf(n) '), asnf(n + 1)._1), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. asnf(n)._2 = n, ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, 0)), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1) ⊦
Used terms: as0, n0
| asnf(0) = (as, 0), asnf(n) = (as0, n0), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ move(IOAut(astart, astep, aext))(as0, cext !(caf(n) '), asnf(n + 1)._1), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. asnf(n)._2 = n, ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, 0)), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1) ⊦ |
asnf(n) = (as0, n0), asnf(0) = (as, 0), asnf(n + 1) = (as1, n1), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ move(IOAut(astart, astep, aext))(as0, cext !(caf(n) '), as1), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, 0)), ∀ n. asnf(n)._2 = n ⊦
Used terms: as1, n1
| asnf(n) = (as0, n0), asnf(0) = (as, 0), asnf(n + 1) = (as1, n1), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ move(IOAut(astart, astep, aext))(as0, cext !(caf(n) '), as1), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, 0)), ∀ n. asnf(n)._2 = n ⊦ |
asnf(n + 1) = (as1, n1), asnf(0) = (as, 0), asnf(n) = (as0, n0), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ move(IOAut(astart, astep, aext))(as0, cext !(caf(n) '), as1), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. asnf(n)._2 = n, ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, 0)), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1) ⊦
Used terms: n
| asnf(n + 1) = (as1, n1), asnf(0) = (as, 0), asnf(n) = (as0, n0), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ move(IOAut(astart, astep, aext))(as0, cext !(caf(n) '), as1), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. asnf(n)._2 = n, ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, 0)), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1) ⊦ |
asnf(n) = (as0, n0), asnf(0) = (as, 0), asnf(n + 1) = (as1, n0 + 1), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as0), aINV(as1), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(as0, cext !(caf(n0) '), as1), t(csf(n0), as0), t(csf(n0 + 1), as1), t(csf(0), as), ¬ move(IOAut(astart, astep, aext))(as0, cext !(caf(n) '), as1), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, 0)), ∀ n. asnf(n)._2 = n ⊦
Used simplifier rules: ⊦ edge(vs × es)(a, b) ↔ es(a, b) ∧ vs(a) ∧ vs(b); (ws)
| asnf(n) = (as0, n0), asnf(0) = (as, 0), asnf(n + 1) = (as1, n0 + 1), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as0), aINV(as1), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(as0, cext !(caf(n0) '), as1), t(csf(n0), as0), t(csf(n0 + 1), as1), t(csf(0), as), ¬ move(IOAut(astart, astep, aext))(as0, cext !(caf(n) '), as1), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, 0)), ∀ n. asnf(n)._2 = n ⊦ |
Used terms: n
| asnf(0) = (as, 0), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, 0)) ⊦ ∀ n. asnf(n)._2 = n |
asnf(0) = (as, 0), ⌜ef⌝ = cext !(⌜caf⌝ ), asnf(n)._2 ≠ n, aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, 0)), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1) ⊦
| asnf(0) = (as, 0), ⌜ef⌝ = cext !(⌜caf⌝ ), asnf(n)._2 ≠ n, aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, 0)), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1) ⊦ |
asnf(0) = (as, 0), asnf(n) = (as0, n0), ⌜ef⌝ = cext !(⌜caf⌝ ), n0 ≠ n, aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, 0)) ⊦
Used terms: as0, n0
| asnf(0) = (as, 0), asnf(n) = (as0, n0), ⌜ef⌝ = cext !(⌜caf⌝ ), n0 ≠ n, aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, 0)) ⊦ |
asnf(n) = (as0, n0), asnf(0) = (as, 0), ⌜ef⌝ = cext !(⌜caf⌝ ), n0 ≠ n, aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, 0)), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1) ⊦
| asnf(n) = (as0, n0), asnf(0) = (as, 0), ⌜ef⌝ = cext !(⌜caf⌝ ), n0 ≠ n, aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, 0)), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1) ⊦ |
asnf(0) = (as, 0), asnf(n1 +1) = (as0, n0), ⌜ef⌝ = cext !(⌜caf⌝ ), n0 ≠ n1 +1, aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, 0)), ∀ asnf, as0, n0, as, ef, cext, caf, aINV, cstart, csf, cstep, t, astart, astep, aext, cINV. ¬ ( asnf(n1) = (as0, n0) ∧ asnf(0) = (as, 0) ∧ ⌜ef⌝ = cext !(⌜caf⌝ ) ∧ n0 ≠ n1 ∧ aINV(as) ∧ cstart(csf(0)) ∧ fragω(IOAut(cstart, cstep, cext))(csf, caf) ∧ t(csf(0), as) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, 0))) ∧ (∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el)) ∧ (∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass)) ∧ (∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass)) ∧ (∀ cs. cstart(cs) → cINV(cs)) ∧ (∀ as. astart(as) → aINV(as)) ∧ (∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0)) ∧ (∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0)) ∧ (∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as))) ∧ (∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as)) ∧ (∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as))) ∧ (∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs)) ∧ (∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1))) ∧ (∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1))) ⊦
Used simplifier rules: Nat freely generated by 0, +1;;
| asnf(0) = (as, 0), asnf(n1 +1) = (as0, n0), ⌜ef⌝ = cext !(⌜caf⌝ ), n0 ≠ n1 +1, aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, 0)), ∀ asnf, as0, n0, as, ef, cext, caf, aINV, cstart, csf, cstep, t, astart, astep, aext, cINV. ¬ ( asnf(n1) = (as0, n0) ∧ asnf(0) = (as, 0) ∧ ⌜ef⌝ = cext !(⌜caf⌝ ) ∧ n0 ≠ n1 ∧ aINV(as) ∧ cstart(csf(0)) ∧ fragω(IOAut(cstart, cstep, cext))(csf, caf) ∧ t(csf(0), as) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, 0))) ∧ (∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el)) ∧ (∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass)) ∧ (∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass)) ∧ (∀ cs. cstart(cs) → cINV(cs)) ∧ (∀ as. astart(as) → aINV(as)) ∧ (∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0)) ∧ (∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0)) ∧ (∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as))) ∧ (∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as)) ∧ (∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as))) ∧ (∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs)) ∧ (∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1))) ∧ (∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1))) ⊦ |
asnf(0) = (as, 0), asnf(n1 + 1) = (as0, n0), ⌜ef⌝ = cext !(⌜caf⌝ ), n0 ≠ n1 + 1, aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, 0)), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1), ∀ asnf0, as1, n, as2, ef0, cext0, caf0, aINV0, cstart0, csf0, cstep0, t0, astart0, astep0, aext0, cINV0. asnf0(n1) ≠ (as1, n) ∨ asnf0(0) ≠ (as2, 0) ∨ ⌜ef0⌝ ≠ cext0 !(⌜caf0⌝ ) ∨ n = n1 ∨ ¬ aINV0(as2) ∨ ¬ cstart0(csf0(0)) ∨ ¬ fragω(IOAut(cstart0, cstep0, cext0))(csf0, caf0) ∨ ¬ t0(csf0(0), as2) ∨ ¬ (∀ a. ¬ edge ( (λ asn. t0(csf0(asn._2), asn._1) ∧ aINV0(asn._1)) × (λ asn, asn0. aINV0(asn._1) ∧ aINV0(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart0, astep0, aext0))(asn._1, cext0 !(caf0(asn._2) '), asn0._1))) (a, (as2, 0))) ∨ ¬(∀ el. trace*(IOAut(cstart0, cstep0, cext0))(el) → trace*(IOAut(astart0, astep0, aext0))(el)) ∨ ¬(∀ cs. cstart0(cs) → (∃ ass. ∀ as. t0(cs, as) ∧ aINV0(as) ↔ as ∈ ass)) ∨ ¬(∀ as1, el. aINV0(as1) → (∃ ass. ∀ as2. move(IOAut(astart0, astep0, aext0))(as1, el, as2) ∧ aINV0(as2) ↔ as2 ∈ ass)) ∨ ¬(∀ cs. cstart0(cs) → cINV0(cs)) ∨ ¬(∀ as. astart0(as) → aINV0(as)) ∨ ¬(∀ cs, ca, cs0. cINV0(cs) ∧ cstep0(cs, ca, cs0) → cINV0(cs0)) ∨ ¬(∀ as, aa, as0. aINV0(as) ∧ astep0(as, aa, as0) → aINV0(as0)) ∨ ¬(∀ cs. cINV0(cs) → (∃ as. t0(cs, as) ∧ aINV0(as))) ∨ ¬(∀ cs, as. cstart0(cs) ∧ t0(cs, as) ∧ aINV0(as) → astart0(as)) ∨ ¬ (∀ cs, ca, cs0, as0. cINV0(cs) ∧ cstep0(cs, ca, cs0) ∧ t0(cs0, as0) ∧ aINV0(as0) → (∃ as. aINV0(as) ∧ move(IOAut(astart0, astep0, aext0))(as, cext0 !(ca '), as0) ∧ t0(cs, as))) ∨ ¬(∀ cs. (∃ csl, cal. frag*(IOAut(cstart0, cstep0, cext0))(csl, cal) ∧ cstart0(csl[0]) ∧ cs = csl.last) → cINV0(cs)) ∨ ¬ (∀ n. edge ( (λ asn. t0(csf0(asn._2), asn._1) ∧ aINV0(asn._1)) × (λ asn, asn0. aINV0(asn._1) ∧ aINV0(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart0, astep0, aext0))(asn._1, cext0 !(caf0(asn._2) '), asn0._1))) (asnf0(n), asnf0(n + 1))) ∨ ¬(∀ n. t0(csf0(asnf0(n)._2), asnf0(n)._1) ∧ aINV0(asnf0(n)._1)) ⊦
Used simplifier rules: ⊦ m +1 = m + 1; (s)
| asnf(0) = (as, 0), asnf(n1 + 1) = (as0, n0), ⌜ef⌝ = cext !(⌜caf⌝ ), n0 ≠ n1 + 1, aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, 0)), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1), ∀ asnf0, as1, n, as2, ef0, cext0, caf0, aINV0, cstart0, csf0, cstep0, t0, astart0, astep0, aext0, cINV0. asnf0(n1) ≠ (as1, n) ∨ asnf0(0) ≠ (as2, 0) ∨ ⌜ef0⌝ ≠ cext0 !(⌜caf0⌝ ) ∨ n = n1 ∨ ¬ aINV0(as2) ∨ ¬ cstart0(csf0(0)) ∨ ¬ fragω(IOAut(cstart0, cstep0, cext0))(csf0, caf0) ∨ ¬ t0(csf0(0), as2) ∨ ¬ (∀ a. ¬ edge ( (λ asn. t0(csf0(asn._2), asn._1) ∧ aINV0(asn._1)) × (λ asn, asn0. aINV0(asn._1) ∧ aINV0(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart0, astep0, aext0))(asn._1, cext0 !(caf0(asn._2) '), asn0._1))) (a, (as2, 0))) ∨ ¬(∀ el. trace*(IOAut(cstart0, cstep0, cext0))(el) → trace*(IOAut(astart0, astep0, aext0))(el)) ∨ ¬(∀ cs. cstart0(cs) → (∃ ass. ∀ as. t0(cs, as) ∧ aINV0(as) ↔ as ∈ ass)) ∨ ¬(∀ as1, el. aINV0(as1) → (∃ ass. ∀ as2. move(IOAut(astart0, astep0, aext0))(as1, el, as2) ∧ aINV0(as2) ↔ as2 ∈ ass)) ∨ ¬(∀ cs. cstart0(cs) → cINV0(cs)) ∨ ¬(∀ as. astart0(as) → aINV0(as)) ∨ ¬(∀ cs, ca, cs0. cINV0(cs) ∧ cstep0(cs, ca, cs0) → cINV0(cs0)) ∨ ¬(∀ as, aa, as0. aINV0(as) ∧ astep0(as, aa, as0) → aINV0(as0)) ∨ ¬(∀ cs. cINV0(cs) → (∃ as. t0(cs, as) ∧ aINV0(as))) ∨ ¬(∀ cs, as. cstart0(cs) ∧ t0(cs, as) ∧ aINV0(as) → astart0(as)) ∨ ¬ (∀ cs, ca, cs0, as0. cINV0(cs) ∧ cstep0(cs, ca, cs0) ∧ t0(cs0, as0) ∧ aINV0(as0) → (∃ as. aINV0(as) ∧ move(IOAut(astart0, astep0, aext0))(as, cext0 !(ca '), as0) ∧ t0(cs, as))) ∨ ¬(∀ cs. (∃ csl, cal. frag*(IOAut(cstart0, cstep0, cext0))(csl, cal) ∧ cstart0(csl[0]) ∧ cs = csl.last) → cINV0(cs)) ∨ ¬ (∀ n. edge ( (λ asn. t0(csf0(asn._2), asn._1) ∧ aINV0(asn._1)) × (λ asn, asn0. aINV0(asn._1) ∧ aINV0(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart0, astep0, aext0))(asn._1, cext0 !(caf0(asn._2) '), asn0._1))) (asnf0(n), asnf0(n + 1))) ∨ ¬(∀ n. t0(csf0(asnf0(n)._2), asnf0(n)._1) ∧ aINV0(asnf0(n)._1)) ⊦ |
asnf(n1 + 1) = (as0, n0), asnf(0) = (as, 0), ⌜ef⌝ = cext !(⌜caf⌝ ), n0 ≠ n1 + 1, aINV(as), cstart(csf(0)), edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n1), asnf(n1 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ∀ asnf0, as1, n, as2, ef0, cext0, caf0, aINV0, cstart0, csf0, cstep0, t0, astart0, astep0, aext0, cINV0. asnf0(n1) ≠ (as1, n) ∨ asnf0(0) ≠ (as2, 0) ∨ ⌜ef0⌝ ≠ cext0 !(⌜caf0⌝ ) ∨ n = n1 ∨ ¬ aINV0(as2) ∨ ¬ cstart0(csf0(0)) ∨ ¬ fragω(IOAut(cstart0, cstep0, cext0))(csf0, caf0) ∨ ¬ t0(csf0(0), as2) ∨ ¬ (∀ a. ¬ edge ( (λ asn. t0(csf0(asn._2), asn._1) ∧ aINV0(asn._1)) × (λ asn, asn0. aINV0(asn._1) ∧ aINV0(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart0, astep0, aext0))(asn._1, cext0 !(caf0(asn._2) '), asn0._1))) (a, (as2, 0))) ∨ ¬(∀ el. trace*(IOAut(cstart0, cstep0, cext0))(el) → trace*(IOAut(astart0, astep0, aext0))(el)) ∨ ¬(∀ cs. cstart0(cs) → (∃ ass. ∀ as. t0(cs, as) ∧ aINV0(as) ↔ as ∈ ass)) ∨ ¬(∀ as1, el. aINV0(as1) → (∃ ass. ∀ as2. move(IOAut(astart0, astep0, aext0))(as1, el, as2) ∧ aINV0(as2) ↔ as2 ∈ ass)) ∨ ¬(∀ cs. cstart0(cs) → cINV0(cs)) ∨ ¬(∀ as. astart0(as) → aINV0(as)) ∨ ¬(∀ cs, ca, cs0. cINV0(cs) ∧ cstep0(cs, ca, cs0) → cINV0(cs0)) ∨ ¬(∀ as, aa, as0. aINV0(as) ∧ astep0(as, aa, as0) → aINV0(as0)) ∨ ¬(∀ cs. cINV0(cs) → (∃ as. t0(cs, as) ∧ aINV0(as))) ∨ ¬(∀ cs, as. cstart0(cs) ∧ t0(cs, as) ∧ aINV0(as) → astart0(as)) ∨ ¬ (∀ cs, ca, cs0, as0. cINV0(cs) ∧ cstep0(cs, ca, cs0) ∧ t0(cs0, as0) ∧ aINV0(as0) → (∃ as. aINV0(as) ∧ move(IOAut(astart0, astep0, aext0))(as, cext0 !(ca '), as0) ∧ t0(cs, as))) ∨ ¬(∀ cs. (∃ csl, cal. frag*(IOAut(cstart0, cstep0, cext0))(csl, cal) ∧ cstart0(csl[0]) ∧ cs = csl.last) → cINV0(cs)) ∨ ¬ (∀ n. edge ( (λ asn. t0(csf0(asn._2), asn._1) ∧ aINV0(asn._1)) × (λ asn, asn0. aINV0(asn._1) ∧ aINV0(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart0, astep0, aext0))(asn._1, cext0 !(caf0(asn._2) '), asn0._1))) (asnf0(n), asnf0(n + 1))) ∨ ¬(∀ n. t0(csf0(asnf0(n)._2), asnf0(n)._1) ∧ aINV0(asnf0(n)._1)), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, 0)) ⊦
Used terms: n1
| asnf(n1 + 1) = (as0, n0), asnf(0) = (as, 0), ⌜ef⌝ = cext !(⌜caf⌝ ), n0 ≠ n1 + 1, aINV(as), cstart(csf(0)), edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n1), asnf(n1 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ∀ asnf0, as1, n, as2, ef0, cext0, caf0, aINV0, cstart0, csf0, cstep0, t0, astart0, astep0, aext0, cINV0. asnf0(n1) ≠ (as1, n) ∨ asnf0(0) ≠ (as2, 0) ∨ ⌜ef0⌝ ≠ cext0 !(⌜caf0⌝ ) ∨ n = n1 ∨ ¬ aINV0(as2) ∨ ¬ cstart0(csf0(0)) ∨ ¬ fragω(IOAut(cstart0, cstep0, cext0))(csf0, caf0) ∨ ¬ t0(csf0(0), as2) ∨ ¬ (∀ a. ¬ edge ( (λ asn. t0(csf0(asn._2), asn._1) ∧ aINV0(asn._1)) × (λ asn, asn0. aINV0(asn._1) ∧ aINV0(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart0, astep0, aext0))(asn._1, cext0 !(caf0(asn._2) '), asn0._1))) (a, (as2, 0))) ∨ ¬(∀ el. trace*(IOAut(cstart0, cstep0, cext0))(el) → trace*(IOAut(astart0, astep0, aext0))(el)) ∨ ¬(∀ cs. cstart0(cs) → (∃ ass. ∀ as. t0(cs, as) ∧ aINV0(as) ↔ as ∈ ass)) ∨ ¬(∀ as1, el. aINV0(as1) → (∃ ass. ∀ as2. move(IOAut(astart0, astep0, aext0))(as1, el, as2) ∧ aINV0(as2) ↔ as2 ∈ ass)) ∨ ¬(∀ cs. cstart0(cs) → cINV0(cs)) ∨ ¬(∀ as. astart0(as) → aINV0(as)) ∨ ¬(∀ cs, ca, cs0. cINV0(cs) ∧ cstep0(cs, ca, cs0) → cINV0(cs0)) ∨ ¬(∀ as, aa, as0. aINV0(as) ∧ astep0(as, aa, as0) → aINV0(as0)) ∨ ¬(∀ cs. cINV0(cs) → (∃ as. t0(cs, as) ∧ aINV0(as))) ∨ ¬(∀ cs, as. cstart0(cs) ∧ t0(cs, as) ∧ aINV0(as) → astart0(as)) ∨ ¬ (∀ cs, ca, cs0, as0. cINV0(cs) ∧ cstep0(cs, ca, cs0) ∧ t0(cs0, as0) ∧ aINV0(as0) → (∃ as. aINV0(as) ∧ move(IOAut(astart0, astep0, aext0))(as, cext0 !(ca '), as0) ∧ t0(cs, as))) ∨ ¬(∀ cs. (∃ csl, cal. frag*(IOAut(cstart0, cstep0, cext0))(csl, cal) ∧ cstart0(csl[0]) ∧ cs = csl.last) → cINV0(cs)) ∨ ¬ (∀ n. edge ( (λ asn. t0(csf0(asn._2), asn._1) ∧ aINV0(asn._1)) × (λ asn, asn0. aINV0(asn._1) ∧ aINV0(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart0, astep0, aext0))(asn._1, cext0 !(caf0(asn._2) '), asn0._1))) (asnf0(n), asnf0(n + 1))) ∨ ¬(∀ n. t0(csf0(asnf0(n)._2), asnf0(n)._1) ∧ aINV0(asnf0(n)._1)), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, 0)) ⊦ |
asnf(0) = (as, 0), asnf(n1 + 1) = (as0, asnf(n1)._2 + 1), ⌜ef⌝ = cext !(⌜caf⌝ ), asnf(n1)._2 ≠ n1, aINV(asnf(n1)._1), aINV(as0), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(asnf(n1)._1, cext !(caf(asnf(n1)._2) '), as0), t(csf(asnf(n1)._2), asnf(n1)._1), t(csf(asnf(n1)._2 + 1), as0), t(csf(0), as), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, 0)), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1), ∀ asnf0, as1, n, as2, ef0, cext0, caf0, aINV0, cstart0, csf0, cstep0, t0, astart0, astep0, aext0, cINV0. asnf0(n1) ≠ (as1, n) ∨ asnf0(0) ≠ (as2, 0) ∨ ⌜ef0⌝ ≠ cext0 !(⌜caf0⌝ ) ∨ n = n1 ∨ ¬ aINV0(as2) ∨ ¬ cstart0(csf0(0)) ∨ ¬ fragω(IOAut(cstart0, cstep0, cext0))(csf0, caf0) ∨ ¬ t0(csf0(0), as2) ∨ ¬ (∀ a. ¬ edge ( (λ asn. t0(csf0(asn._2), asn._1) ∧ aINV0(asn._1)) × (λ asn, asn0. aINV0(asn._1) ∧ aINV0(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart0, astep0, aext0))(asn._1, cext0 !(caf0(asn._2) '), asn0._1))) (a, (as2, 0))) ∨ ¬(∀ el. trace*(IOAut(cstart0, cstep0, cext0))(el) → trace*(IOAut(astart0, astep0, aext0))(el)) ∨ ¬(∀ cs. cstart0(cs) → (∃ ass. ∀ as. t0(cs, as) ∧ aINV0(as) ↔ as ∈ ass)) ∨ ¬(∀ as1, el. aINV0(as1) → (∃ ass. ∀ as2. move(IOAut(astart0, astep0, aext0))(as1, el, as2) ∧ aINV0(as2) ↔ as2 ∈ ass)) ∨ ¬(∀ cs. cstart0(cs) → cINV0(cs)) ∨ ¬(∀ as. astart0(as) → aINV0(as)) ∨ ¬(∀ cs, ca, cs0. cINV0(cs) ∧ cstep0(cs, ca, cs0) → cINV0(cs0)) ∨ ¬(∀ as, aa, as0. aINV0(as) ∧ astep0(as, aa, as0) → aINV0(as0)) ∨ ¬(∀ cs. cINV0(cs) → (∃ as. t0(cs, as) ∧ aINV0(as))) ∨ ¬(∀ cs, as. cstart0(cs) ∧ t0(cs, as) ∧ aINV0(as) → astart0(as)) ∨ ¬ (∀ cs, ca, cs0, as0. cINV0(cs) ∧ cstep0(cs, ca, cs0) ∧ t0(cs0, as0) ∧ aINV0(as0) → (∃ as. aINV0(as) ∧ move(IOAut(astart0, astep0, aext0))(as, cext0 !(ca '), as0) ∧ t0(cs, as))) ∨ ¬(∀ cs. (∃ csl, cal. frag*(IOAut(cstart0, cstep0, cext0))(csl, cal) ∧ cstart0(csl[0]) ∧ cs = csl.last) → cINV0(cs)) ∨ ¬ (∀ n. edge ( (λ asn. t0(csf0(asn._2), asn._1) ∧ aINV0(asn._1)) × (λ asn, asn0. aINV0(asn._1) ∧ aINV0(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart0, astep0, aext0))(asn._1, cext0 !(caf0(asn._2) '), asn0._1))) (asnf0(n), asnf0(n + 1))) ∨ ¬(∀ n. t0(csf0(asnf0(n)._2), asnf0(n)._1) ∧ aINV0(asnf0(n)._1)) ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m + n = m + n0 ↔ n = n0; (s) ⊦ edge(vs × es)(a, b) ↔ es(a, b) ∧ vs(a) ∧ vs(b); (ws)
| asnf(0) = (as, 0), asnf(n1 + 1) = (as0, asnf(n1)._2 + 1), ⌜ef⌝ = cext !(⌜caf⌝ ), asnf(n1)._2 ≠ n1, aINV(asnf(n1)._1), aINV(as0), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(asnf(n1)._1, cext !(caf(asnf(n1)._2) '), as0), t(csf(asnf(n1)._2), asnf(n1)._1), t(csf(asnf(n1)._2 + 1), as0), t(csf(0), as), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, 0)), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1), ∀ asnf0, as1, n, as2, ef0, cext0, caf0, aINV0, cstart0, csf0, cstep0, t0, astart0, astep0, aext0, cINV0. asnf0(n1) ≠ (as1, n) ∨ asnf0(0) ≠ (as2, 0) ∨ ⌜ef0⌝ ≠ cext0 !(⌜caf0⌝ ) ∨ n = n1 ∨ ¬ aINV0(as2) ∨ ¬ cstart0(csf0(0)) ∨ ¬ fragω(IOAut(cstart0, cstep0, cext0))(csf0, caf0) ∨ ¬ t0(csf0(0), as2) ∨ ¬ (∀ a. ¬ edge ( (λ asn. t0(csf0(asn._2), asn._1) ∧ aINV0(asn._1)) × (λ asn, asn0. aINV0(asn._1) ∧ aINV0(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart0, astep0, aext0))(asn._1, cext0 !(caf0(asn._2) '), asn0._1))) (a, (as2, 0))) ∨ ¬(∀ el. trace*(IOAut(cstart0, cstep0, cext0))(el) → trace*(IOAut(astart0, astep0, aext0))(el)) ∨ ¬(∀ cs. cstart0(cs) → (∃ ass. ∀ as. t0(cs, as) ∧ aINV0(as) ↔ as ∈ ass)) ∨ ¬(∀ as1, el. aINV0(as1) → (∃ ass. ∀ as2. move(IOAut(astart0, astep0, aext0))(as1, el, as2) ∧ aINV0(as2) ↔ as2 ∈ ass)) ∨ ¬(∀ cs. cstart0(cs) → cINV0(cs)) ∨ ¬(∀ as. astart0(as) → aINV0(as)) ∨ ¬(∀ cs, ca, cs0. cINV0(cs) ∧ cstep0(cs, ca, cs0) → cINV0(cs0)) ∨ ¬(∀ as, aa, as0. aINV0(as) ∧ astep0(as, aa, as0) → aINV0(as0)) ∨ ¬(∀ cs. cINV0(cs) → (∃ as. t0(cs, as) ∧ aINV0(as))) ∨ ¬(∀ cs, as. cstart0(cs) ∧ t0(cs, as) ∧ aINV0(as) → astart0(as)) ∨ ¬ (∀ cs, ca, cs0, as0. cINV0(cs) ∧ cstep0(cs, ca, cs0) ∧ t0(cs0, as0) ∧ aINV0(as0) → (∃ as. aINV0(as) ∧ move(IOAut(astart0, astep0, aext0))(as, cext0 !(ca '), as0) ∧ t0(cs, as))) ∨ ¬(∀ cs. (∃ csl, cal. frag*(IOAut(cstart0, cstep0, cext0))(csl, cal) ∧ cstart0(csl[0]) ∧ cs = csl.last) → cINV0(cs)) ∨ ¬ (∀ n. edge ( (λ asn. t0(csf0(asn._2), asn._1) ∧ aINV0(asn._1)) × (λ asn, asn0. aINV0(asn._1) ∧ aINV0(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart0, astep0, aext0))(asn._1, cext0 !(caf0(asn._2) '), asn0._1))) (asnf0(n), asnf0(n + 1))) ∨ ¬(∀ n. t0(csf0(asnf0(n)._2), asnf0(n)._1) ∧ aINV0(asnf0(n)._1)) ⊦ |
asnf(n1 + 1) = (as0, n + 1), asnf(0) = (as, 0), asnf(n1) = (as1, n), ⌜ef⌝ = cext !(⌜caf⌝ ), n ≠ n1, aINV(as), aINV(as0), aINV(as1), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(as1, cext !(caf(n) '), as0), t(csf(0), as), t(csf(n + 1), as0), t(csf(n), as1), ∀ asnf0, as1, n, as2, ef0, cext0, caf0, aINV0, cstart0, csf0, cstep0, t0, astart0, astep0, aext0, cINV0. asnf0(n1) ≠ (as1, n) ∨ asnf0(0) ≠ (as2, 0) ∨ ⌜ef0⌝ ≠ cext0 !(⌜caf0⌝ ) ∨ n = n1 ∨ ¬ aINV0(as2) ∨ ¬ cstart0(csf0(0)) ∨ ¬ fragω(IOAut(cstart0, cstep0, cext0))(csf0, caf0) ∨ ¬ t0(csf0(0), as2) ∨ ¬ (∀ a. ¬ edge ( (λ asn. t0(csf0(asn._2), asn._1) ∧ aINV0(asn._1)) × (λ asn, asn0. aINV0(asn._1) ∧ aINV0(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart0, astep0, aext0))(asn._1, cext0 !(caf0(asn._2) '), asn0._1))) (a, (as2, 0))) ∨ ¬(∀ el. trace*(IOAut(cstart0, cstep0, cext0))(el) → trace*(IOAut(astart0, astep0, aext0))(el)) ∨ ¬(∀ cs. cstart0(cs) → (∃ ass. ∀ as. t0(cs, as) ∧ aINV0(as) ↔ as ∈ ass)) ∨ ¬(∀ as1, el. aINV0(as1) → (∃ ass. ∀ as2. move(IOAut(astart0, astep0, aext0))(as1, el, as2) ∧ aINV0(as2) ↔ as2 ∈ ass)) ∨ ¬(∀ cs. cstart0(cs) → cINV0(cs)) ∨ ¬(∀ as. astart0(as) → aINV0(as)) ∨ ¬(∀ cs, ca, cs0. cINV0(cs) ∧ cstep0(cs, ca, cs0) → cINV0(cs0)) ∨ ¬(∀ as, aa, as0. aINV0(as) ∧ astep0(as, aa, as0) → aINV0(as0)) ∨ ¬(∀ cs. cINV0(cs) → (∃ as. t0(cs, as) ∧ aINV0(as))) ∨ ¬(∀ cs, as. cstart0(cs) ∧ t0(cs, as) ∧ aINV0(as) → astart0(as)) ∨ ¬ (∀ cs, ca, cs0, as0. cINV0(cs) ∧ cstep0(cs, ca, cs0) ∧ t0(cs0, as0) ∧ aINV0(as0) → (∃ as. aINV0(as) ∧ move(IOAut(astart0, astep0, aext0))(as, cext0 !(ca '), as0) ∧ t0(cs, as))) ∨ ¬(∀ cs. (∃ csl, cal. frag*(IOAut(cstart0, cstep0, cext0))(csl, cal) ∧ cstart0(csl[0]) ∧ cs = csl.last) → cINV0(cs)) ∨ ¬ (∀ n. edge ( (λ asn. t0(csf0(asn._2), asn._1) ∧ aINV0(asn._1)) × (λ asn, asn0. aINV0(asn._1) ∧ aINV0(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart0, astep0, aext0))(asn._1, cext0 !(caf0(asn._2) '), asn0._1))) (asnf0(n), asnf0(n + 1))) ∨ ¬(∀ n. t0(csf0(asnf0(n)._2), asnf0(n)._1) ∧ aINV0(asnf0(n)._1)), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, 0)) ⊦
Used terms: as1, n
| asnf(n1 + 1) = (as0, n + 1), asnf(0) = (as, 0), asnf(n1) = (as1, n), ⌜ef⌝ = cext !(⌜caf⌝ ), n ≠ n1, aINV(as), aINV(as0), aINV(as1), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(as1, cext !(caf(n) '), as0), t(csf(0), as), t(csf(n + 1), as0), t(csf(n), as1), ∀ asnf0, as1, n, as2, ef0, cext0, caf0, aINV0, cstart0, csf0, cstep0, t0, astart0, astep0, aext0, cINV0. asnf0(n1) ≠ (as1, n) ∨ asnf0(0) ≠ (as2, 0) ∨ ⌜ef0⌝ ≠ cext0 !(⌜caf0⌝ ) ∨ n = n1 ∨ ¬ aINV0(as2) ∨ ¬ cstart0(csf0(0)) ∨ ¬ fragω(IOAut(cstart0, cstep0, cext0))(csf0, caf0) ∨ ¬ t0(csf0(0), as2) ∨ ¬ (∀ a. ¬ edge ( (λ asn. t0(csf0(asn._2), asn._1) ∧ aINV0(asn._1)) × (λ asn, asn0. aINV0(asn._1) ∧ aINV0(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart0, astep0, aext0))(asn._1, cext0 !(caf0(asn._2) '), asn0._1))) (a, (as2, 0))) ∨ ¬(∀ el. trace*(IOAut(cstart0, cstep0, cext0))(el) → trace*(IOAut(astart0, astep0, aext0))(el)) ∨ ¬(∀ cs. cstart0(cs) → (∃ ass. ∀ as. t0(cs, as) ∧ aINV0(as) ↔ as ∈ ass)) ∨ ¬(∀ as1, el. aINV0(as1) → (∃ ass. ∀ as2. move(IOAut(astart0, astep0, aext0))(as1, el, as2) ∧ aINV0(as2) ↔ as2 ∈ ass)) ∨ ¬(∀ cs. cstart0(cs) → cINV0(cs)) ∨ ¬(∀ as. astart0(as) → aINV0(as)) ∨ ¬(∀ cs, ca, cs0. cINV0(cs) ∧ cstep0(cs, ca, cs0) → cINV0(cs0)) ∨ ¬(∀ as, aa, as0. aINV0(as) ∧ astep0(as, aa, as0) → aINV0(as0)) ∨ ¬(∀ cs. cINV0(cs) → (∃ as. t0(cs, as) ∧ aINV0(as))) ∨ ¬(∀ cs, as. cstart0(cs) ∧ t0(cs, as) ∧ aINV0(as) → astart0(as)) ∨ ¬ (∀ cs, ca, cs0, as0. cINV0(cs) ∧ cstep0(cs, ca, cs0) ∧ t0(cs0, as0) ∧ aINV0(as0) → (∃ as. aINV0(as) ∧ move(IOAut(astart0, astep0, aext0))(as, cext0 !(ca '), as0) ∧ t0(cs, as))) ∨ ¬(∀ cs. (∃ csl, cal. frag*(IOAut(cstart0, cstep0, cext0))(csl, cal) ∧ cstart0(csl[0]) ∧ cs = csl.last) → cINV0(cs)) ∨ ¬ (∀ n. edge ( (λ asn. t0(csf0(asn._2), asn._1) ∧ aINV0(asn._1)) × (λ asn, asn0. aINV0(asn._1) ∧ aINV0(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart0, astep0, aext0))(asn._1, cext0 !(caf0(asn._2) '), asn0._1))) (asnf0(n), asnf0(n + 1))) ∨ ¬(∀ n. t0(csf0(asnf0(n)._2), asnf0(n)._1) ∧ aINV0(asnf0(n)._1)), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, 0)) ⊦ |
Used terms: asnf, as1, n, as, ef, cext, caf, aINV, cstart, csf, cstep, t, astart, astep, aext, cINV
| asnf(0) = (as, n), ⌜ef⌝ = cext !(⌜caf⌝ ), n ≠ 0, aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n)) ⊦ |
asnf(0) = (as, n), ⌜ef⌝ = cext !(⌜caf⌝ ), n ≠ 0, aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n), as), ¬ traceω(IOAut(astart, astep, aext))(ef), cINV(csf(n - 1)) ∧ cstep(csf(n - 1), caf(n - 1), csf(n)) ∧ t(csf(n), as) ∧ aINV(as) → (∃ as1. aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, cext !(caf(n - 1) '), as) ∧ t(csf(n - 1), as1)), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n)), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1) ⊦
Used terms: csf(n - 1), caf(n - 1), csf(n), as
| asnf(0) = (as, n), ⌜ef⌝ = cext !(⌜caf⌝ ), n ≠ 0, aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n), as), ¬ traceω(IOAut(astart, astep, aext))(ef), cINV(csf(n - 1)) ∧ cstep(csf(n - 1), caf(n - 1), csf(n)) ∧ t(csf(n), as) ∧ aINV(as) → (∃ as1. aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, cext !(caf(n - 1) '), as) ∧ t(csf(n - 1), as1)), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n)), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1) ⊦ |
asnf(0) = (as, n), ⌜ef⌝ = cext !(⌜caf⌝ ), n ≠ 0, aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n), as), ¬ traceω(IOAut(astart, astep, aext))(ef), cINV(csf(n - 1)) ∧ cstep(csf(n - 1), caf(n - 1), csf(n)) → aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, cext !(caf(n - 1) '), as) ∧ t(csf(n - 1), as1), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n)) ⊦
| asnf(0) = (as, n), ⌜ef⌝ = cext !(⌜caf⌝ ), n ≠ 0, aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n), as), ¬ traceω(IOAut(astart, astep, aext))(ef), cINV(csf(n - 1)) ∧ cstep(csf(n - 1), caf(n - 1), csf(n)) → aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, cext !(caf(n - 1) '), as) ∧ t(csf(n - 1), as1), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n)) ⊦ |
asnf(0) = (as, n), n = n0 + 1, ⌜ef⌝ = cext !(⌜caf⌝ ), n ≠ 0, aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n), as), ¬ traceω(IOAut(astart, astep, aext))(ef), cINV(csf(n0)) ∧ cstep(csf(n0), caf(n0), csf(n)) → aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as) ∧ t(csf(n0), as1), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n)), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1) ⊦
Used simplifier rules: n ≠ 0 ⊦ m = n - 1 ↔ n = m + 1; (elim) Used terms: n, n0
| asnf(0) = (as, n), n = n0 + 1, ⌜ef⌝ = cext !(⌜caf⌝ ), n ≠ 0, aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n), as), ¬ traceω(IOAut(astart, astep, aext))(ef), cINV(csf(n0)) ∧ cstep(csf(n0), caf(n0), csf(n)) → aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as) ∧ t(csf(n0), as1), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, (as, n)), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1) ⊦ |
asnf(0) = (as, n0 + 1), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n0 + 1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), cINV(csf(n0)) ∧ cstep(csf(n0), caf(n0), csf(n0 + 1)) → aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as) ∧ t(csf(n0), as1), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, asnf(0)) ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m + 1 ≠ 0; (s)
| asnf(0) = (as, n0 + 1), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n0 + 1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), cINV(csf(n0)) ∧ cstep(csf(n0), caf(n0), csf(n0 + 1)) → aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as) ∧ t(csf(n0), as1), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, asnf(0)) ⊦ |
asnf(0) = (as, n0 + 1), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n0 + 1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, asnf(0)), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1) ⊦ cINV(csf(n0)) ∧ cstep(csf(n0), caf(n0), csf(n0 + 1))
asnf(0) = (as, n0 + 1), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), aINV(as1), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0 + 1), as), t(csf(n0), as1), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, asnf(0)), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1) ⊦
| asnf(0) = (as, n0 + 1), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n0 + 1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, asnf(0)), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1) ⊦ cINV(csf(n0)) ∧ cstep(csf(n0), caf(n0), csf(n0 + 1)) |
asnf(0) = (as, n0 + 1), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n0 + 1), as), ¬ cINV(csf(n0)), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, asnf(0)), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1) ⊦
Used simplifier rules: ⊦ ¬ step(sf(n), af(n), sf(n + 1)) → (fragω(IOAut(start, step, ext))(sf, af) ↔ false); (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic
| asnf(0) = (as, n0 + 1), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n0 + 1), as), ¬ cINV(csf(n0)), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, asnf(0)), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1) ⊦ |
asnf(0) = (as, n0 + 1), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n0 + 1), as), ¬ cINV(csf(n0)), ¬ traceω(IOAut(astart, astep, aext))(ef), (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ csf(n0) = csl.last) → cINV(csf(n0)), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, asnf(0)) ⊦
Used terms: csf(n0)
| asnf(0) = (as, n0 + 1), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n0 + 1), as), ¬ cINV(csf(n0)), ¬ traceω(IOAut(astart, astep, aext))(ef), (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ csf(n0) = csl.last) → cINV(csf(n0)), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, asnf(0)) ⊦ |
asnf(0) = (as, n0 + 1), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n0 + 1), as), ¬ cINV(csf(n0)), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, asnf(0)), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1) ⊦ ∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ csf(n0) = csl.last
| asnf(0) = (as, n0 + 1), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n0 + 1), as), ¬ cINV(csf(n0)), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, asnf(0)), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1) ⊦ ∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ csf(n0) = csl.last |
asnf(0) = (as, n0 + 1), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n0 + 1), as), ¬ cINV(csf(n0)), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, asnf(0)) ⊦ frag*(IOAut(cstart, cstep, cext))(csf.take(n0 + 1), caf.take(n0)) ∧ cstart(csf.take(n0 + 1)[0]) ∧ csf(n0) = (csf.take(n0 + 1)).last
Used terms: csf.take(n0 + 1), caf.take(n0)
| asnf(0) = (as, n0 + 1), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n0 + 1), as), ¬ cINV(csf(n0)), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, asnf(0)) ⊦ frag*(IOAut(cstart, cstep, cext))(csf.take(n0 + 1), caf.take(n0)) ∧ cstart(csf.take(n0 + 1)[0]) ∧ csf(n0) = (csf.take(n0 + 1)).last |
asnf(0) = (as, n0 + 1), ⌜ef⌝ = cext !(⌜caf⌝ ), csf(n0) ≠ (csf.take(n0 + 1)).last, aINV(as), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n0 + 1), as), ¬ cINV(csf(n0)), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, asnf(0)), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1) ⊦
Used simplifier rules: m < n ⊦ nf.take(n)[m] = nf(m); (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m + 1 ≠ 0; (s) ⊦ 0 < m ↔ m ≠ 0; (s) ⊦ fragω(IOAut(start, step, ext))(sf, af) → (frag*(IOAut(start, step, ext))(sf.take(n + 1), af.take(n)) ↔ true); (ss)
| asnf(0) = (as, n0 + 1), ⌜ef⌝ = cext !(⌜caf⌝ ), csf(n0) ≠ (csf.take(n0 + 1)).last, aINV(as), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n0 + 1), as), ¬ cINV(csf(n0)), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, asnf(0)), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1) ⊦ |
⊦ nf.take(m + 1) = nf.take(m) + nf(m) '
Used simplifier rules: ⊦ (x + a ').last = a; (s) a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: csf, n0
| ⊦ nf.take(m + 1) = nf.take(m) + nf(m) ' |
| asnf(0) = (as, n0 + 1), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), aINV(as1), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0 + 1), as), t(csf(n0), as1), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, asnf(0)), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1) ⊦ |
asnf(0) = (as, n0 + 1), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as1), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0), as1), t(csf(n0 + 1), as), ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((as1, n0), asnf(0)), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el) ⊦
Used terms: (as1, n0)
| asnf(0) = (as, n0 + 1), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as1), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0), as1), t(csf(n0 + 1), as), ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ((as1, n0), asnf(0)), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el) ⊦ |
⊦ edge(vs × es)(a, b) ↔ es(a, b) ∧ vs(a) ∧ vs(b)
asnf(0) = (as, n0 + 1), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), aINV(as1), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0 + 1), as), t(csf(n0), as1), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1), ( ¬ aINV((as1, n0)._1) ∨ ¬ aINV(asnf(0)._1) ∨ asnf(0)._2 ≠ (as1, n0)._2 + 1 ∨ ¬ move(IOAut(astart, astep, aext))((as1, n0)._1, cext !(caf((as1, n0)._2) '), asnf(0)._1)) ∨ (¬ t(csf((as1, n0)._2), (as1, n0)._1) ∨ ¬ aINV((as1, n0)._1)) ∨ ¬ t(csf(asnf(0)._2), asnf(0)._1) ∨ ¬ aINV(asnf(0)._1) ⊦
Used terms: λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1), λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1), (as1, n0), asnf(0)
| ⊦ edge(vs × es)(a, b) ↔ es(a, b) ∧ vs(a) ∧ vs(b) |
| asnf(0) = (as, n0 + 1), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as), aINV(as1), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0 + 1), as), t(csf(n0), as1), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1), ( ¬ aINV((as1, n0)._1) ∨ ¬ aINV(asnf(0)._1) ∨ asnf(0)._2 ≠ (as1, n0)._2 + 1 ∨ ¬ move(IOAut(astart, astep, aext))((as1, n0)._1, cext !(caf((as1, n0)._2) '), asnf(0)._1)) ∨ (¬ t(csf((as1, n0)._2), (as1, n0)._1) ∨ ¬ aINV((as1, n0)._1)) ∨ ¬ t(csf(asnf(0)._2), asnf(0)._1) ∨ ¬ aINV(asnf(0)._1) ⊦ |
asnf(0) = (as, n0 + 1), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as1), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0), as1), t(csf(n0 + 1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), asnf(0)._2 ≠ n0 + 1 ∨ ¬ move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), asnf(0)._1) ∨ ¬ t(csf(asnf(0)._2), asnf(0)._1) ∨ ¬ aINV(asnf(0)._1) ⊦
| asnf(0) = (as, n0 + 1), ⌜ef⌝ = cext !(⌜caf⌝ ), aINV(as1), aINV(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as), t(csf(n0), as1), t(csf(n0 + 1), as), ¬ traceω(IOAut(astart, astep, aext))(ef), ∀ n. t(csf(asnf(n)._2), asnf(n)._1) ∧ aINV(asnf(n)._1), ∀ n. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (asnf(n), asnf(n + 1)), ∀ cs. (∃ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) ∧ cs = csl.last) → cINV(cs), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el), asnf(0)._2 ≠ n0 + 1 ∨ ¬ move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), asnf(0)._1) ∨ ¬ t(csf(asnf(0)._2), asnf(0)._1) ∨ ¬ aINV(asnf(0)._1) ⊦ |
Used terms: as0, n
| C_≤*T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)), ¬ C_≤T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass) ⊦ ∀ cs. (∃ csl, cal. exec*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cs = csl.last) → cINV(cs) |
C_≤*T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)), cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), ¬ C_≤T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)), ¬ cINV(csl.last), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)) ⊦
Used simplifier rules: ⊦ IOAut(start, step, ext).start = start; (s) ⊦ exec*(ioa)(sl, al) ↔ frag*(ioa)(sl, al) ∧ ioa.start(sl[0]); (s)
| C_≤*T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)), cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), ¬ C_≤T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)), ¬ cINV(csl.last), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → cINV(cs), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)) ⊦ |
C_≤*T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)), cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), ¬ C_≤T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)), ¬ cINV(csl.last), cstart(csl[0]) → cINV(csl[0]), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass) ⊦
Used terms: csl[0]
| C_≤*T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)), cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), ¬ C_≤T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)), ¬ cINV(csl.last), cstart(csl[0]) → cINV(csl[0]), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass) ⊦ |
C_≤*T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)), cINV(csl[0]), cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), ¬ C_≤T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)), ¬ cINV(csl.last), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)) ⊦
| C_≤*T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)), cINV(csl[0]), cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), ¬ C_≤T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)), ¬ cINV(csl.last), ∀ cs. cstart(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ as1, el. aINV(as1) → (∃ ass. ∀ as2. move(IOAut(astart, astep, aext))(as1, el, as2) ∧ aINV(as2) ↔ as2 ∈ ass), ∀ as. astart(as) → aINV(as), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs, ca, cs0, as0. cINV(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)) ⊦ |
cINV(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), ¬ cINV(csl.last), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0) ⊦
| cINV(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), ¬ cINV(csl.last), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0) ⊦ |
cINV((cs + csl0)[0]), frag*(IOAut(cstart, cstep, cext))(cs + csl0, cal), ¬ cINV((cs + csl0).last), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ cINV, cstart, cstep, cext, cal. ¬(cINV(csl0[0]) ∧ frag*(IOAut(cstart, cstep, cext))(csl0, cal) ∧ ¬ cINV(csl0.last) ∧ (∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0))) ⊦
Used simplifier rules: List('a) freely generated by [], +;; ⊦ ¬ frag*(IOAut(start, step, ext))([], al); (s)
| cINV((cs + csl0)[0]), frag*(IOAut(cstart, cstep, cext))(cs + csl0, cal), ¬ cINV((cs + csl0).last), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ cINV, cstart, cstep, cext, cal. ¬(cINV(csl0[0]) ∧ frag*(IOAut(cstart, cstep, cext))(csl0, cal) ∧ ¬ cINV(csl0.last) ∧ (∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0))) ⊦ |
cINV(cs), frag*(IOAut(cstart, cstep, cext))(cs ' + csl0, cal), ¬ cINV((cs ' + csl0).last), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ cINV0, cstart0, cstep0, cext0, cal0. ¬ cINV0(csl0[0]) ∨ ¬ frag*(IOAut(cstart0, cstep0, cext0))(csl0, cal0) ∨ cINV0(csl0.last) ∨ ¬(∀ cs, ca, cs0. cINV0(cs) ∧ cstep0(cs, ca, cs0) → cINV0(cs0)) ⊦
Used simplifier rules: ⊦ a + x = a ' + x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ (a ' + x)[0] = a; (s)
| cINV(cs), frag*(IOAut(cstart, cstep, cext))(cs ' + csl0, cal), ¬ cINV((cs ' + csl0).last), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ cINV0, cstart0, cstep0, cext0, cal0. ¬ cINV0(csl0[0]) ∨ ¬ frag*(IOAut(cstart0, cstep0, cext0))(csl0, cal0) ∨ cINV0(csl0.last) ∨ ¬(∀ cs, ca, cs0. cINV0(cs) ∧ cstep0(cs, ca, cs0) → cINV0(cs0)) ⊦ |
cal = ca0 + cal1, cINV(cs), frag*(IOAut(cstart, cstep, cext))(cs ' + csl0, cal), ¬ cINV((cs ' + csl0).last), ∀ cINV0, cstart0, cstep0, cext0, cal0. ¬ cINV0(csl0[0]) ∨ ¬ frag*(IOAut(cstart0, cstep0, cext0))(csl0, cal0) ∨ cINV0(csl0.last) ∨ ¬(∀ cs, ca, cs0. cINV0(cs) ∧ cstep0(cs, ca, cs0) → cINV0(cs0)), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0) ⊦
Used simplifier rules: List('a) freely generated by [], +;; ⊦ frag*(IOAut(start, step, ext))(sl, []) ↔ sl = sl.head '; (s) ⊦ (a ' + x).head = a; (s) ⊦ a ' = a0 ' + x ↔ a = a0 ∧ x = []; (ws) ⊦ x + [] = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ a '.last = a; (s) ⊦ ¬ frag*(IOAut(start, step, ext))([], al); (s)
| cal = ca0 + cal1, cINV(cs), frag*(IOAut(cstart, cstep, cext))(cs ' + csl0, cal), ¬ cINV((cs ' + csl0).last), ∀ cINV0, cstart0, cstep0, cext0, cal0. ¬ cINV0(csl0[0]) ∨ ¬ frag*(IOAut(cstart0, cstep0, cext0))(csl0, cal0) ∨ cINV0(csl0.last) ∨ ¬(∀ cs, ca, cs0. cINV0(cs) ∧ cstep0(cs, ca, cs0) → cINV0(cs0)), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0) ⊦ |
cINV(cs), frag*(IOAut(cstart, cstep, cext))(cs ' + csl0, ca0 ' + cal1), ¬ cINV((cs ' + csl0).last), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ cINV0, cstart0, cstep0, cext0, cal0. ¬ cINV0(csl0[0]) ∨ ¬ frag*(IOAut(cstart0, cstep0, cext0))(csl0, cal0) ∨ cINV0(csl0.last) ∨ ¬(∀ cs, ca, cs0. cINV0(cs) ∧ cstep0(cs, ca, cs0) → cINV0(cs0)) ⊦
Used simplifier rules: ⊦ a + x = a ' + x; (s)
| cINV(cs), frag*(IOAut(cstart, cstep, cext))(cs ' + csl0, ca0 ' + cal1), ¬ cINV((cs ' + csl0).last), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ cINV0, cstart0, cstep0, cext0, cal0. ¬ cINV0(csl0[0]) ∨ ¬ frag*(IOAut(cstart0, cstep0, cext0))(csl0, cal0) ∨ cINV0(csl0.last) ∨ ¬(∀ cs, ca, cs0. cINV0(cs) ∧ cstep0(cs, ca, cs0) → cINV0(cs0)) ⊦ |
⊦ frag*(IOAut(start, step, ext))(s ' + sl, a ' + al) ↔ step(s, a, sl.head) ∧ frag*(IOAut(start, step, ext))(sl, al)
cINV(cs), cstep(cs, ca0, csl0.head), frag*(IOAut(cstart, cstep, cext))(csl0, cal1), ¬ cINV((cs ' + csl0).last), ∀ cINV0, cstart0, cstep0, cext0, cal0. ¬ cINV0(csl0[0]) ∨ ¬ frag*(IOAut(cstart0, cstep0, cext0))(csl0, cal0) ∨ cINV0(csl0.last) ∨ ¬(∀ cs, ca, cs0. cINV0(cs) ∧ cstep0(cs, ca, cs0) → cINV0(cs0)), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: cext, cs, cal1, ca0, cstep, cstart, csl0
| ⊦ frag*(IOAut(start, step, ext))(s ' + sl, a ' + al) ↔ step(s, a, sl.head) ∧ frag*(IOAut(start, step, ext))(sl, al) |
| cINV(cs), cstep(cs, ca0, csl0.head), frag*(IOAut(cstart, cstep, cext))(csl0, cal1), ¬ cINV((cs ' + csl0).last), ∀ cINV0, cstart0, cstep0, cext0, cal0. ¬ cINV0(csl0[0]) ∨ ¬ frag*(IOAut(cstart0, cstep0, cext0))(csl0, cal0) ∨ cINV0(csl0.last) ∨ ¬(∀ cs, ca, cs0. cINV0(cs) ∧ cstep0(cs, ca, cs0) → cINV0(cs0)), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0) ⊦ |
cINV(cs), cstep(cs, ca0, csl0.head), frag*(IOAut(cstart, cstep, cext))(csl0, cal1), ¬ cINV((cs ' + csl0).last), cINV(cs) ∧ cstep(cs, ca0, hd(⌜csl0⌝ )) → cINV(hd(⌜csl0⌝ )), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ cINV0, cstart0, cstep0, cext0, cal0. ¬ cINV0(csl0[0]) ∨ ¬ frag*(IOAut(cstart0, cstep0, cext0))(csl0, cal0) ∨ cINV0(csl0.last) ∨ ¬(∀ cs, ca, cs0. cINV0(cs) ∧ cstep0(cs, ca, cs0) → cINV0(cs0)) ⊦
Used terms: cs, ca0, hd(⌜csl0⌝ )
| cINV(cs), cstep(cs, ca0, csl0.head), frag*(IOAut(cstart, cstep, cext))(csl0, cal1), ¬ cINV((cs ' + csl0).last), cINV(cs) ∧ cstep(cs, ca0, hd(⌜csl0⌝ )) → cINV(hd(⌜csl0⌝ )), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ cINV0, cstart0, cstep0, cext0, cal0. ¬ cINV0(csl0[0]) ∨ ¬ frag*(IOAut(cstart0, cstep0, cext0))(csl0, cal0) ∨ cINV0(csl0.last) ∨ ¬(∀ cs, ca, cs0. cINV0(cs) ∧ cstep0(cs, ca, cs0) → cINV0(cs0)) ⊦ |
cINV(cs), cstep(cs, ca0, csl0.head), frag*(IOAut(cstart, cstep, cext))(csl0, cal1), ¬ cINV((cs ' + csl0).last), cstep(cs, ca0, hd(⌜csl0⌝ )) → cINV(hd(⌜csl0⌝ )), ∀ cINV0, cstart0, cstep0, cext0, cal0. ¬ cINV0(csl0[0]) ∨ ¬ frag*(IOAut(cstart0, cstep0, cext0))(csl0, cal0) ∨ cINV0(csl0.last) ∨ ¬(∀ cs, ca, cs0. cINV0(cs) ∧ cstep0(cs, ca, cs0) → cINV0(cs0)), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0) ⊦
| cINV(cs), cstep(cs, ca0, csl0.head), frag*(IOAut(cstart, cstep, cext))(csl0, cal1), ¬ cINV((cs ' + csl0).last), cstep(cs, ca0, hd(⌜csl0⌝ )) → cINV(hd(⌜csl0⌝ )), ∀ cINV0, cstart0, cstep0, cext0, cal0. ¬ cINV0(csl0[0]) ∨ ¬ frag*(IOAut(cstart0, cstep0, cext0))(csl0, cal0) ∨ cINV0(csl0.last) ∨ ¬(∀ cs, ca, cs0. cINV0(cs) ∧ cstep0(cs, ca, cs0) → cINV0(cs0)), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0) ⊦ |
cINV(cs), cstep(cs, ca0, csl0.head), frag*(IOAut(cstart, cstep, cext))(csl0, cal1), ¬ cINV((cs ' + csl0).last), cstep(cs, ca0, hd(⌜csl0⌝ )) → cINV(hd(⌜csl0⌝ )), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ¬ cINV(csl0[0]) ∨ ¬ frag*(IOAut(cstart, cstep, cext))(csl0, cal1) ∨ cINV(csl0.last) ∨ ¬(∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0)) ⊦
Used terms: cINV, cstart, cstep, cext, cal1
| cINV(cs), cstep(cs, ca0, csl0.head), frag*(IOAut(cstart, cstep, cext))(csl0, cal1), ¬ cINV((cs ' + csl0).last), cstep(cs, ca0, hd(⌜csl0⌝ )) → cINV(hd(⌜csl0⌝ )), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ¬ cINV(csl0[0]) ∨ ¬ frag*(IOAut(cstart, cstep, cext))(csl0, cal1) ∨ cINV(csl0.last) ∨ ¬(∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0)) ⊦ |
cINV(cs), cstep(cs, ca0, csl0.head), frag*(IOAut(cstart, cstep, cext))(csl0, cal1), ¬ cINV((cs ' + csl0).last), cstep(cs, ca0, hd(⌜csl0⌝ )) → cINV(hd(⌜csl0⌝ )), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ¬ cINV(csl0[0]) ∨ cINV(csl0.last) ⊦
| cINV(cs), cstep(cs, ca0, csl0.head), frag*(IOAut(cstart, cstep, cext))(csl0, cal1), ¬ cINV((cs ' + csl0).last), cstep(cs, ca0, hd(⌜csl0⌝ )) → cINV(hd(⌜csl0⌝ )), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ¬ cINV(csl0[0]) ∨ cINV(csl0.last) ⊦ |
⊦ x ≠ [] → (a ' + x).last = x.last
csl0 ≠ [], cINV(cs), cstep(cs, ca0, csl0.head), frag*(IOAut(cstart, cstep, cext))(csl0, cal1), ¬ cINV(csl0.last), cstep(cs, ca0, hd(⌜csl0⌝ )) → cINV(hd(⌜csl0⌝ )), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ¬ cINV(csl0[0]) ∨ cINV(csl0.last) ⊦
Used simplifier rules: ⊦ ¬ frag*(IOAut(start, step, ext))([], al); (s) Used terms: cs, csl0
| ⊦ x ≠ [] → (a ' + x).last = x.last |
| csl0 ≠ [], cINV(cs), cstep(cs, ca0, csl0.head), frag*(IOAut(cstart, cstep, cext))(csl0, cal1), ¬ cINV(csl0.last), cstep(cs, ca0, hd(⌜csl0⌝ )) → cINV(hd(⌜csl0⌝ )), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ¬ cINV(csl0[0]) ∨ cINV(csl0.last) ⊦ |
csl0 ≠ [], cINV(cs), cstep(cs, ca0, csl0.head), frag*(IOAut(cstart, cstep, cext))(csl0, cal1), ¬ cINV(csl0.last), ¬ cINV(csl0.head), cstep(cs, ca0, hd(⌜csl0⌝ )) → cINV(hd(⌜csl0⌝ )), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0) ⊦
Used simplifier rules: ⊦ x ≠ [] → x[0] = x.head; (s)
| csl0 ≠ [], cINV(cs), cstep(cs, ca0, csl0.head), frag*(IOAut(cstart, cstep, cext))(csl0, cal1), ¬ cINV(csl0.last), ¬ cINV(csl0.head), cstep(cs, ca0, hd(⌜csl0⌝ )) → cINV(hd(⌜csl0⌝ )), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0) ⊦ |
Used simplifier rules: ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) ⊦ a ' ≠ []; (s) ⊦ a + x = a ' + x; (s) ⊦ ⌜x + y⌝ = ⌜x⌝ + ⌜y⌝ ; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ hd(⌜a '⌝ + ⌜x⌝ ) = a; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ x ≠ [] → (head = x.head ∧ tail = x.tail ↔ x = head + tail); (elim) Used terms: csl0, cs1, csl
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.