| fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), exec*(IOAut(cstart, cstep, cext))(csl, cal) ⊦ ∃ asl, aal. r(asl.last, csl.last) ∧ exec*(IOAut(astart, astep, aext))(asl, aal) ∧ aext !(aal) = cext !(cal) |
exec*(IOAut(cstart, cstep, cext))(csl, cal), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r) ⊦ ∃ asl, aal. r(asl.last, csl.last) ∧ exec*(IOAut(astart, astep, aext))(asl, aal) ∧ aext !(aal) = cext !(cal)
| exec*(IOAut(cstart, cstep, cext))(csl, cal), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r) ⊦ ∃ asl, aal. r(asl.last, csl.last) ∧ exec*(IOAut(astart, astep, aext))(asl, aal) ∧ aext !(aal) = cext !(cal) |
exec*(IOAut(cstart, cstep, cext))(csl, cal), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), ∃ as. astart(as) ∧ r(as, csl[0]) ⊦ ∃ asl, aal. r(asl.last, csl.last) ∧ exec*(IOAut(astart, astep, aext))(asl, aal) ∧ aext !(aal) = cext !(cal)
exec*(IOAut(cstart, cstep, cext))(csl, cal), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r) ⊦ ∃ asl, aal. r(asl.last, csl.last) ∧ exec*(IOAut(astart, astep, aext))(asl, aal) ∧ aext !(aal) = cext !(cal), ∃ as. astart(as) ∧ r(as, csl[0])
Used formulas: ∃ as. astart(as) ∧ r(as, csl[0])
| exec*(IOAut(cstart, cstep, cext))(csl, cal), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), ∃ as. astart(as) ∧ r(as, csl[0]) ⊦ ∃ asl, aal. r(asl.last, csl.last) ∧ exec*(IOAut(astart, astep, aext))(asl, aal) ∧ aext !(aal) = cext !(cal) |
astart(as), cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csl[0]) ⊦ ∃ asl, aal. r(asl.last, csl.last) ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) ∧ aext !(aal) = 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)
| astart(as), cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csl[0]) ⊦ ∃ asl, aal. r(asl.last, csl.last) ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) ∧ aext !(aal) = cext !(cal) |
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)
astart(as), cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), 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) ⊦ ∃ asl, aal. r(asl.last, csl.last) ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) ∧ aext !(aal) = cext !(cal)
Used terms: cstep, cext, as, aext, r, astart, cstart, cal, astep, csl
| 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) |
| astart(as), cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), 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) ⊦ ∃ asl, aal. r(asl.last, csl.last) ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) ∧ aext !(aal) = cext !(cal) |
cext !(cal) = aext !(aal), astart(asl[0]), cstart(csl[0]), frag*(IOAut(astart, astep, aext))(asl, aal), frag*(IOAut(cstart, cstep, cext))(csl, cal), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(asl.last, csl.last), r(asl[0], csl[0]) ⊦ ∃ asl, aal. r(asl.last, csl.last) ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) ∧ aext !(aal) = cext !(cal)
| cext !(cal) = aext !(aal), astart(asl[0]), cstart(csl[0]), frag*(IOAut(astart, astep, aext))(asl, aal), frag*(IOAut(cstart, cstep, cext))(csl, cal), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(asl.last, csl.last), r(asl[0], csl[0]) ⊦ ∃ asl, aal. r(asl.last, csl.last) ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) ∧ aext !(aal) = cext !(cal) |
Used terms: asl, aal
| exec*(IOAut(cstart, cstep, cext))(csl, cal), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r) ⊦ ∃ asl, aal. r(asl.last, csl.last) ∧ exec*(IOAut(astart, astep, aext))(asl, aal) ∧ aext !(aal) = cext !(cal), ∃ as. astart(as) ∧ r(as, csl[0]) |
cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r) ⊦ ∃ as. astart(as) ∧ r(as, csl[0]), ∃ asl, aal. r(asl.last, csl.last) ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) ∧ aext !(aal) = 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)
| cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r) ⊦ ∃ as. astart(as) ∧ r(as, csl[0]), ∃ asl, aal. r(asl.last, csl.last) ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) ∧ aext !(aal) = cext !(cal) |
⊦ 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)))
cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), ∀ 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)) ⊦ ∃ asl, aal. r(asl.last, csl.last) ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) ∧ aext !(aal) = cext !(cal), ∃ as. astart(as) ∧ r(as, csl[0])
Used terms: cstep, cext, aext, r, 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))) |
| cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), ∀ 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)) ⊦ ∃ asl, aal. r(asl.last, csl.last) ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) ∧ aext !(aal) = cext !(cal), ∃ as. astart(as) ∧ r(as, csl[0]) |
cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ r(as0, cs0)) ⊦ ∃ as. astart(as) ∧ r(as, csl[0]), ∃ asl, aal. r(asl.last, csl.last) ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) ∧ aext !(aal) = cext !(cal)
Used simplifier rules: ⊦ ext !(a ') = (ext(a) = None ⊃ [];ext(a).get '); (s)
| cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ r(as0, cs0)) ⊦ ∃ as. astart(as) ∧ r(as, csl[0]), ∃ asl, aal. r(asl.last, csl.last) ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) ∧ aext !(aal) = cext !(cal) |
cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), cstart(csl[0]) → (∃ as. r(as, csl[0]) ∧ astart(as)), ∀ cs, ca, cs0, as. r(as, cs) ∧ cstep(cs, ca, cs0) → (∃ as0. move(IOAut(astart, astep, aext))(as, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ r(as0, cs0)) ⊦ ∃ asl, aal. r(asl.last, csl.last) ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) ∧ aext !(aal) = cext !(cal), ∃ as. astart(as) ∧ r(as, csl[0])
Used terms: csl[0]
| cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), cstart(csl[0]) → (∃ as. r(as, csl[0]) ∧ astart(as)), ∀ cs, ca, cs0, as. r(as, cs) ∧ cstep(cs, ca, cs0) → (∃ as0. move(IOAut(astart, astep, aext))(as, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ r(as0, cs0)) ⊦ ∃ asl, aal. r(asl.last, csl.last) ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) ∧ aext !(aal) = cext !(cal), ∃ as. astart(as) ∧ r(as, csl[0]) |
astart(as), cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), r(as, csl[0]), ∀ cs, ca, cs0, as. r(as, cs) ∧ cstep(cs, ca, cs0) → (∃ as0. move(IOAut(astart, astep, aext))(as, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ r(as0, cs0)) ⊦ ∃ as. astart(as) ∧ r(as, csl[0]), ∃ asl, aal. r(asl.last, csl.last) ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) ∧ aext !(aal) = cext !(cal)
| astart(as), cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), r(as, csl[0]), ∀ cs, ca, cs0, as. r(as, cs) ∧ cstep(cs, ca, cs0) → (∃ as0. move(IOAut(astart, astep, aext))(as, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ r(as0, cs0)) ⊦ ∃ as. astart(as) ∧ r(as, csl[0]), ∃ asl, aal. r(asl.last, csl.last) ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) ∧ aext !(aal) = cext !(cal) |
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.