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