| ⊦ bwsim(cioaut, aioaut, t) ↔ bwsim(cioaut, aioaut, t, λ cs. true, λ as. true) |
¬(bwsim(cioaut, aioaut, t) ↔ bwsim(cioaut, aioaut, t, λ cs. true, λ as. true)) ⊦
| ¬(bwsim(cioaut, aioaut, t) ↔ bwsim(cioaut, aioaut, t, λ cs. true, λ as. true)) ⊦ |
cioaut = IOAut(cINV, cstep, cext), ¬(bwsim(cioaut, aioaut, t) ↔ bwsim(cioaut, aioaut, t, λ cs. true, λ as. true)) ⊦
Used simplifier rules: IOAutomaton('s, 'a, 'e) freely generated by IOAut;;
| cioaut = IOAut(cINV, cstep, cext), ¬(bwsim(cioaut, aioaut, t) ↔ bwsim(cioaut, aioaut, t, λ cs. true, λ as. true)) ⊦ |
¬(bwsim(IOAut(cINV, cstep, cext), aioaut, t) ↔ bwsim(IOAut(cINV, cstep, cext), aioaut, t, λ cs. true, λ as. true)) ⊦
| ¬(bwsim(IOAut(cINV, cstep, cext), aioaut, t) ↔ bwsim(IOAut(cINV, cstep, cext), aioaut, t, λ cs. true, λ as. true)) ⊦ |
aioaut = IOAut(aINV, astep, aext), ¬(bwsim(IOAut(cINV, cstep, cext), aioaut, t) ↔ bwsim(IOAut(cINV, cstep, cext), aioaut, t, λ cs. true, λ as. true)) ⊦
Used simplifier rules: IOAutomaton('s, 'a, 'e) freely generated by IOAut;;
| aioaut = IOAut(aINV, astep, aext), ¬(bwsim(IOAut(cINV, cstep, cext), aioaut, t) ↔ bwsim(IOAut(cINV, cstep, cext), aioaut, t, λ cs. true, λ as. true)) ⊦ |
¬(bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t) ↔ bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, λ cs. true, λ as. true)) ⊦
| ¬(bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t) ↔ bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, λ cs. true, λ as. true)) ⊦ |
⊦ bwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t) ↔ (∀ cs. ∃ as. t(cs, as)) ∧ (∀ cs, as. cstart(cs) ∧ t(cs, as) → astart(as)) ∧ (∀ cs, ca, cs0, as0. cstep(cs, ca, cs0) ∧ t(cs0, as0) → (∃ as. move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)))
⊦ (∀ cs. ∃ as. t(cs, as)) ∧ (∀ cs, as. cINV(cs) ∧ t(cs, as) → aINV(as)) ∧ (∀ cs, ca, cs0, as0. cstep(cs, ca, cs0) ∧ t(cs0, as0) → (∃ as. move(IOAut(aINV, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as))) ↔ bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, λ cs. true, λ as. true)
Used terms: astep, aINV, t, aext, cINV, cstep, cext
| ⊦ bwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t) ↔ (∀ cs. ∃ as. t(cs, as)) ∧ (∀ cs, as. cstart(cs) ∧ t(cs, as) → astart(as)) ∧ (∀ cs, ca, cs0, as0. cstep(cs, ca, cs0) ∧ t(cs0, as0) → (∃ as. move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as))) |
| ⊦ (∀ cs. ∃ as. t(cs, as)) ∧ (∀ cs, as. cINV(cs) ∧ t(cs, as) → aINV(as)) ∧ (∀ cs, ca, cs0, as0. cstep(cs, ca, cs0) ∧ t(cs0, as0) → (∃ as. move(IOAut(aINV, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as))) ↔ bwsim(IOAut(cINV, cstep, cext), IOAut(aINV, astep, aext), t, λ cs. true, λ as. true) |
⊦ 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)))
⊦ (∀ cs. ∃ as. t(cs, as)) ∧ (∀ cs, as. cINV(cs) ∧ t(cs, as) → aINV(as)) ∧ (∀ cs, ca, cs0, as0. cstep(cs, ca, cs0) ∧ t(cs0, as0) → (∃ as. move(IOAut(aINV, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as))) ↔ (∀ cs. cINV(cs) → true) ∧ (∀ as. aINV(as) → true) ∧ (∀ cs, ca, cs0. true ∧ cstep(cs, ca, cs0) → true) ∧ (∀ as, aa, as0. true ∧ astep(as, aa, as0) → true) ∧ (∀ cs. true → (∃ as. t(cs, as) ∧ true)) ∧ (∀ cs, as. cINV(cs) ∧ t(cs, as) ∧ true → aINV(as)) ∧ (∀ cs, ca, cs0, as0. true ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ true → (∃ as. true ∧ move(IOAut(aINV, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)))
Used terms: astep, aINV, t, aext, cINV, cstep, λ as. true, cext, λ cs. true
| ⊦ 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))) |
| ⊦ (∀ cs. ∃ as. t(cs, as)) ∧ (∀ cs, as. cINV(cs) ∧ t(cs, as) → aINV(as)) ∧ (∀ cs, ca, cs0, as0. cstep(cs, ca, cs0) ∧ t(cs0, as0) → (∃ as. move(IOAut(aINV, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as))) ↔ (∀ cs. cINV(cs) → true) ∧ (∀ as. aINV(as) → true) ∧ (∀ cs, ca, cs0. true ∧ cstep(cs, ca, cs0) → true) ∧ (∀ as, aa, as0. true ∧ astep(as, aa, as0) → true) ∧ (∀ cs. true → (∃ as. t(cs, as) ∧ true)) ∧ (∀ cs, as. cINV(cs) ∧ t(cs, as) ∧ true → aINV(as)) ∧ (∀ cs, ca, cs0, as0. true ∧ cstep(cs, ca, cs0) ∧ t(cs0, as0) ∧ true → (∃ as. true ∧ move(IOAut(aINV, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as))) |
∀ cs. ∃ as. t(cs, as), ∀ cs, as. cINV(cs) ∧ t(cs, as) → aINV(as), ∀ cs, ca, cs0, as0. cstep(cs, ca, cs0) ∧ t(cs0, as0) → (∃ as. move(IOAut(aINV, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)) ⊦ (∃ as. t(cs, as)) ∧ (cINV(cs0) ∧ t(cs0, as) → aINV(as)) ∧ (cstep(cs1, ca, cs2) ∧ t(cs2, as0) → (∃ as1. move(IOAut(aINV, astep, aext))(as1, cext !(ca '), as0) ∧ t(cs1, as1)))
| ∀ cs. ∃ as. t(cs, as), ∀ cs, as. cINV(cs) ∧ t(cs, as) → aINV(as), ∀ cs, ca, cs0, as0. cstep(cs, ca, cs0) ∧ t(cs0, as0) → (∃ as. move(IOAut(aINV, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)) ⊦ (∃ as. t(cs, as)) ∧ (cINV(cs0) ∧ t(cs0, as) → aINV(as)) ∧ (cstep(cs1, ca, cs2) ∧ t(cs2, as0) → (∃ as1. move(IOAut(aINV, astep, aext))(as1, cext !(ca '), as0) ∧ t(cs1, as1))) |
∀ cs, ca, cs0, as0. cstep(cs, ca, cs0) ∧ t(cs0, as0) → (∃ as. move(IOAut(aINV, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cINV(cs) ∧ t(cs, as) → aINV(as), ∀ cs. ∃ as. t(cs, as) ⊦ ∃ as. t(cs, as)
cINV(cs0), t(cs0, as), ¬ aINV(as), ∀ cs, ca, cs0, as0. cstep(cs, ca, cs0) ∧ t(cs0, as0) → (∃ as. move(IOAut(aINV, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cINV(cs) ∧ t(cs, as) → aINV(as), ∀ cs. ∃ as. t(cs, as) ⊦
cstep(cs1, ca, cs2), t(cs2, as0), ∀ cs, ca, cs0, as0. cstep(cs, ca, cs0) ∧ t(cs0, as0) → (∃ as. move(IOAut(aINV, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cINV(cs) ∧ t(cs, as) → aINV(as), ∀ cs. ∃ as. t(cs, as) ⊦ ∃ as1. move(IOAut(aINV, astep, aext))(as1, cext !(ca '), as0) ∧ t(cs1, as1)
| ∀ cs, ca, cs0, as0. cstep(cs, ca, cs0) ∧ t(cs0, as0) → (∃ as. move(IOAut(aINV, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cINV(cs) ∧ t(cs, as) → aINV(as), ∀ cs. ∃ as. t(cs, as) ⊦ ∃ as. t(cs, as) |
∀ cs. ∃ as. t(cs, as), ∀ cs, as. cINV(cs) ∧ t(cs, as) → aINV(as), ∀ cs, ca, cs0, as0. cstep(cs, ca, cs0) ∧ t(cs0, as0) → (∃ as. move(IOAut(aINV, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∃ as. t(cs, as) ⊦ ∃ as. t(cs, as)
Used terms: cs
| ∀ cs. ∃ as. t(cs, as), ∀ cs, as. cINV(cs) ∧ t(cs, as) → aINV(as), ∀ cs, ca, cs0, as0. cstep(cs, ca, cs0) ∧ t(cs0, as0) → (∃ as. move(IOAut(aINV, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∃ as. t(cs, as) ⊦ ∃ as. t(cs, as) |
t(cs, as), ∀ cs, ca, cs0, as0. cstep(cs, ca, cs0) ∧ t(cs0, as0) → (∃ as. move(IOAut(aINV, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cINV(cs) ∧ t(cs, as) → aINV(as), ∀ cs. ∃ as. t(cs, as) ⊦ ∃ as. t(cs, as)
| t(cs, as), ∀ cs, ca, cs0, as0. cstep(cs, ca, cs0) ∧ t(cs0, as0) → (∃ as. move(IOAut(aINV, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cINV(cs) ∧ t(cs, as) → aINV(as), ∀ cs. ∃ as. t(cs, as) ⊦ ∃ as. t(cs, as) |
Used terms: as
| cINV(cs0), t(cs0, as), ¬ aINV(as), ∀ cs, ca, cs0, as0. cstep(cs, ca, cs0) ∧ t(cs0, as0) → (∃ as. move(IOAut(aINV, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cINV(cs) ∧ t(cs, as) → aINV(as), ∀ cs. ∃ as. t(cs, as) ⊦ |
Used terms: cs0, as
| cstep(cs1, ca, cs2), t(cs2, as0), ∀ cs, ca, cs0, as0. cstep(cs, ca, cs0) ∧ t(cs0, as0) → (∃ as. move(IOAut(aINV, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cINV(cs) ∧ t(cs, as) → aINV(as), ∀ cs. ∃ as. t(cs, as) ⊦ ∃ as1. move(IOAut(aINV, astep, aext))(as1, cext !(ca '), as0) ∧ t(cs1, as1) |
cstep(cs1, ca, cs2), t(cs2, as0), cstep(cs1, ca, cs2) ∧ t(cs2, as0) → (∃ as. move(IOAut(aINV, astep, aext))(as, cext !(ca '), as0) ∧ t(cs1, as)), ∀ cs. ∃ as. t(cs, as), ∀ cs, as. cINV(cs) ∧ t(cs, as) → aINV(as), ∀ cs, ca, cs0, as0. cstep(cs, ca, cs0) ∧ t(cs0, as0) → (∃ as. move(IOAut(aINV, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)) ⊦ ∃ as1. move(IOAut(aINV, astep, aext))(as1, cext !(ca '), as0) ∧ t(cs1, as1)
Used terms: cs1, ca, cs2, as0
| cstep(cs1, ca, cs2), t(cs2, as0), cstep(cs1, ca, cs2) ∧ t(cs2, as0) → (∃ as. move(IOAut(aINV, astep, aext))(as, cext !(ca '), as0) ∧ t(cs1, as)), ∀ cs. ∃ as. t(cs, as), ∀ cs, as. cINV(cs) ∧ t(cs, as) → aINV(as), ∀ cs, ca, cs0, as0. cstep(cs, ca, cs0) ∧ t(cs0, as0) → (∃ as. move(IOAut(aINV, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)) ⊦ ∃ as1. move(IOAut(aINV, astep, aext))(as1, cext !(ca '), as0) ∧ t(cs1, as1) |
cstep(cs1, ca, cs2), move(IOAut(aINV, astep, aext))(as, cext !(ca '), as0), t(cs2, as0), t(cs1, as), ∀ cs, ca, cs0, as0. cstep(cs, ca, cs0) ∧ t(cs0, as0) → (∃ as. move(IOAut(aINV, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cINV(cs) ∧ t(cs, as) → aINV(as), ∀ cs. ∃ as. t(cs, as) ⊦ ∃ as1. move(IOAut(aINV, astep, aext))(as1, cext !(ca '), as0) ∧ t(cs1, as1)
| cstep(cs1, ca, cs2), move(IOAut(aINV, astep, aext))(as, cext !(ca '), as0), t(cs2, as0), t(cs1, as), ∀ cs, ca, cs0, as0. cstep(cs, ca, cs0) ∧ t(cs0, as0) → (∃ as. move(IOAut(aINV, astep, aext))(as, cext !(ca '), as0) ∧ t(cs, as)), ∀ cs, as. cINV(cs) ∧ t(cs, as) → aINV(as), ∀ cs. ∃ as. t(cs, as) ⊦ ∃ as1. move(IOAut(aINV, astep, aext))(as1, cext !(ca '), as0) ∧ t(cs1, as1) |
Used terms: as
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.