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