| ⊦ fwsim(cioaut, bioaut, rbc) ∧ fwsim(bioaut, aioaut, rab) → fwsim(cioaut, aioaut, λ as, cs. ∃ bs. rab(as, bs) ∧ rbc(bs, cs)) |
fwsim(cioaut, bioaut, rbc), fwsim(bioaut, aioaut, rab) ⊦ fwsim(cioaut, aioaut, λ as, cs. ∃ bs. rab(as, bs) ∧ rbc(bs, cs))
| fwsim(cioaut, bioaut, rbc), fwsim(bioaut, aioaut, rab) ⊦ fwsim(cioaut, aioaut, λ as, cs. ∃ bs. rab(as, bs) ∧ rbc(bs, cs)) |
cioaut = IOAut(cstart, cstep, cext), fwsim(bioaut, aioaut, rab), fwsim(cioaut, bioaut, rbc) ⊦ fwsim(cioaut, aioaut, λ as, cs. ∃ bs. rab(as, bs) ∧ rbc(bs, cs))
Used simplifier rules: IOAutomaton('s, 'a, 'e) freely generated by IOAut;;
| cioaut = IOAut(cstart, cstep, cext), fwsim(bioaut, aioaut, rab), fwsim(cioaut, bioaut, rbc) ⊦ fwsim(cioaut, aioaut, λ as, cs. ∃ bs. rab(as, bs) ∧ rbc(bs, cs)) |
fwsim(IOAut(cstart, cstep, cext), bioaut, rbc), fwsim(bioaut, aioaut, rab) ⊦ fwsim(IOAut(cstart, cstep, cext), aioaut, λ as, cs. ∃ bs. rab(as, bs) ∧ rbc(bs, cs))
| fwsim(IOAut(cstart, cstep, cext), bioaut, rbc), fwsim(bioaut, aioaut, rab) ⊦ fwsim(IOAut(cstart, cstep, cext), aioaut, λ as, cs. ∃ bs. rab(as, bs) ∧ rbc(bs, cs)) |
aioaut = IOAut(astart, astep, aext), fwsim(bioaut, aioaut, rab), fwsim(IOAut(cstart, cstep, cext), bioaut, rbc) ⊦ fwsim(IOAut(cstart, cstep, cext), aioaut, λ as, cs. ∃ bs. rab(as, bs) ∧ rbc(bs, cs))
Used simplifier rules: IOAutomaton('s, 'a, 'e) freely generated by IOAut;;
| aioaut = IOAut(astart, astep, aext), fwsim(bioaut, aioaut, rab), fwsim(IOAut(cstart, cstep, cext), bioaut, rbc) ⊦ fwsim(IOAut(cstart, cstep, cext), aioaut, λ as, cs. ∃ bs. rab(as, bs) ∧ rbc(bs, cs)) |
fwsim(IOAut(cstart, cstep, cext), bioaut, rbc), fwsim(bioaut, IOAut(astart, astep, aext), rab) ⊦ fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), λ as, cs. ∃ bs. rab(as, bs) ∧ rbc(bs, cs))
| fwsim(IOAut(cstart, cstep, cext), bioaut, rbc), fwsim(bioaut, IOAut(astart, astep, aext), rab) ⊦ fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), λ as, cs. ∃ bs. rab(as, bs) ∧ rbc(bs, cs)) |
bioaut = IOAut(bstart, bstep, bext), fwsim(bioaut, IOAut(astart, astep, aext), rab), fwsim(IOAut(cstart, cstep, cext), bioaut, rbc) ⊦ fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), λ as, cs. ∃ bs. rab(as, bs) ∧ rbc(bs, cs))
Used simplifier rules: IOAutomaton('s, 'a, 'e) freely generated by IOAut;;
| bioaut = IOAut(bstart, bstep, bext), fwsim(bioaut, IOAut(astart, astep, aext), rab), fwsim(IOAut(cstart, cstep, cext), bioaut, rbc) ⊦ fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), λ as, cs. ∃ bs. rab(as, bs) ∧ rbc(bs, cs)) |
fwsim(IOAut(cstart, cstep, cext), IOAut(bstart, bstep, bext), rbc), fwsim(IOAut(bstart, bstep, bext), IOAut(astart, astep, aext), rab) ⊦ fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), λ as, cs. ∃ bs. rab(as, bs) ∧ rbc(bs, cs))
| fwsim(IOAut(cstart, cstep, cext), IOAut(bstart, bstep, bext), rbc), fwsim(IOAut(bstart, bstep, bext), IOAut(astart, astep, aext), rab) ⊦ fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), λ as, cs. ∃ bs. rab(as, bs) ∧ rbc(bs, cs)) |
⊦ fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r) ↔ (∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as))) ∧ (∀ cs, ca, cs0, as. r(as, cs) ∧ cstep(cs, ca, cs0) → (∃ as0. move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ r(as0, cs0)))
fwsim(IOAut(bstart, bstep, bext), IOAut(astart, astep, aext), rab), ∀ cs. cstart(cs) → (∃ bs. rbc(bs, cs) ∧ bstart(bs)), ∀ cs, ca, cs0, bs. rbc(bs, cs) ∧ cstep(cs, ca, cs0) → (∃ bs0. move(IOAut(bstart, bstep, bext))(bs, cext !(ca '), bs0) ∧ rbc(bs0, cs0)) ⊦ fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), λ as, cs. ∃ bs. rab(as, bs) ∧ rbc(bs, cs))
Used terms: cstep, cext, bext, rbc, bstart, cstart, bstep
| ⊦ fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r) ↔ (∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as))) ∧ (∀ cs, ca, cs0, as. r(as, cs) ∧ cstep(cs, ca, cs0) → (∃ as0. move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ r(as0, cs0))) |
| fwsim(IOAut(bstart, bstep, bext), IOAut(astart, astep, aext), rab), ∀ cs. cstart(cs) → (∃ bs. rbc(bs, cs) ∧ bstart(bs)), ∀ cs, ca, cs0, bs. rbc(bs, cs) ∧ cstep(cs, ca, cs0) → (∃ bs0. move(IOAut(bstart, bstep, bext))(bs, cext !(ca '), bs0) ∧ rbc(bs0, cs0)) ⊦ fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), λ as, cs. ∃ bs. rab(as, bs) ∧ rbc(bs, cs)) |
fwsim(IOAut(bstart, bstep, bext), IOAut(astart, astep, aext), rab), ∀ cs. cstart(cs) → (∃ bs. rbc(bs, cs) ∧ bstart(bs)), ∀ cs, ca, cs0, bs. rbc(bs, cs) ∧ cstep(cs, ca, cs0) → (∃ bs0. move(IOAut(bstart, bstep, bext))(bs, (cext(ca) = None ⊃ [];cext(ca).get '), bs0) ∧ rbc(bs0, cs0)) ⊦ fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), λ as, cs. ∃ bs. rab(as, bs) ∧ rbc(bs, cs))
Used simplifier rules: ⊦ ext !(a ') = (ext(a) = None ⊃ [];ext(a).get '); (s)
| fwsim(IOAut(bstart, bstep, bext), IOAut(astart, astep, aext), rab), ∀ cs. cstart(cs) → (∃ bs. rbc(bs, cs) ∧ bstart(bs)), ∀ cs, ca, cs0, bs. rbc(bs, cs) ∧ cstep(cs, ca, cs0) → (∃ bs0. move(IOAut(bstart, bstep, bext))(bs, (cext(ca) = None ⊃ [];cext(ca).get '), bs0) ∧ rbc(bs0, cs0)) ⊦ fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), λ as, cs. ∃ bs. rab(as, bs) ∧ rbc(bs, cs)) |
⊦ fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r) ↔ (∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as))) ∧ (∀ cs, ca, cs0, as. r(as, cs) ∧ cstep(cs, ca, cs0) → (∃ as0. move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ r(as0, cs0)))
fwsim(IOAut(bstart, bstep, bext), IOAut(astart, astep, aext), rab), ∀ cs, ca, cs0, bs. rbc(bs, cs) ∧ cstep(cs, ca, cs0) → (∃ bs0. move(IOAut(bstart, bstep, bext))(bs, (cext(ca) = None ⊃ [];cext(ca).get '), bs0) ∧ rbc(bs0, cs0)), ∀ cs. cstart(cs) → (∃ bs. rbc(bs, cs) ∧ bstart(bs)) ⊦ (∀ cs. cstart(cs) → (∃ as. (∃ bs. rab(as, bs) ∧ rbc(bs, cs)) ∧ astart(as))) ∧ (∀ cs, ca, cs0, as. (∃ bs. rab(as, bs) ∧ rbc(bs, cs)) ∧ cstep(cs, ca, cs0) → (∃ as0. move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ (∃ bs. rab(as0, bs) ∧ rbc(bs, cs0))))
Used terms: cstep, cext, aext, λ as, cs. ∃ bs. rab(as, bs) ∧ rbc(bs, cs), astart, cstart, astep
| ⊦ fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r) ↔ (∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as))) ∧ (∀ cs, ca, cs0, as. r(as, cs) ∧ cstep(cs, ca, cs0) → (∃ as0. move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ r(as0, cs0))) |
| fwsim(IOAut(bstart, bstep, bext), IOAut(astart, astep, aext), rab), ∀ cs, ca, cs0, bs. rbc(bs, cs) ∧ cstep(cs, ca, cs0) → (∃ bs0. move(IOAut(bstart, bstep, bext))(bs, (cext(ca) = None ⊃ [];cext(ca).get '), bs0) ∧ rbc(bs0, cs0)), ∀ cs. cstart(cs) → (∃ bs. rbc(bs, cs) ∧ bstart(bs)) ⊦ (∀ cs. cstart(cs) → (∃ as. (∃ bs. rab(as, bs) ∧ rbc(bs, cs)) ∧ astart(as))) ∧ (∀ cs, ca, cs0, as. (∃ bs. rab(as, bs) ∧ rbc(bs, cs)) ∧ cstep(cs, ca, cs0) → (∃ as0. move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ (∃ bs. rab(as0, bs) ∧ rbc(bs, cs0)))) |
fwsim(IOAut(bstart, bstep, bext), IOAut(astart, astep, aext), rab), ∀ cs. cstart(cs) → (∃ bs. rbc(bs, cs) ∧ bstart(bs)), ∀ cs, ca, cs0, bs. rbc(bs, cs) ∧ cstep(cs, ca, cs0) → (∃ bs0. move(IOAut(bstart, bstep, bext))(bs, (cext(ca) = None ⊃ [];cext(ca).get '), bs0) ∧ rbc(bs0, cs0)) ⊦ (cstart(cs) → (∃ as. (∃ bs. rab(as, bs) ∧ rbc(bs, cs)) ∧ astart(as))) ∧ ( rab(as, bs) ∧ rbc(bs, cs0) ∧ cstep(cs0, ca, cs1) → (∃ as0. move(IOAut(astart, astep, aext))(as, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ (∃ bs. rab(as0, bs) ∧ rbc(bs, cs1))))
Used simplifier rules: ⊦ ext !(a ') = (ext(a) = None ⊃ [];ext(a).get '); (s)
| fwsim(IOAut(bstart, bstep, bext), IOAut(astart, astep, aext), rab), ∀ cs. cstart(cs) → (∃ bs. rbc(bs, cs) ∧ bstart(bs)), ∀ cs, ca, cs0, bs. rbc(bs, cs) ∧ cstep(cs, ca, cs0) → (∃ bs0. move(IOAut(bstart, bstep, bext))(bs, (cext(ca) = None ⊃ [];cext(ca).get '), bs0) ∧ rbc(bs0, cs0)) ⊦ (cstart(cs) → (∃ as. (∃ bs. rab(as, bs) ∧ rbc(bs, cs)) ∧ astart(as))) ∧ ( rab(as, bs) ∧ rbc(bs, cs0) ∧ cstep(cs0, ca, cs1) → (∃ as0. move(IOAut(astart, astep, aext))(as, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ (∃ bs. rab(as0, bs) ∧ rbc(bs, cs1)))) |
cstart(cs), fwsim(IOAut(bstart, bstep, bext), IOAut(astart, astep, aext), rab), ∀ cs, ca, cs0, bs. rbc(bs, cs) ∧ cstep(cs, ca, cs0) → (∃ bs0. move(IOAut(bstart, bstep, bext))(bs, (cext(ca) = None ⊃ [];cext(ca).get '), bs0) ∧ rbc(bs0, cs0)), ∀ cs. cstart(cs) → (∃ bs. rbc(bs, cs) ∧ bstart(bs)) ⊦ ∃ as. (∃ bs. rab(as, bs) ∧ rbc(bs, cs)) ∧ astart(as)
cstep(cs0, ca, cs1), fwsim(IOAut(bstart, bstep, bext), IOAut(astart, astep, aext), rab), rab(as, bs), rbc(bs, cs0), ∀ cs, ca, cs0, bs. rbc(bs, cs) ∧ cstep(cs, ca, cs0) → (∃ bs0. move(IOAut(bstart, bstep, bext))(bs, (cext(ca) = None ⊃ [];cext(ca).get '), bs0) ∧ rbc(bs0, cs0)), ∀ cs. cstart(cs) → (∃ bs. rbc(bs, cs) ∧ bstart(bs)) ⊦ ∃ as0. move(IOAut(astart, astep, aext))(as, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ (∃ bs. rab(as0, bs) ∧ rbc(bs, cs1))
| cstart(cs), fwsim(IOAut(bstart, bstep, bext), IOAut(astart, astep, aext), rab), ∀ cs, ca, cs0, bs. rbc(bs, cs) ∧ cstep(cs, ca, cs0) → (∃ bs0. move(IOAut(bstart, bstep, bext))(bs, (cext(ca) = None ⊃ [];cext(ca).get '), bs0) ∧ rbc(bs0, cs0)), ∀ cs. cstart(cs) → (∃ bs. rbc(bs, cs) ∧ bstart(bs)) ⊦ ∃ as. (∃ bs. rab(as, bs) ∧ rbc(bs, cs)) ∧ astart(as) |
cstart(cs), fwsim(IOAut(bstart, bstep, bext), IOAut(astart, astep, aext), rab), cstart(cs) → (∃ bs. rbc(bs, cs) ∧ bstart(bs)), ∀ cs, ca, cs0, bs. rbc(bs, cs) ∧ cstep(cs, ca, cs0) → (∃ bs0. move(IOAut(bstart, bstep, bext))(bs, (cext(ca) = None ⊃ [];cext(ca).get '), bs0) ∧ rbc(bs0, cs0)) ⊦ ∃ as. (∃ bs. rab(as, bs) ∧ rbc(bs, cs)) ∧ astart(as)
Used terms: cs
| cstart(cs), fwsim(IOAut(bstart, bstep, bext), IOAut(astart, astep, aext), rab), cstart(cs) → (∃ bs. rbc(bs, cs) ∧ bstart(bs)), ∀ cs, ca, cs0, bs. rbc(bs, cs) ∧ cstep(cs, ca, cs0) → (∃ bs0. move(IOAut(bstart, bstep, bext))(bs, (cext(ca) = None ⊃ [];cext(ca).get '), bs0) ∧ rbc(bs0, cs0)) ⊦ ∃ as. (∃ bs. rab(as, bs) ∧ rbc(bs, cs)) ∧ astart(as) |
bstart(bs), cstart(cs), fwsim(IOAut(bstart, bstep, bext), IOAut(astart, astep, aext), rab), rbc(bs, cs), ∀ cs, ca, cs0, bs. rbc(bs, cs) ∧ cstep(cs, ca, cs0) → (∃ bs0. move(IOAut(bstart, bstep, bext))(bs, (cext(ca) = None ⊃ [];cext(ca).get '), bs0) ∧ rbc(bs0, cs0)) ⊦ ∃ as. (∃ bs. rab(as, bs) ∧ rbc(bs, cs)) ∧ astart(as)
| bstart(bs), cstart(cs), fwsim(IOAut(bstart, bstep, bext), IOAut(astart, astep, aext), rab), rbc(bs, cs), ∀ cs, ca, cs0, bs. rbc(bs, cs) ∧ cstep(cs, ca, cs0) → (∃ bs0. move(IOAut(bstart, bstep, bext))(bs, (cext(ca) = None ⊃ [];cext(ca).get '), bs0) ∧ rbc(bs0, cs0)) ⊦ ∃ as. (∃ bs. rab(as, bs) ∧ rbc(bs, cs)) ∧ astart(as) |
⊦ fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r) ↔ (∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as))) ∧ (∀ cs, ca, cs0, as. r(as, cs) ∧ cstep(cs, ca, cs0) → (∃ as0. move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ r(as0, cs0)))
bstart(bs), cstart(cs), rbc(bs, cs), ∀ cs, ca, cs0, bs. rbc(bs, cs) ∧ cstep(cs, ca, cs0) → (∃ bs0. move(IOAut(bstart, bstep, bext))(bs, (cext(ca) = None ⊃ [];cext(ca).get '), bs0) ∧ rbc(bs0, cs0)), ∀ bs. bstart(bs) → (∃ as. rab(as, bs) ∧ astart(as)), ∀ bs, ba, bs0, as. rab(as, bs) ∧ bstep(bs, ba, bs0) → (∃ as0. move(IOAut(astart, astep, aext))(as, bext !(ba '), as0) ∧ rab(as0, bs0)) ⊦ ∃ as. (∃ bs. rab(as, bs) ∧ rbc(bs, cs)) ∧ astart(as)
Used terms: bstep, bext, aext, rab, astart, bstart, astep
| ⊦ fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r) ↔ (∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as))) ∧ (∀ cs, ca, cs0, as. r(as, cs) ∧ cstep(cs, ca, cs0) → (∃ as0. move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ r(as0, cs0))) |
| bstart(bs), cstart(cs), rbc(bs, cs), ∀ cs, ca, cs0, bs. rbc(bs, cs) ∧ cstep(cs, ca, cs0) → (∃ bs0. move(IOAut(bstart, bstep, bext))(bs, (cext(ca) = None ⊃ [];cext(ca).get '), bs0) ∧ rbc(bs0, cs0)), ∀ bs. bstart(bs) → (∃ as. rab(as, bs) ∧ astart(as)), ∀ bs, ba, bs0, as. rab(as, bs) ∧ bstep(bs, ba, bs0) → (∃ as0. move(IOAut(astart, astep, aext))(as, bext !(ba '), as0) ∧ rab(as0, bs0)) ⊦ ∃ as. (∃ bs. rab(as, bs) ∧ rbc(bs, cs)) ∧ astart(as) |
bstart(bs), cstart(cs), rbc(bs, cs), ∀ bs. bstart(bs) → (∃ as. rab(as, bs) ∧ astart(as)), ∀ cs, ca, cs0, bs. rbc(bs, cs) ∧ cstep(cs, ca, cs0) → (∃ bs0. move(IOAut(bstart, bstep, bext))(bs, (cext(ca) = None ⊃ [];cext(ca).get '), bs0) ∧ rbc(bs0, cs0)), ∀ bs0, ba, bs1, as. rab(as, bs0) ∧ bstep(bs0, ba, bs1) → (∃ as0. move(IOAut(astart, astep, aext))(as, (bext(ba) = None ⊃ [];bext(ba).get '), as0) ∧ rab(as0, bs1)) ⊦ ∃ as. (∃ bs. rab(as, bs) ∧ rbc(bs, cs)) ∧ astart(as)
Used simplifier rules: ⊦ ext !(a ') = (ext(a) = None ⊃ [];ext(a).get '); (s)
| bstart(bs), cstart(cs), rbc(bs, cs), ∀ bs. bstart(bs) → (∃ as. rab(as, bs) ∧ astart(as)), ∀ cs, ca, cs0, bs. rbc(bs, cs) ∧ cstep(cs, ca, cs0) → (∃ bs0. move(IOAut(bstart, bstep, bext))(bs, (cext(ca) = None ⊃ [];cext(ca).get '), bs0) ∧ rbc(bs0, cs0)), ∀ bs0, ba, bs1, as. rab(as, bs0) ∧ bstep(bs0, ba, bs1) → (∃ as0. move(IOAut(astart, astep, aext))(as, (bext(ba) = None ⊃ [];bext(ba).get '), as0) ∧ rab(as0, bs1)) ⊦ ∃ as. (∃ bs. rab(as, bs) ∧ rbc(bs, cs)) ∧ astart(as) |
bstart(bs), cstart(cs), rbc(bs, cs), bstart(bs) → (∃ as. rab(as, bs) ∧ astart(as)), ∀ bs0, ba, bs1, as. rab(as, bs0) ∧ bstep(bs0, ba, bs1) → (∃ as0. move(IOAut(astart, astep, aext))(as, (bext(ba) = None ⊃ [];bext(ba).get '), as0) ∧ rab(as0, bs1)), ∀ cs, ca, cs0, bs. rbc(bs, cs) ∧ cstep(cs, ca, cs0) → (∃ bs0. move(IOAut(bstart, bstep, bext))(bs, (cext(ca) = None ⊃ [];cext(ca).get '), bs0) ∧ rbc(bs0, cs0)) ⊦ ∃ as. (∃ bs. rab(as, bs) ∧ rbc(bs, cs)) ∧ astart(as)
Used terms: bs
| bstart(bs), cstart(cs), rbc(bs, cs), bstart(bs) → (∃ as. rab(as, bs) ∧ astart(as)), ∀ bs0, ba, bs1, as. rab(as, bs0) ∧ bstep(bs0, ba, bs1) → (∃ as0. move(IOAut(astart, astep, aext))(as, (bext(ba) = None ⊃ [];bext(ba).get '), as0) ∧ rab(as0, bs1)), ∀ cs, ca, cs0, bs. rbc(bs, cs) ∧ cstep(cs, ca, cs0) → (∃ bs0. move(IOAut(bstart, bstep, bext))(bs, (cext(ca) = None ⊃ [];cext(ca).get '), bs0) ∧ rbc(bs0, cs0)) ⊦ ∃ as. (∃ bs. rab(as, bs) ∧ rbc(bs, cs)) ∧ astart(as) |
astart(as), bstart(bs), cstart(cs), rab(as, bs), rbc(bs, cs), ∀ cs, ca, cs0, bs. rbc(bs, cs) ∧ cstep(cs, ca, cs0) → (∃ bs0. move(IOAut(bstart, bstep, bext))(bs, (cext(ca) = None ⊃ [];cext(ca).get '), bs0) ∧ rbc(bs0, cs0)), ∀ bs0, ba, bs1, as. rab(as, bs0) ∧ bstep(bs0, ba, bs1) → (∃ as0. move(IOAut(astart, astep, aext))(as, (bext(ba) = None ⊃ [];bext(ba).get '), as0) ∧ rab(as0, bs1)) ⊦ ∃ as. (∃ bs. rab(as, bs) ∧ rbc(bs, cs)) ∧ astart(as)
| astart(as), bstart(bs), cstart(cs), rab(as, bs), rbc(bs, cs), ∀ cs, ca, cs0, bs. rbc(bs, cs) ∧ cstep(cs, ca, cs0) → (∃ bs0. move(IOAut(bstart, bstep, bext))(bs, (cext(ca) = None ⊃ [];cext(ca).get '), bs0) ∧ rbc(bs0, cs0)), ∀ bs0, ba, bs1, as. rab(as, bs0) ∧ bstep(bs0, ba, bs1) → (∃ as0. move(IOAut(astart, astep, aext))(as, (bext(ba) = None ⊃ [];bext(ba).get '), as0) ∧ rab(as0, bs1)) ⊦ ∃ as. (∃ bs. rab(as, bs) ∧ rbc(bs, cs)) ∧ astart(as) |
astart(as), bstart(bs), cstart(cs), rab(as, bs), rbc(bs, cs), ∀ bs0, ba, bs1, as. rab(as, bs0) ∧ bstep(bs0, ba, bs1) → (∃ as0. move(IOAut(astart, astep, aext))(as, (bext(ba) = None ⊃ [];bext(ba).get '), as0) ∧ rab(as0, bs1)), ∀ cs, ca, cs0, bs. rbc(bs, cs) ∧ cstep(cs, ca, cs0) → (∃ bs0. move(IOAut(bstart, bstep, bext))(bs, (cext(ca) = None ⊃ [];cext(ca).get '), bs0) ∧ rbc(bs0, cs0)) ⊦ (∃ bs. rab(as, bs) ∧ rbc(bs, cs)) ∧ astart(as)
Used terms: as
| astart(as), bstart(bs), cstart(cs), rab(as, bs), rbc(bs, cs), ∀ bs0, ba, bs1, as. rab(as, bs0) ∧ bstep(bs0, ba, bs1) → (∃ as0. move(IOAut(astart, astep, aext))(as, (bext(ba) = None ⊃ [];bext(ba).get '), as0) ∧ rab(as0, bs1)), ∀ cs, ca, cs0, bs. rbc(bs, cs) ∧ cstep(cs, ca, cs0) → (∃ bs0. move(IOAut(bstart, bstep, bext))(bs, (cext(ca) = None ⊃ [];cext(ca).get '), bs0) ∧ rbc(bs0, cs0)) ⊦ (∃ bs. rab(as, bs) ∧ rbc(bs, cs)) ∧ astart(as) |
astart(as), bstart(bs), cstart(cs), rab(as, bs), rbc(bs, cs), ∀ cs, ca, cs0, bs. rbc(bs, cs) ∧ cstep(cs, ca, cs0) → (∃ bs0. move(IOAut(bstart, bstep, bext))(bs, (cext(ca) = None ⊃ [];cext(ca).get '), bs0) ∧ rbc(bs0, cs0)), ∀ bs0, ba, bs1, as. rab(as, bs0) ∧ bstep(bs0, ba, bs1) → (∃ as0. move(IOAut(astart, astep, aext))(as, (bext(ba) = None ⊃ [];bext(ba).get '), as0) ∧ rab(as0, bs1)) ⊦ ∃ bs. rab(as, bs) ∧ rbc(bs, cs)
| astart(as), bstart(bs), cstart(cs), rab(as, bs), rbc(bs, cs), ∀ cs, ca, cs0, bs. rbc(bs, cs) ∧ cstep(cs, ca, cs0) → (∃ bs0. move(IOAut(bstart, bstep, bext))(bs, (cext(ca) = None ⊃ [];cext(ca).get '), bs0) ∧ rbc(bs0, cs0)), ∀ bs0, ba, bs1, as. rab(as, bs0) ∧ bstep(bs0, ba, bs1) → (∃ as0. move(IOAut(astart, astep, aext))(as, (bext(ba) = None ⊃ [];bext(ba).get '), as0) ∧ rab(as0, bs1)) ⊦ ∃ bs. rab(as, bs) ∧ rbc(bs, cs) |
Used terms: bs
| cstep(cs0, ca, cs1), fwsim(IOAut(bstart, bstep, bext), IOAut(astart, astep, aext), rab), rab(as, bs), rbc(bs, cs0), ∀ cs, ca, cs0, bs. rbc(bs, cs) ∧ cstep(cs, ca, cs0) → (∃ bs0. move(IOAut(bstart, bstep, bext))(bs, (cext(ca) = None ⊃ [];cext(ca).get '), bs0) ∧ rbc(bs0, cs0)), ∀ cs. cstart(cs) → (∃ bs. rbc(bs, cs) ∧ bstart(bs)) ⊦ ∃ as0. move(IOAut(astart, astep, aext))(as, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ (∃ bs. rab(as0, bs) ∧ rbc(bs, cs1)) |
cstep(cs0, ca, cs1), fwsim(IOAut(bstart, bstep, bext), IOAut(astart, astep, aext), rab), rab(as, bs), rbc(bs, cs0), ∀ cs, ca, cs0, bs. rbc(bs, cs) ∧ cstep(cs, ca, cs0) → (∃ bs0. move(IOAut(bstart, bstep, bext))(bs, (cext(ca) = None ⊃ [];cext(ca).get '), bs0) ∧ rbc(bs0, cs0)) ⊦ ∃ as0. move(IOAut(astart, astep, aext))(as, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ (∃ bs. rab(as0, bs) ∧ rbc(bs, cs1))
| cstep(cs0, ca, cs1), fwsim(IOAut(bstart, bstep, bext), IOAut(astart, astep, aext), rab), rab(as, bs), rbc(bs, cs0), ∀ cs, ca, cs0, bs. rbc(bs, cs) ∧ cstep(cs, ca, cs0) → (∃ bs0. move(IOAut(bstart, bstep, bext))(bs, (cext(ca) = None ⊃ [];cext(ca).get '), bs0) ∧ rbc(bs0, cs0)) ⊦ ∃ as0. move(IOAut(astart, astep, aext))(as, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ (∃ bs. rab(as0, bs) ∧ rbc(bs, cs1)) |
cstep(cs0, ca, cs1), fwsim(IOAut(bstart, bstep, bext), IOAut(astart, astep, aext), rab), rab(as, bs), rbc(bs, cs0), rbc(bs, cs0) ∧ cstep(cs0, ca, cs1) → (∃ bs0. move(IOAut(bstart, bstep, bext))(bs, (cext(ca) = None ⊃ [];cext(ca).get '), bs0) ∧ rbc(bs0, cs1)) ⊦ ∃ as0. move(IOAut(astart, astep, aext))(as, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ (∃ bs. rab(as0, bs) ∧ rbc(bs, cs1))
Used terms: cs0, ca, cs1, bs
| cstep(cs0, ca, cs1), fwsim(IOAut(bstart, bstep, bext), IOAut(astart, astep, aext), rab), rab(as, bs), rbc(bs, cs0), rbc(bs, cs0) ∧ cstep(cs0, ca, cs1) → (∃ bs0. move(IOAut(bstart, bstep, bext))(bs, (cext(ca) = None ⊃ [];cext(ca).get '), bs0) ∧ rbc(bs0, cs1)) ⊦ ∃ as0. move(IOAut(astart, astep, aext))(as, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ (∃ bs. rab(as0, bs) ∧ rbc(bs, cs1)) |
cstep(cs0, ca, cs1), fwsim(IOAut(bstart, bstep, bext), IOAut(astart, astep, aext), rab), move(IOAut(bstart, bstep, bext))(bs, (cext(ca) = None ⊃ [];cext(ca).get '), bs0), rab(as, bs), rbc(bs, cs0), rbc(bs0, cs1) ⊦ ∃ as0. move(IOAut(astart, astep, aext))(as, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ (∃ bs. rab(as0, bs) ∧ rbc(bs, cs1))
| cstep(cs0, ca, cs1), fwsim(IOAut(bstart, bstep, bext), IOAut(astart, astep, aext), rab), move(IOAut(bstart, bstep, bext))(bs, (cext(ca) = None ⊃ [];cext(ca).get '), bs0), rab(as, bs), rbc(bs, cs0), rbc(bs0, cs1) ⊦ ∃ as0. move(IOAut(astart, astep, aext))(as, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ (∃ bs. rab(as0, bs) ∧ rbc(bs, cs1)) |
⊦ move(ioa)(s1, el, s2) ↔ (∃ al, sl. frag*(ioa)(sl, al) ∧ s1 = sl[0] ∧ s2 = sl.last ∧ ioa.ext !(al) = el)
cstep(cs0, ca, cs1), fwsim(IOAut(bstart, bstep, bext), IOAut(astart, astep, aext), rab), rab(as, bs), rbc(bs0, cs1), rbc(bs, cs0), ∃ al, sl. frag*(IOAut(bstart, bstep, bext))(sl, al) ∧ bs = sl[0] ∧ bs0 = sl.last ∧ IOAut(bstart, bstep, bext).ext !(al) = (cext(ca) = None ⊃ [];cext(ca).get ') ⊦ ∃ as0. move(IOAut(astart, astep, aext))(as, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ (∃ bs. rab(as0, bs) ∧ rbc(bs, cs1))
Used terms: IOAut(bstart, bstep, bext), bs, (cext(ca) = None ⊃ [];cext(ca).get '), bs0
| ⊦ move(ioa)(s1, el, s2) ↔ (∃ al, sl. frag*(ioa)(sl, al) ∧ s1 = sl[0] ∧ s2 = sl.last ∧ ioa.ext !(al) = el) |
| cstep(cs0, ca, cs1), fwsim(IOAut(bstart, bstep, bext), IOAut(astart, astep, aext), rab), rab(as, bs), rbc(bs0, cs1), rbc(bs, cs0), ∃ al, sl. frag*(IOAut(bstart, bstep, bext))(sl, al) ∧ bs = sl[0] ∧ bs0 = sl.last ∧ IOAut(bstart, bstep, bext).ext !(al) = (cext(ca) = None ⊃ [];cext(ca).get ') ⊦ ∃ as0. move(IOAut(astart, astep, aext))(as, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ (∃ bs. rab(as0, bs) ∧ rbc(bs, cs1)) |
bext !(bal) = (cext(ca) = None ⊃ [];cext(ca).get '), cstep(cs0, ca, cs1), frag*(IOAut(bstart, bstep, bext))(bsl, bal), fwsim(IOAut(bstart, bstep, bext), IOAut(astart, astep, aext), rab), rab(as, bsl[0]), rbc(bsl[0], cs0), rbc(bsl.last, cs1) ⊦ ∃ as0. move(IOAut(astart, astep, aext))(as, bext !(bal), as0) ∧ (∃ bs. rab(as0, bs) ∧ rbc(bs, cs1))
Used simplifier rules: ⊦ IOAut(start, step, ext).ext = ext; (s)
| bext !(bal) = (cext(ca) = None ⊃ [];cext(ca).get '), cstep(cs0, ca, cs1), frag*(IOAut(bstart, bstep, bext))(bsl, bal), fwsim(IOAut(bstart, bstep, bext), IOAut(astart, astep, aext), rab), rab(as, bsl[0]), rbc(bsl[0], cs0), rbc(bsl.last, cs1) ⊦ ∃ as0. move(IOAut(astart, astep, aext))(as, bext !(bal), as0) ∧ (∃ bs. rab(as0, bs) ∧ rbc(bs, cs1)) |
fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), frag*(IOAut(cstart, cstep, cext))(csl, cal), r(as, csl[0]) ⊦ ∃ asl, aal. asl[0] = as ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ cext !(cal) = aext !(aal) ∧ r(asl.last, csl.last)
bext !(bal) = (cext(ca) = None ⊃ [];cext(ca).get '), cstep(cs0, ca, cs1), frag*(IOAut(bstart, bstep, bext))(bsl, bal), fwsim(IOAut(bstart, bstep, bext), IOAut(astart, astep, aext), rab), rab(as, bsl[0]), rbc(bsl.last, cs1), rbc(bsl[0], cs0), ∃ asl, aal. asl[0] = as ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ bext !(bal) = aext !(aal) ∧ rab(asl.last, bsl.last) ⊦ ∃ as0. move(IOAut(astart, astep, aext))(as, bext !(bal), as0) ∧ (∃ bs. rab(as0, bs) ∧ rbc(bs, cs1))
Used terms: bstep, bext, as, aext, rab, astart, bstart, bal, astep, bsl
| fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), frag*(IOAut(cstart, cstep, cext))(csl, cal), r(as, csl[0]) ⊦ ∃ asl, aal. asl[0] = as ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ cext !(cal) = aext !(aal) ∧ r(asl.last, csl.last) |
| bext !(bal) = (cext(ca) = None ⊃ [];cext(ca).get '), cstep(cs0, ca, cs1), frag*(IOAut(bstart, bstep, bext))(bsl, bal), fwsim(IOAut(bstart, bstep, bext), IOAut(astart, astep, aext), rab), rab(as, bsl[0]), rbc(bsl.last, cs1), rbc(bsl[0], cs0), ∃ asl, aal. asl[0] = as ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ bext !(bal) = aext !(aal) ∧ rab(asl.last, bsl.last) ⊦ ∃ as0. move(IOAut(astart, astep, aext))(as, bext !(bal), as0) ∧ (∃ bs. rab(as0, bs) ∧ rbc(bs, cs1)) |
bext !(bal) = aext !(aal), aext !(aal) = (cext(ca) = None ⊃ [];cext(ca).get '), cstep(cs0, ca, cs1), frag*(IOAut(astart, astep, aext))(asl, aal), frag*(IOAut(bstart, bstep, bext))(bsl, bal), fwsim(IOAut(bstart, bstep, bext), IOAut(astart, astep, aext), rab), rab(asl.last, bsl.last), rab(asl[0], bsl[0]), rbc(bsl[0], cs0), rbc(bsl.last, cs1) ⊦ ∃ as0. move(IOAut(astart, astep, aext))(asl[0], aext !(aal), as0) ∧ (∃ bs. rab(as0, bs) ∧ rbc(bs, cs1))
| bext !(bal) = aext !(aal), aext !(aal) = (cext(ca) = None ⊃ [];cext(ca).get '), cstep(cs0, ca, cs1), frag*(IOAut(astart, astep, aext))(asl, aal), frag*(IOAut(bstart, bstep, bext))(bsl, bal), fwsim(IOAut(bstart, bstep, bext), IOAut(astart, astep, aext), rab), rab(asl.last, bsl.last), rab(asl[0], bsl[0]), rbc(bsl[0], cs0), rbc(bsl.last, cs1) ⊦ ∃ as0. move(IOAut(astart, astep, aext))(asl[0], aext !(aal), as0) ∧ (∃ bs. rab(as0, bs) ∧ rbc(bs, cs1)) |
aext !(aal) = (cext(ca) = None ⊃ [];cext(ca).get '), bext !(bal) = aext !(aal), cstep(cs0, ca, cs1), frag*(IOAut(bstart, bstep, bext))(bsl, bal), frag*(IOAut(astart, astep, aext))(asl, aal), fwsim(IOAut(bstart, bstep, bext), IOAut(astart, astep, aext), rab), rab(asl[0], bsl[0]), rab(asl.last, bsl.last), rbc(bsl.last, cs1), rbc(bsl[0], cs0) ⊦ move(IOAut(astart, astep, aext))(asl[0], aext !(aal), asl.last) ∧ (∃ bs. rab(asl.last, bs) ∧ rbc(bs, cs1))
Used terms: asl.last
| aext !(aal) = (cext(ca) = None ⊃ [];cext(ca).get '), bext !(bal) = aext !(aal), cstep(cs0, ca, cs1), frag*(IOAut(bstart, bstep, bext))(bsl, bal), frag*(IOAut(astart, astep, aext))(asl, aal), fwsim(IOAut(bstart, bstep, bext), IOAut(astart, astep, aext), rab), rab(asl[0], bsl[0]), rab(asl.last, bsl.last), rbc(bsl.last, cs1), rbc(bsl[0], cs0) ⊦ move(IOAut(astart, astep, aext))(asl[0], aext !(aal), asl.last) ∧ (∃ bs. rab(asl.last, bs) ∧ rbc(bs, cs1)) |
bext !(bal) = aext !(aal), aext !(aal) = (cext(ca) = None ⊃ [];cext(ca).get '), cstep(cs0, ca, cs1), frag*(IOAut(astart, astep, aext))(asl, aal), frag*(IOAut(bstart, bstep, bext))(bsl, bal), fwsim(IOAut(bstart, bstep, bext), IOAut(astart, astep, aext), rab), rab(asl.last, bsl.last), rab(asl[0], bsl[0]), rbc(bsl[0], cs0), rbc(bsl.last, cs1), ¬ move(IOAut(astart, astep, aext))(asl[0], aext !(aal), asl.last) ⊦
bext !(bal) = aext !(aal), aext !(aal) = (cext(ca) = None ⊃ [];cext(ca).get '), cstep(cs0, ca, cs1), frag*(IOAut(astart, astep, aext))(asl, aal), frag*(IOAut(bstart, bstep, bext))(bsl, bal), fwsim(IOAut(bstart, bstep, bext), IOAut(astart, astep, aext), rab), rab(asl.last, bsl.last), rab(asl[0], bsl[0]), rbc(bsl[0], cs0), rbc(bsl.last, cs1) ⊦ ∃ bs. rab(asl.last, bs) ∧ rbc(bs, cs1)
| bext !(bal) = aext !(aal), aext !(aal) = (cext(ca) = None ⊃ [];cext(ca).get '), cstep(cs0, ca, cs1), frag*(IOAut(astart, astep, aext))(asl, aal), frag*(IOAut(bstart, bstep, bext))(bsl, bal), fwsim(IOAut(bstart, bstep, bext), IOAut(astart, astep, aext), rab), rab(asl.last, bsl.last), rab(asl[0], bsl[0]), rbc(bsl[0], cs0), rbc(bsl.last, cs1), ¬ move(IOAut(astart, astep, aext))(asl[0], aext !(aal), asl.last) ⊦ |
⊦ move(ioa)(s1, el, s2) ↔ (∃ al, sl. frag*(ioa)(sl, al) ∧ s1 = sl[0] ∧ s2 = sl.last ∧ ioa.ext !(al) = el)
aext !(aal) = (cext(ca) = None ⊃ [];cext(ca).get '), bext !(bal) = aext !(aal), cstep(cs0, ca, cs1), frag*(IOAut(bstart, bstep, bext))(bsl, bal), frag*(IOAut(astart, astep, aext))(asl, aal), fwsim(IOAut(bstart, bstep, bext), IOAut(astart, astep, aext), rab), rab(asl[0], bsl[0]), rab(asl.last, bsl.last), rbc(bsl.last, cs1), rbc(bsl[0], cs0), ∀ al, sl. ¬(frag*(IOAut(astart, astep, aext))(sl, al) ∧ asl[0] = sl[0] ∧ asl.last = sl.last ∧ IOAut(astart, astep, aext).ext !(al) = aext !(aal)) ⊦
Used terms: IOAut(astart, astep, aext), asl[0], aext !(aal), asl.last
| ⊦ move(ioa)(s1, el, s2) ↔ (∃ al, sl. frag*(ioa)(sl, al) ∧ s1 = sl[0] ∧ s2 = sl.last ∧ ioa.ext !(al) = el) |
| aext !(aal) = (cext(ca) = None ⊃ [];cext(ca).get '), bext !(bal) = aext !(aal), cstep(cs0, ca, cs1), frag*(IOAut(bstart, bstep, bext))(bsl, bal), frag*(IOAut(astart, astep, aext))(asl, aal), fwsim(IOAut(bstart, bstep, bext), IOAut(astart, astep, aext), rab), rab(asl[0], bsl[0]), rab(asl.last, bsl.last), rbc(bsl.last, cs1), rbc(bsl[0], cs0), ∀ al, sl. ¬(frag*(IOAut(astart, astep, aext))(sl, al) ∧ asl[0] = sl[0] ∧ asl.last = sl.last ∧ IOAut(astart, astep, aext).ext !(al) = aext !(aal)) ⊦ |
bext !(bal) = aext !(aal), aext !(aal) = (cext(ca) = None ⊃ [];cext(ca).get '), cstep(cs0, ca, cs1), frag*(IOAut(astart, astep, aext))(asl, aal), frag*(IOAut(bstart, bstep, bext))(bsl, bal), fwsim(IOAut(bstart, bstep, bext), IOAut(astart, astep, aext), rab), rab(asl.last, bsl.last), rab(asl[0], bsl[0]), rbc(bsl[0], cs0), rbc(bsl.last, cs1), ∀ al, sl. ¬ frag*(IOAut(astart, astep, aext))(sl, al) ∨ asl[0] ≠ sl[0] ∨ asl.last ≠ sl.last ∨ aext !(al) ≠ aext !(aal) ⊦
Used simplifier rules: ⊦ IOAut(start, step, ext).ext = ext; (s)
| bext !(bal) = aext !(aal), aext !(aal) = (cext(ca) = None ⊃ [];cext(ca).get '), cstep(cs0, ca, cs1), frag*(IOAut(astart, astep, aext))(asl, aal), frag*(IOAut(bstart, bstep, bext))(bsl, bal), fwsim(IOAut(bstart, bstep, bext), IOAut(astart, astep, aext), rab), rab(asl.last, bsl.last), rab(asl[0], bsl[0]), rbc(bsl[0], cs0), rbc(bsl.last, cs1), ∀ al, sl. ¬ frag*(IOAut(astart, astep, aext))(sl, al) ∨ asl[0] ≠ sl[0] ∨ asl.last ≠ sl.last ∨ aext !(al) ≠ aext !(aal) ⊦ |
Used terms: aal, asl
| bext !(bal) = aext !(aal), aext !(aal) = (cext(ca) = None ⊃ [];cext(ca).get '), cstep(cs0, ca, cs1), frag*(IOAut(astart, astep, aext))(asl, aal), frag*(IOAut(bstart, bstep, bext))(bsl, bal), fwsim(IOAut(bstart, bstep, bext), IOAut(astart, astep, aext), rab), rab(asl.last, bsl.last), rab(asl[0], bsl[0]), rbc(bsl[0], cs0), rbc(bsl.last, cs1) ⊦ ∃ bs. rab(asl.last, bs) ∧ rbc(bs, cs1) |
Used terms: bsl.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.