| ≤BI(cioaut, aioaut) ⊦ C_≤*T_A(cioaut, aioaut) |
≤BI(cioaut, aioaut), ¬ C_≤*T_A(cioaut, aioaut) ⊦
| ≤BI(cioaut, aioaut), ¬ C_≤*T_A(cioaut, aioaut) ⊦ |
cioaut = IOAut(cINV, cstep, cext), ≤BI(cioaut, aioaut), ¬ C_≤*T_A(cioaut, aioaut) ⊦
Used simplifier rules: IOAutomaton('s, 'a, 'e) freely generated by IOAut;;
| cioaut = IOAut(cINV, cstep, cext), ≤BI(cioaut, aioaut), ¬ C_≤*T_A(cioaut, aioaut) ⊦ |
≤BI(IOAut(cINV, cstep, cext), aioaut), ¬ C_≤*T_A(IOAut(cINV, cstep, cext), aioaut) ⊦
| ≤BI(IOAut(cINV, cstep, cext), aioaut), ¬ C_≤*T_A(IOAut(cINV, cstep, cext), aioaut) ⊦ |
aioaut = IOAut(aINV, astep, aext), ≤BI(IOAut(cINV, cstep, cext), aioaut), ¬ C_≤*T_A(IOAut(cINV, cstep, cext), aioaut) ⊦
Used simplifier rules: IOAutomaton('s, 'a, 'e) freely generated by IOAut;;
| aioaut = IOAut(aINV, astep, aext), ≤BI(IOAut(cINV, cstep, cext), aioaut), ¬ C_≤*T_A(IOAut(cINV, cstep, cext), aioaut) ⊦ |
≤BI(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext)), ¬ C_≤*T_A(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext)) ⊦
| ≤BI(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext)), ¬ C_≤*T_A(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext)) ⊦ |
⊦ ≤BI(cioaut, aioaut) ↔ (∃ t, aINV, cINV. bwsim(cioaut, aioaut, t, cINV, aINV))
¬ C_≤*T_A(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext)), ∃ t, aINV0, cINV0. bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, cINV0, aINV0) ⊦
Used terms: IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext)
| ⊦ ≤BI(cioaut, aioaut) ↔ (∃ t, aINV, cINV. bwsim(cioaut, aioaut, t, cINV, aINV)) |
| ¬ C_≤*T_A(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext)), ∃ t, aINV0, cINV0. bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, cINV0, aINV0) ⊦ |
bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, cINV0, aINV0), ¬ C_≤*T_A(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext)) ⊦
| bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, cINV0, aINV0), ¬ C_≤*T_A(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext)) ⊦ |
⊦ C_≤*T_A(cioaut, aioaut) ↔ (∀ el. trace*(cioaut)(el) → trace*(aioaut)(el))
bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, cINV0, aINV0), ∃ el. ¬(trace*(IOAut(cINV, cstep, cext))(el) → trace*(IOAut(aINV, astep, aext))(el)) ⊦
Used terms: IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext)
| ⊦ C_≤*T_A(cioaut, aioaut) ↔ (∀ el. trace*(cioaut)(el) → trace*(aioaut)(el)) |
| bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, cINV0, aINV0), ∃ el. ¬(trace*(IOAut(cINV, cstep, cext))(el) → trace*(IOAut(aINV, astep, aext))(el)) ⊦ |
bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, cINV0, aINV0), trace*(IOAut(cINV, cstep, cext))(el), ¬ trace*(IOAut(aINV, astep, aext))(el) ⊦
| bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, cINV0, aINV0), trace*(IOAut(cINV, cstep, cext))(el), ¬ trace*(IOAut(aINV, astep, aext))(el) ⊦ |
⊦ trace*(IOAut(start, step, ext))(el) ↔ (∃ sl, al. el = ext !(al) ∧ exec*(IOAut(start, step, ext))(sl, al))
bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, cINV0, aINV0), ¬ trace*(IOAut(aINV, astep, aext))(el), ∃ sl, al. el = cext !(al) ∧ exec*(IOAut(cINV, cstep, cext))(sl, al) ⊦
Used terms: cINV, cstep, cext, el
| ⊦ trace*(IOAut(start, step, ext))(el) ↔ (∃ sl, al. el = ext !(al) ∧ exec*(IOAut(start, step, ext))(sl, al)) |
| bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, cINV0, aINV0), ¬ trace*(IOAut(aINV, astep, aext))(el), ∃ sl, al. el = cext !(al) ∧ exec*(IOAut(cINV, cstep, cext))(sl, al) ⊦ |
bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, cINV0, aINV0), cINV(csl[0]), frag*(IOAut(cINV, cstep, cext))(csl, cal), ¬ trace*(IOAut(aINV, astep, aext))(cext !(cal)) ⊦
Used simplifier rules: ⊦ IOAut(start, step, ext).start = start; (s) ⊦ exec*(ioa)(sl, al) ↔ frag*(ioa)(sl, al) ∧ ioa.start(sl[0]); (s)
| bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, cINV0, aINV0), cINV(csl[0]), frag*(IOAut(cINV, cstep, cext))(csl, cal), ¬ trace*(IOAut(aINV, astep, aext))(cext !(cal)) ⊦ |
frag*(IOAut(start, step, ext))(sl, al), iNV(sl[0]), ∀ s, a, s0. iNV(s) ∧ step(s, a, s0) → iNV(s0) ⊦ iNV(sl.last)
bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, cINV0, aINV0), cINV(csl[0]), frag*(IOAut(cINV, cstep, cext))(csl, cal), ¬ trace*(IOAut(aINV, astep, aext))(cext !(cal)) ⊦ cINV0(csl[0]) ∧ (∀ s, a, s0. cINV0(s) ∧ cstep(s, a, s0) → cINV0(s0))
bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, cINV0, aINV0), cINV(csl[0]), cINV0(csl.last), frag*(IOAut(cINV, cstep, cext))(csl, cal), ¬ trace*(IOAut(aINV, astep, aext))(cext !(cal)) ⊦
Used terms: cext, cal, cstep, cINV, cINV0, csl
| frag*(IOAut(start, step, ext))(sl, al), iNV(sl[0]), ∀ s, a, s0. iNV(s) ∧ step(s, a, s0) → iNV(s0) ⊦ iNV(sl.last) |
| bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, cINV0, aINV0), cINV(csl[0]), frag*(IOAut(cINV, cstep, cext))(csl, cal), ¬ trace*(IOAut(aINV, astep, aext))(cext !(cal)) ⊦ cINV0(csl[0]) ∧ (∀ s, a, s0. cINV0(s) ∧ cstep(s, a, s0) → cINV0(s0)) |
bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, cINV0, aINV0), cINV(csl[0]), frag*(IOAut(cINV, cstep, cext))(csl, cal), ¬ trace*(IOAut(aINV, astep, aext))(cext !(cal)) ⊦ cINV0(csl[0]) ∧ (cINV0(cs) ∧ cstep(cs, ca, cs0) → cINV0(cs0))
| bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, cINV0, aINV0), cINV(csl[0]), frag*(IOAut(cINV, cstep, cext))(csl, cal), ¬ trace*(IOAut(aINV, astep, aext))(cext !(cal)) ⊦ cINV0(csl[0]) ∧ (cINV0(cs) ∧ cstep(cs, ca, cs0) → cINV0(cs0)) |
⊦ 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)))
cINV(csl[0]), frag*(IOAut(cINV, cstep, cext))(csl, cal), ¬ trace*(IOAut(aINV, astep, aext))(cext !(cal)), ∀ cs. cINV(cs) → cINV0(cs), ∀ as. aINV(as) → aINV0(as), ∀ cs, ca, cs0. cINV0(cs) ∧ cstep(cs, ca, cs0) → cINV0(cs0), ∀ as, aa, as0. aINV0(as) ∧ astep(as, aa, as0) → aINV0(as0), ∀ cs. cINV0(cs) → (∃ as. t(cs, as) ∧ aINV0(as)), ∀ cs, as. cINV(cs) ∧ t(cs, as) ∧ aINV0(as) → aINV(as), ∀ cs, ca, cs0, as0. cINV0(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV0(as0) → (∃ as. aINV0(as) ∧ move(IOAut(aINV, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)) ⊦ cINV0(csl[0]) ∧ (cINV0(cs) ∧ cstep(cs, ca, cs0) → cINV0(cs0))
Used terms: astep, aINV, t, aext, cINV, cstep, aINV0, cext, cINV0
| ⊦ 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))) |
| cINV(csl[0]), frag*(IOAut(cINV, cstep, cext))(csl, cal), ¬ trace*(IOAut(aINV, astep, aext))(cext !(cal)), ∀ cs. cINV(cs) → cINV0(cs), ∀ as. aINV(as) → aINV0(as), ∀ cs, ca, cs0. cINV0(cs) ∧ cstep(cs, ca, cs0) → cINV0(cs0), ∀ as, aa, as0. aINV0(as) ∧ astep(as, aa, as0) → aINV0(as0), ∀ cs. cINV0(cs) → (∃ as. t(cs, as) ∧ aINV0(as)), ∀ cs, as. cINV(cs) ∧ t(cs, as) ∧ aINV0(as) → aINV(as), ∀ cs, ca, cs0, as0. cINV0(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV0(as0) → (∃ as. aINV0(as) ∧ move(IOAut(aINV, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)) ⊦ cINV0(csl[0]) ∧ (cINV0(cs) ∧ cstep(cs, ca, cs0) → cINV0(cs0)) |
cINV(csl[0]), frag*(IOAut(cINV, cstep, cext))(csl, cal), ¬ cINV0(csl[0]), ¬ trace*(IOAut(aINV, astep, aext))(cext !(cal)), ∀ cs, ca, cs0, as0. cINV0(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV0(as0) → (∃ as. aINV0(as) ∧ move(IOAut(aINV, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cINV(cs) ∧ t(cs, as) ∧ aINV0(as) → aINV(as), ∀ cs. cINV0(cs) → (∃ as. t(cs, as) ∧ aINV0(as)), ∀ as, aa, as0. aINV0(as) ∧ astep(as, aa, as0) → aINV0(as0), ∀ cs, ca, cs0. cINV0(cs) ∧ cstep(cs, ca, cs0) → cINV0(cs0), ∀ as. aINV(as) → aINV0(as), ∀ cs. cINV(cs) → cINV0(cs) ⊦
cINV(csl[0]), cINV0(cs), cstep(cs, ca, cs0), frag*(IOAut(cINV, cstep, cext))(csl, cal), ¬ cINV0(cs0), ¬ trace*(IOAut(aINV, astep, aext))(cext !(cal)), ∀ cs, ca, cs0, as0. cINV0(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV0(as0) → (∃ as. aINV0(as) ∧ move(IOAut(aINV, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cINV(cs) ∧ t(cs, as) ∧ aINV0(as) → aINV(as), ∀ cs. cINV0(cs) → (∃ as. t(cs, as) ∧ aINV0(as)), ∀ as, aa, as0. aINV0(as) ∧ astep(as, aa, as0) → aINV0(as0), ∀ cs, ca, cs0. cINV0(cs) ∧ cstep(cs, ca, cs0) → cINV0(cs0), ∀ as. aINV(as) → aINV0(as), ∀ cs. cINV(cs) → cINV0(cs) ⊦
| cINV(csl[0]), frag*(IOAut(cINV, cstep, cext))(csl, cal), ¬ cINV0(csl[0]), ¬ trace*(IOAut(aINV, astep, aext))(cext !(cal)), ∀ cs, ca, cs0, as0. cINV0(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV0(as0) → (∃ as. aINV0(as) ∧ move(IOAut(aINV, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cINV(cs) ∧ t(cs, as) ∧ aINV0(as) → aINV(as), ∀ cs. cINV0(cs) → (∃ as. t(cs, as) ∧ aINV0(as)), ∀ as, aa, as0. aINV0(as) ∧ astep(as, aa, as0) → aINV0(as0), ∀ cs, ca, cs0. cINV0(cs) ∧ cstep(cs, ca, cs0) → cINV0(cs0), ∀ as. aINV(as) → aINV0(as), ∀ cs. cINV(cs) → cINV0(cs) ⊦ |
Used terms: csl[0]
| cINV(csl[0]), cINV0(cs), cstep(cs, ca, cs0), frag*(IOAut(cINV, cstep, cext))(csl, cal), ¬ cINV0(cs0), ¬ trace*(IOAut(aINV, astep, aext))(cext !(cal)), ∀ cs, ca, cs0, as0. cINV0(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV0(as0) → (∃ as. aINV0(as) ∧ move(IOAut(aINV, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cINV(cs) ∧ t(cs, as) ∧ aINV0(as) → aINV(as), ∀ cs. cINV0(cs) → (∃ as. t(cs, as) ∧ aINV0(as)), ∀ as, aa, as0. aINV0(as) ∧ astep(as, aa, as0) → aINV0(as0), ∀ cs, ca, cs0. cINV0(cs) ∧ cstep(cs, ca, cs0) → cINV0(cs0), ∀ as. aINV(as) → aINV0(as), ∀ cs. cINV(cs) → cINV0(cs) ⊦ |
Used terms: cs, ca, cs0
| bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, cINV0, aINV0), cINV(csl[0]), cINV0(csl.last), frag*(IOAut(cINV, cstep, cext))(csl, cal), ¬ trace*(IOAut(aINV, astep, aext))(cext !(cal)) ⊦ |
bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, cINV0, aINV0), cINV(csl[0]), cINV0(csl.last), frag*(IOAut(cINV, cstep, cext))(csl, cal), ¬ trace*(IOAut(aINV, astep, aext))(cext !(cal)), ∃ as. t(csl.last, as) ∧ aINV0(as) ⊦
bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, cINV0, aINV0), cINV(csl[0]), cINV0(csl.last), frag*(IOAut(cINV, cstep, cext))(csl, cal), ¬ trace*(IOAut(aINV, astep, aext))(cext !(cal)) ⊦ ∃ as. t(csl.last, as) ∧ aINV0(as)
Used formulas: ∃ as. t(csl.last, as) ∧ aINV0(as)
| bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, cINV0, aINV0), cINV(csl[0]), cINV0(csl.last), frag*(IOAut(cINV, cstep, cext))(csl, cal), ¬ trace*(IOAut(aINV, astep, aext))(cext !(cal)), ∃ as. t(csl.last, as) ∧ aINV0(as) ⊦ |
aINV0(as), bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, cINV0, aINV0), cINV(csl[0]), cINV0(csl.last), frag*(IOAut(cINV, cstep, cext))(csl, cal), t(csl.last, as), ¬ trace*(IOAut(aINV, astep, aext))(cext !(cal)) ⊦
| aINV0(as), bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, cINV0, aINV0), cINV(csl[0]), cINV0(csl.last), frag*(IOAut(cINV, cstep, cext))(csl, cal), t(csl.last, as), ¬ trace*(IOAut(aINV, astep, aext))(cext !(cal)) ⊦ |
bwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), cINV(cs), move(IOAut(cstart, cstep, cext))(cs, el, cs0), t(cs0, as0), aINV(as0) ⊦ ∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, el, as0) ∧ t(cs, as)
aINV0(as), bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, cINV0, aINV0), cINV(csl[0]), cINV0(csl.last), frag*(IOAut(cINV, cstep, cext))(csl, cal), t(csl.last, as), ¬ trace*(IOAut(aINV, astep, aext))(cext !(cal)) ⊦ cINV0(csl[0]) ∧ move(IOAut(cINV, cstep, cext))(csl[0], cext !(cal), csl.last)
aINV0(as), bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, cINV0, aINV0), cINV(csl[0]), cINV0(csl.last), frag*(IOAut(cINV, cstep, cext))(csl, cal), t(csl.last, as), ¬ trace*(IOAut(aINV, astep, aext))(cext !(cal)), ∃ as1. aINV0(as1) ∧ move(IOAut(aINV, astep, aext))(as1, cext !(cal), as) ∧ t(csl[0], as1) ⊦
Used terms: astep, aINV, t, cext !(cal), aext, cINV, cstep, as, csl.last, aINV0, cext, csl[0], cINV0
| bwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), cINV(cs), move(IOAut(cstart, cstep, cext))(cs, el, cs0), t(cs0, as0), aINV(as0) ⊦ ∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, el, as0) ∧ t(cs, as) |
| aINV0(as), bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, cINV0, aINV0), cINV(csl[0]), cINV0(csl.last), frag*(IOAut(cINV, cstep, cext))(csl, cal), t(csl.last, as), ¬ trace*(IOAut(aINV, astep, aext))(cext !(cal)) ⊦ cINV0(csl[0]) ∧ move(IOAut(cINV, cstep, cext))(csl[0], cext !(cal), csl.last) |
aINV0(as), bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, cINV0, aINV0), cINV(csl[0]), cINV0(csl.last), frag*(IOAut(cINV, cstep, cext))(csl, cal), t(csl.last, as), ¬ cINV0(csl[0]), ¬ trace*(IOAut(aINV, astep, aext))(cext !(cal)) ⊦
aINV0(as), bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, cINV0, aINV0), cINV(csl[0]), cINV0(csl.last), frag*(IOAut(cINV, cstep, cext))(csl, cal), t(csl.last, as), ¬ move(IOAut(cINV, cstep, cext))(csl[0], cext !(cal), csl.last), ¬ trace*(IOAut(aINV, astep, aext))(cext !(cal)) ⊦
| aINV0(as), bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, cINV0, aINV0), cINV(csl[0]), cINV0(csl.last), frag*(IOAut(cINV, cstep, cext))(csl, cal), t(csl.last, as), ¬ cINV0(csl[0]), ¬ trace*(IOAut(aINV, astep, aext))(cext !(cal)) ⊦ |
⊦ 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)))
aINV0(as), cINV(csl[0]), cINV0(csl.last), frag*(IOAut(cINV, cstep, cext))(csl, cal), t(csl.last, as), ¬ cINV0(csl[0]), ¬ trace*(IOAut(aINV, astep, aext))(cext !(cal)), ∀ cs. cINV(cs) → cINV0(cs), ∀ as. aINV(as) → aINV0(as), ∀ cs, ca, cs0. cINV0(cs) ∧ cstep(cs, ca, cs0) → cINV0(cs0), ∀ as, aa, as0. aINV0(as) ∧ astep(as, aa, as0) → aINV0(as0), ∀ cs. cINV0(cs) → (∃ as. t(cs, as) ∧ aINV0(as)), ∀ cs, as. cINV(cs) ∧ t(cs, as) ∧ aINV0(as) → aINV(as), ∀ cs, ca, cs0, as0. cINV0(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV0(as0) → (∃ as. aINV0(as) ∧ move(IOAut(aINV, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)) ⊦
Used terms: astep, aINV, t, aext, cINV, cstep, aINV0, cext, cINV0
| ⊦ 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))) |
| aINV0(as), cINV(csl[0]), cINV0(csl.last), frag*(IOAut(cINV, cstep, cext))(csl, cal), t(csl.last, as), ¬ cINV0(csl[0]), ¬ trace*(IOAut(aINV, astep, aext))(cext !(cal)), ∀ cs. cINV(cs) → cINV0(cs), ∀ as. aINV(as) → aINV0(as), ∀ cs, ca, cs0. cINV0(cs) ∧ cstep(cs, ca, cs0) → cINV0(cs0), ∀ as, aa, as0. aINV0(as) ∧ astep(as, aa, as0) → aINV0(as0), ∀ cs. cINV0(cs) → (∃ as. t(cs, as) ∧ aINV0(as)), ∀ cs, as. cINV(cs) ∧ t(cs, as) ∧ aINV0(as) → aINV(as), ∀ cs, ca, cs0, as0. cINV0(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV0(as0) → (∃ as. aINV0(as) ∧ move(IOAut(aINV, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)) ⊦ |
Used terms: csl[0]
| aINV0(as), bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, cINV0, aINV0), cINV(csl[0]), cINV0(csl.last), frag*(IOAut(cINV, cstep, cext))(csl, cal), t(csl.last, as), ¬ move(IOAut(cINV, cstep, cext))(csl[0], cext !(cal), csl.last), ¬ trace*(IOAut(aINV, astep, aext))(cext !(cal)) ⊦ |
⊦ move(ioa)(s1, el, s2) ↔ (∃ al, sl. frag*(ioa)(sl, al) ∧ s1 = sl[0] ∧ s2 = sl.last ∧ ioa.ext !(al) = el)
aINV0(as), bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, cINV0, aINV0), cINV(csl[0]), cINV0(csl.last), frag*(IOAut(cINV, cstep, cext))(csl, cal), t(csl.last, as), ¬ trace*(IOAut(aINV, astep, aext))(cext !(cal)), ∀ al, sl. ¬(frag*(IOAut(cINV, cstep, cext))(sl, al) ∧ csl[0] = sl[0] ∧ csl.last = sl.last ∧ IOAut(cINV, cstep, cext).ext !(al) = cext !(cal)) ⊦
Used terms: IOAut(cINV, cstep, cext), csl[0], cext !(cal), csl.last
| ⊦ move(ioa)(s1, el, s2) ↔ (∃ al, sl. frag*(ioa)(sl, al) ∧ s1 = sl[0] ∧ s2 = sl.last ∧ ioa.ext !(al) = el) |
| aINV0(as), bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, cINV0, aINV0), cINV(csl[0]), cINV0(csl.last), frag*(IOAut(cINV, cstep, cext))(csl, cal), t(csl.last, as), ¬ trace*(IOAut(aINV, astep, aext))(cext !(cal)), ∀ al, sl. ¬(frag*(IOAut(cINV, cstep, cext))(sl, al) ∧ csl[0] = sl[0] ∧ csl.last = sl.last ∧ IOAut(cINV, cstep, cext).ext !(al) = cext !(cal)) ⊦ |
aINV0(as), bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, cINV0, aINV0), cINV(csl[0]), cINV0(csl.last), frag*(IOAut(cINV, cstep, cext))(csl, cal), t(csl.last, as), ¬ trace*(IOAut(aINV, astep, aext))(cext !(cal)), ∀ al, sl. ¬ frag*(IOAut(cINV, cstep, cext))(sl, al) ∨ csl[0] ≠ sl[0] ∨ csl.last ≠ sl.last ∨ cext !(al) ≠ cext !(cal) ⊦
Used simplifier rules: ⊦ IOAut(start, step, ext).ext = ext; (s)
| aINV0(as), bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, cINV0, aINV0), cINV(csl[0]), cINV0(csl.last), frag*(IOAut(cINV, cstep, cext))(csl, cal), t(csl.last, as), ¬ trace*(IOAut(aINV, astep, aext))(cext !(cal)), ∀ al, sl. ¬ frag*(IOAut(cINV, cstep, cext))(sl, al) ∨ csl[0] ≠ sl[0] ∨ csl.last ≠ sl.last ∨ cext !(al) ≠ cext !(cal) ⊦ |
Used terms: cal, csl
| aINV0(as), bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, cINV0, aINV0), cINV(csl[0]), cINV0(csl.last), frag*(IOAut(cINV, cstep, cext))(csl, cal), t(csl.last, as), ¬ trace*(IOAut(aINV, astep, aext))(cext !(cal)), ∃ as1. aINV0(as1) ∧ move(IOAut(aINV, astep, aext))(as1, cext !(cal), as) ∧ t(csl[0], as1) ⊦ |
aINV0(as1), aINV0(as), bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, cINV0, aINV0), cINV(csl[0]), cINV0(csl.last), frag*(IOAut(cINV, cstep, cext))(csl, cal), move(IOAut(aINV, astep, aext))(as1, cext !(cal), as), t(csl[0], as1), t(csl.last, as), ¬ trace*(IOAut(aINV, astep, aext))(cext !(cal)) ⊦
| aINV0(as1), aINV0(as), bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, cINV0, aINV0), cINV(csl[0]), cINV0(csl.last), frag*(IOAut(cINV, cstep, cext))(csl, cal), move(IOAut(aINV, astep, aext))(as1, cext !(cal), as), t(csl[0], as1), t(csl.last, as), ¬ trace*(IOAut(aINV, astep, aext))(cext !(cal)) ⊦ |
⊦ trace*(IOAut(start, step, ext))(el) ↔ (∃ sl, al. el = ext !(al) ∧ exec*(IOAut(start, step, ext))(sl, al))
aINV0(as), aINV0(as1), bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, cINV0, aINV0), cINV(csl[0]), cINV0(csl.last), frag*(IOAut(cINV, cstep, cext))(csl, cal), move(IOAut(aINV, astep, aext))(as1, cext !(cal), as), t(csl.last, as), t(csl[0], as1), ∀ sl, al. ¬(cext !(cal) = aext !(al) ∧ exec*(IOAut(aINV, astep, aext))(sl, al)) ⊦
Used terms: aINV, astep, aext, cext !(cal)
| ⊦ trace*(IOAut(start, step, ext))(el) ↔ (∃ sl, al. el = ext !(al) ∧ exec*(IOAut(start, step, ext))(sl, al)) |
| aINV0(as), aINV0(as1), bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, cINV0, aINV0), cINV(csl[0]), cINV0(csl.last), frag*(IOAut(cINV, cstep, cext))(csl, cal), move(IOAut(aINV, astep, aext))(as1, cext !(cal), as), t(csl.last, as), t(csl[0], as1), ∀ sl, al. ¬(cext !(cal) = aext !(al) ∧ exec*(IOAut(aINV, astep, aext))(sl, al)) ⊦ |
aINV0(as1), aINV0(as), bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, cINV0, aINV0), cINV(csl[0]), cINV0(csl.last), frag*(IOAut(cINV, cstep, cext))(csl, cal), move(IOAut(aINV, astep, aext))(as1, cext !(cal), as), t(csl[0], as1), t(csl.last, as), ∀ sl, al. cext !(cal) ≠ aext !(al) ∨ ¬ frag*(IOAut(aINV, astep, aext))(sl, al) ∨ ¬ aINV(sl[0]) ⊦
Used simplifier rules: ⊦ IOAut(start, step, ext).start = start; (s) ⊦ exec*(ioa)(sl, al) ↔ frag*(ioa)(sl, al) ∧ ioa.start(sl[0]); (s)
| aINV0(as1), aINV0(as), bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, cINV0, aINV0), cINV(csl[0]), cINV0(csl.last), frag*(IOAut(cINV, cstep, cext))(csl, cal), move(IOAut(aINV, astep, aext))(as1, cext !(cal), as), t(csl[0], as1), t(csl.last, as), ∀ sl, al. cext !(cal) ≠ aext !(al) ∨ ¬ frag*(IOAut(aINV, astep, aext))(sl, al) ∨ ¬ aINV(sl[0]) ⊦ |
⊦ move(ioa)(s1, el, s2) ↔ (∃ al, sl. frag*(ioa)(sl, al) ∧ s1 = sl[0] ∧ s2 = sl.last ∧ ioa.ext !(al) = el)
aINV0(as), aINV0(as1), bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, cINV0, aINV0), cINV(csl[0]), cINV0(csl.last), frag*(IOAut(cINV, cstep, cext))(csl, cal), t(csl.last, as), t(csl[0], as1), ∀ sl, al. cext !(cal) ≠ aext !(al) ∨ ¬ frag*(IOAut(aINV, astep, aext))(sl, al) ∨ ¬ aINV(sl[0]), ∃ al, sl. frag*(IOAut(aINV, astep, aext))(sl, al) ∧ as1 = sl[0] ∧ as = sl.last ∧ IOAut(aINV, astep, aext).ext !(al) = cext !(cal) ⊦
Used terms: IOAut(aINV, astep, aext), as1, cext !(cal), as
| ⊦ move(ioa)(s1, el, s2) ↔ (∃ al, sl. frag*(ioa)(sl, al) ∧ s1 = sl[0] ∧ s2 = sl.last ∧ ioa.ext !(al) = el) |
| aINV0(as), aINV0(as1), bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, cINV0, aINV0), cINV(csl[0]), cINV0(csl.last), frag*(IOAut(cINV, cstep, cext))(csl, cal), t(csl.last, as), t(csl[0], as1), ∀ sl, al. cext !(cal) ≠ aext !(al) ∨ ¬ frag*(IOAut(aINV, astep, aext))(sl, al) ∨ ¬ aINV(sl[0]), ∃ al, sl. frag*(IOAut(aINV, astep, aext))(sl, al) ∧ as1 = sl[0] ∧ as = sl.last ∧ IOAut(aINV, astep, aext).ext !(al) = cext !(cal) ⊦ |
aext !(aal) = cext !(cal), aINV0(asl[0]), aINV0(asl.last), bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, cINV0, aINV0), cINV(csl[0]), cINV0(csl.last), frag*(IOAut(aINV, astep, aext))(asl, aal), frag*(IOAut(cINV, cstep, cext))(csl, cal), t(csl[0], asl[0]), t(csl.last, asl.last), ∀ sl, al. cext !(cal) ≠ aext !(al) ∨ ¬ frag*(IOAut(aINV, astep, aext))(sl, al) ∨ ¬ aINV(sl[0]) ⊦
Used simplifier rules: ⊦ IOAut(start, step, ext).ext = ext; (s)
| aext !(aal) = cext !(cal), aINV0(asl[0]), aINV0(asl.last), bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, cINV0, aINV0), cINV(csl[0]), cINV0(csl.last), frag*(IOAut(aINV, astep, aext))(asl, aal), frag*(IOAut(cINV, cstep, cext))(csl, cal), t(csl[0], asl[0]), t(csl.last, asl.last), ∀ sl, al. cext !(cal) ≠ aext !(al) ∨ ¬ frag*(IOAut(aINV, astep, aext))(sl, al) ∨ ¬ aINV(sl[0]) ⊦ |
aext !(aal) = cext !(cal), aINV0(asl.last), aINV0(asl[0]), bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, cINV0, aINV0), cINV(csl[0]), cINV0(csl.last), frag*(IOAut(cINV, cstep, cext))(csl, cal), frag*(IOAut(aINV, astep, aext))(asl, aal), t(csl.last, asl.last), t(csl[0], asl[0]), cext !(cal) ≠ aext !(aal) ∨ ¬ frag*(IOAut(aINV, astep, aext))(asl, aal) ∨ ¬ aINV(asl[0]) ⊦
Used terms: asl, aal
| aext !(aal) = cext !(cal), aINV0(asl.last), aINV0(asl[0]), bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, cINV0, aINV0), cINV(csl[0]), cINV0(csl.last), frag*(IOAut(cINV, cstep, cext))(csl, cal), frag*(IOAut(aINV, astep, aext))(asl, aal), t(csl.last, asl.last), t(csl[0], asl[0]), cext !(cal) ≠ aext !(aal) ∨ ¬ frag*(IOAut(aINV, astep, aext))(asl, aal) ∨ ¬ aINV(asl[0]) ⊦ |
aext !(aal) = cext !(cal), aINV0(asl[0]), aINV0(asl.last), bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, cINV0, aINV0), cINV(csl[0]), cINV0(csl.last), frag*(IOAut(aINV, astep, aext))(asl, aal), frag*(IOAut(cINV, cstep, cext))(csl, cal), t(csl[0], asl[0]), t(csl.last, asl.last), ¬ aINV(asl[0]) ⊦
| aext !(aal) = cext !(cal), aINV0(asl[0]), aINV0(asl.last), bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, cINV0, aINV0), cINV(csl[0]), cINV0(csl.last), frag*(IOAut(aINV, astep, aext))(asl, aal), frag*(IOAut(cINV, cstep, cext))(csl, cal), t(csl[0], asl[0]), t(csl.last, asl.last), ¬ aINV(asl[0]) ⊦ |
⊦ 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)))
aext !(aal) = cext !(cal), aINV0(asl.last), aINV0(asl[0]), cINV(csl[0]), cINV0(csl.last), frag*(IOAut(cINV, cstep, cext))(csl, cal), frag*(IOAut(aINV, astep, aext))(asl, aal), t(csl.last, asl.last), t(csl[0], asl[0]), ¬ aINV(asl[0]), ∀ cs. cINV(cs) → cINV0(cs), ∀ as. aINV(as) → aINV0(as), ∀ cs, ca, cs0. cINV0(cs) ∧ cstep(cs, ca, cs0) → cINV0(cs0), ∀ as, aa, as0. aINV0(as) ∧ astep(as, aa, as0) → aINV0(as0), ∀ cs. cINV0(cs) → (∃ as. t(cs, as) ∧ aINV0(as)), ∀ cs, as. cINV(cs) ∧ t(cs, as) ∧ aINV0(as) → aINV(as), ∀ cs, ca, cs0, as0. cINV0(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV0(as0) → (∃ as. aINV0(as) ∧ move(IOAut(aINV, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)) ⊦
Used terms: astep, aINV, t, aext, cINV, cstep, aINV0, cext, cINV0
| ⊦ 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))) |
| aext !(aal) = cext !(cal), aINV0(asl.last), aINV0(asl[0]), cINV(csl[0]), cINV0(csl.last), frag*(IOAut(cINV, cstep, cext))(csl, cal), frag*(IOAut(aINV, astep, aext))(asl, aal), t(csl.last, asl.last), t(csl[0], asl[0]), ¬ aINV(asl[0]), ∀ cs. cINV(cs) → cINV0(cs), ∀ as. aINV(as) → aINV0(as), ∀ cs, ca, cs0. cINV0(cs) ∧ cstep(cs, ca, cs0) → cINV0(cs0), ∀ as, aa, as0. aINV0(as) ∧ astep(as, aa, as0) → aINV0(as0), ∀ cs. cINV0(cs) → (∃ as. t(cs, as) ∧ aINV0(as)), ∀ cs, as. cINV(cs) ∧ t(cs, as) ∧ aINV0(as) → aINV(as), ∀ cs, ca, cs0, as0. cINV0(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV0(as0) → (∃ as. aINV0(as) ∧ move(IOAut(aINV, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)) ⊦ |
Used terms: csl[0], asl[0]
| bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, cINV0, aINV0), cINV(csl[0]), cINV0(csl.last), frag*(IOAut(cINV, cstep, cext))(csl, cal), ¬ trace*(IOAut(aINV, astep, aext))(cext !(cal)) ⊦ ∃ as. t(csl.last, as) ∧ aINV0(as) |
⊦ 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)))
cINV(csl[0]), cINV0(csl.last), frag*(IOAut(cINV, cstep, cext))(csl, cal), ¬ trace*(IOAut(aINV, astep, aext))(cext !(cal)), ∀ cs. cINV(cs) → cINV0(cs), ∀ as. aINV(as) → aINV0(as), ∀ cs, ca, cs0. cINV0(cs) ∧ cstep(cs, ca, cs0) → cINV0(cs0), ∀ as, aa, as0. aINV0(as) ∧ astep(as, aa, as0) → aINV0(as0), ∀ cs. cINV0(cs) → (∃ as. t(cs, as) ∧ aINV0(as)), ∀ cs, as. cINV(cs) ∧ t(cs, as) ∧ aINV0(as) → aINV(as), ∀ cs, ca, cs0, as0. cINV0(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV0(as0) → (∃ as. aINV0(as) ∧ move(IOAut(aINV, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)) ⊦ ∃ as. t(csl.last, as) ∧ aINV0(as)
Used terms: astep, aINV, t, aext, cINV, cstep, aINV0, cext, cINV0
| ⊦ 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))) |
| cINV(csl[0]), cINV0(csl.last), frag*(IOAut(cINV, cstep, cext))(csl, cal), ¬ trace*(IOAut(aINV, astep, aext))(cext !(cal)), ∀ cs. cINV(cs) → cINV0(cs), ∀ as. aINV(as) → aINV0(as), ∀ cs, ca, cs0. cINV0(cs) ∧ cstep(cs, ca, cs0) → cINV0(cs0), ∀ as, aa, as0. aINV0(as) ∧ astep(as, aa, as0) → aINV0(as0), ∀ cs. cINV0(cs) → (∃ as. t(cs, as) ∧ aINV0(as)), ∀ cs, as. cINV(cs) ∧ t(cs, as) ∧ aINV0(as) → aINV(as), ∀ cs, ca, cs0, as0. cINV0(cs) ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ aINV0(as0) → (∃ as. aINV0(as) ∧ move(IOAut(aINV, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)) ⊦ ∃ as. t(csl.last, as) ∧ aINV0(as) |
Used terms: csl.last
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.