| IOAut?(aioaut) ⊦ C_≤*T_A(cioaut, aioaut) ↔ (∀ csl, cal. exec*(cioaut)(csl, cal) → (∃ asl, aal. exec*(aioaut)(asl, aal) ∧ aioaut.ext !(aal) = cioaut.ext !(cal))) |
IOAut?(aioaut) ⊦ (∀ el. trace*(cioaut)(el) → trace*(aioaut)(el)) ↔ (∀ csl, cal. frag*(cioaut)(csl, cal) ∧ cioaut.start(csl[0]) → (∃ asl, aal. frag*(aioaut)(asl, aal) ∧ aioaut.start(asl[0]) ∧ aioaut.ext !(aal) = cioaut.ext !(cal)))
Used simplifier rules: leqstar-def: ⊦ C_≤*T_A(cioaut, aioaut) ↔ (∀ el. trace*(cioaut)(el) → trace*(aioaut)(el)); ⊦ exec*(ioa)(sl, al) ↔ frag*(ioa)(sl, al) ∧ ioa.start(sl[0]); (s)
| IOAut?(aioaut) ⊦ (∀ el. trace*(cioaut)(el) → trace*(aioaut)(el)) ↔ (∀ csl, cal. frag*(cioaut)(csl, cal) ∧ cioaut.start(csl[0]) → (∃ asl, aal. frag*(aioaut)(asl, aal) ∧ aioaut.start(asl[0]) ∧ aioaut.ext !(aal) = cioaut.ext !(cal))) |
cioaut = IOAut(cstart, cstep, cext), IOAut?(aioaut) ⊦ (∀ el. trace*(cioaut)(el) → trace*(aioaut)(el)) ↔ (∀ csl, cal. frag*(cioaut)(csl, cal) ∧ cioaut.start(csl[0]) → (∃ asl, aal. frag*(aioaut)(asl, aal) ∧ aioaut.start(asl[0]) ∧ aioaut.ext !(aal) = cioaut.ext !(cal)))
Used simplifier rules: IOAutomaton('s, 'a, 'e) freely generated by IOAut;;
| cioaut = IOAut(cstart, cstep, cext), IOAut?(aioaut) ⊦ (∀ el. trace*(cioaut)(el) → trace*(aioaut)(el)) ↔ (∀ csl, cal. frag*(cioaut)(csl, cal) ∧ cioaut.start(csl[0]) → (∃ asl, aal. frag*(aioaut)(asl, aal) ∧ aioaut.start(asl[0]) ∧ aioaut.ext !(aal) = cioaut.ext !(cal))) |
IOAut?(aioaut) ⊦ (∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(aioaut)(el)) ↔ (∀ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) → (∃ asl, aal. frag*(aioaut)(asl, aal) ∧ aioaut.start(asl[0]) ∧ aioaut.ext !(aal) = cext !(cal)))
Used simplifier rules: ⊦ IOAut(start, step, ext).ext = ext; (s) ⊦ IOAut(start, step, ext).start = start; (s)
| IOAut?(aioaut) ⊦ (∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(aioaut)(el)) ↔ (∀ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) → (∃ asl, aal. frag*(aioaut)(asl, aal) ∧ aioaut.start(asl[0]) ∧ aioaut.ext !(aal) = cext !(cal))) |
aioaut = IOAut(astart, astep, aext), IOAut?(aioaut) ⊦ (∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(aioaut)(el)) ↔ (∀ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) → (∃ asl, aal. frag*(aioaut)(asl, aal) ∧ aioaut.start(asl[0]) ∧ aioaut.ext !(aal) = cext !(cal)))
Used simplifier rules: IOAutomaton('s, 'a, 'e) freely generated by IOAut;;
| aioaut = IOAut(astart, astep, aext), IOAut?(aioaut) ⊦ (∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(aioaut)(el)) ↔ (∀ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) → (∃ asl, aal. frag*(aioaut)(asl, aal) ∧ aioaut.start(asl[0]) ∧ aioaut.ext !(aal) = cext !(cal))) |
IOAut?(IOAut(astart, astep, aext)) ⊦ (∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el)) ↔ (∀ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) → (∃ asl, aal. frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) ∧ aext !(aal) = cext !(cal)))
Used simplifier rules: ⊦ IOAut(start, step, ext).ext = ext; (s) ⊦ IOAut(start, step, ext).start = start; (s)
| IOAut?(IOAut(astart, astep, aext)) ⊦ (∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el)) ↔ (∀ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) → (∃ asl, aal. frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) ∧ aext !(aal) = cext !(cal))) |
IOAut?(IOAut(astart, astep, aext)), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el) ⊦ ∀ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) → (∃ asl, aal. frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) ∧ aext !(aal) = cext !(cal))
IOAut?(IOAut(astart, astep, aext)), ∀ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) → (∃ asl, aal. frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) ∧ aext !(aal) = cext !(cal)) ⊦ ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el)
| IOAut?(IOAut(astart, astep, aext)), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el) ⊦ ∀ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) → (∃ asl, aal. frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) ∧ aext !(aal) = cext !(cal)) |
IOAut?(IOAut(astart, astep, aext)), cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el) ⊦ ∃ asl, aal. frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) ∧ aext !(aal) = cext !(cal)
| IOAut?(IOAut(astart, astep, aext)), cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el) ⊦ ∃ asl, aal. frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) ∧ aext !(aal) = cext !(cal) |
IOAut?(IOAut(astart, astep, aext)), cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), trace*(IOAut(cstart, cstep, cext))(cext !(cal)) → trace*(IOAut(astart, astep, aext))(cext !(cal)) ⊦ ∃ asl, aal. frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) ∧ aext !(aal) = cext !(cal)
Used terms: cext !(cal)
| IOAut?(IOAut(astart, astep, aext)), cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), trace*(IOAut(cstart, cstep, cext))(cext !(cal)) → trace*(IOAut(astart, astep, aext))(cext !(cal)) ⊦ ∃ asl, aal. frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) ∧ aext !(aal) = cext !(cal) |
IOAut?(IOAut(astart, astep, aext)), cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), ¬ trace*(IOAut(cstart, cstep, cext))(cext !(cal)) ⊦ ∃ asl, aal. frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) ∧ aext !(aal) = cext !(cal)
IOAut?(IOAut(astart, astep, aext)), cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), trace*(IOAut(astart, astep, aext))(cext !(cal)) ⊦ ∃ asl, aal. frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) ∧ aext !(aal) = cext !(cal)
| IOAut?(IOAut(astart, astep, aext)), cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), ¬ trace*(IOAut(cstart, cstep, cext))(cext !(cal)) ⊦ ∃ asl, aal. frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) ∧ aext !(aal) = cext !(cal) |
⊦ trace*(IOAut(start, step, ext))(el) ↔ (∃ sl, al. el = ext !(al) ∧ exec*(IOAut(start, step, ext))(sl, al))
IOAut?(IOAut(astart, astep, aext)), cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), ∀ sl, al. ¬(cext !(cal) = cext !(al) ∧ exec*(IOAut(cstart, cstep, cext))(sl, al)) ⊦ ∃ asl, aal. frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) ∧ aext !(aal) = cext !(cal)
Used terms: cstart, cstep, cext, cext !(cal)
| ⊦ trace*(IOAut(start, step, ext))(el) ↔ (∃ sl, al. el = ext !(al) ∧ exec*(IOAut(start, step, ext))(sl, al)) |
| IOAut?(IOAut(astart, astep, aext)), cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), ∀ sl, al. ¬(cext !(cal) = cext !(al) ∧ exec*(IOAut(cstart, cstep, cext))(sl, al)) ⊦ ∃ asl, aal. frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) ∧ aext !(aal) = cext !(cal) |
IOAut?(IOAut(astart, astep, aext)), cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), ∀ sl, al. cext !(cal) ≠ cext !(al) ∨ ¬ frag*(IOAut(cstart, cstep, cext))(sl, al) ∨ ¬ cstart(sl[0]) ⊦ ∃ asl, aal. 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)
| IOAut?(IOAut(astart, astep, aext)), cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), ∀ sl, al. cext !(cal) ≠ cext !(al) ∨ ¬ frag*(IOAut(cstart, cstep, cext))(sl, al) ∨ ¬ cstart(sl[0]) ⊦ ∃ asl, aal. frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) ∧ aext !(aal) = cext !(cal) |
Used terms: csl, cal
| IOAut?(IOAut(astart, astep, aext)), cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), trace*(IOAut(astart, astep, aext))(cext !(cal)) ⊦ ∃ asl, aal. frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) ∧ aext !(aal) = cext !(cal) |
⊦ trace*(IOAut(start, step, ext))(el) ↔ (∃ sl, al. el = ext !(al) ∧ exec*(IOAut(start, step, ext))(sl, al))
IOAut?(IOAut(astart, astep, aext)), cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), ∃ sl, al. cext !(cal) = aext !(al) ∧ exec*(IOAut(astart, astep, aext))(sl, al) ⊦ ∃ asl, aal. frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) ∧ aext !(aal) = cext !(cal)
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)) |
| IOAut?(IOAut(astart, astep, aext)), cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), ∃ sl, al. cext !(cal) = aext !(al) ∧ exec*(IOAut(astart, astep, aext))(sl, al) ⊦ ∃ asl, aal. frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) ∧ aext !(aal) = cext !(cal) |
cext !(cal) = aext !(aal), IOAut?(IOAut(astart, astep, aext)), astart(asl[0]), cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), frag*(IOAut(astart, astep, aext))(asl, aal) ⊦ ∃ asl, aal. 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)
| cext !(cal) = aext !(aal), IOAut?(IOAut(astart, astep, aext)), astart(asl[0]), cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), frag*(IOAut(astart, astep, aext))(asl, aal) ⊦ ∃ asl, aal. frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) ∧ aext !(aal) = cext !(cal) |
Used terms: asl, aal
| IOAut?(IOAut(astart, astep, aext)), ∀ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) → (∃ asl, aal. frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) ∧ aext !(aal) = cext !(cal)) ⊦ ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el) |
IOAut?(IOAut(astart, astep, aext)), trace*(IOAut(cstart, cstep, cext))(el), ¬ trace*(IOAut(astart, astep, aext))(el), ∀ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) → (∃ asl, aal. frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) ∧ aext !(aal) = cext !(cal)) ⊦
| IOAut?(IOAut(astart, astep, aext)), trace*(IOAut(cstart, cstep, cext))(el), ¬ trace*(IOAut(astart, astep, aext))(el), ∀ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) → (∃ asl, aal. frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) ∧ aext !(aal) = cext !(cal)) ⊦ |
⊦ trace*(IOAut(start, step, ext))(el) ↔ (∃ sl, al. el = ext !(al) ∧ exec*(IOAut(start, step, ext))(sl, al))
IOAut?(IOAut(astart, astep, aext)), ¬ trace*(IOAut(astart, astep, aext))(el), ∀ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) → (∃ asl, aal. frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) ∧ aext !(aal) = cext !(cal)), ∃ 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)) |
| IOAut?(IOAut(astart, astep, aext)), ¬ trace*(IOAut(astart, astep, aext))(el), ∀ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) → (∃ asl, aal. frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) ∧ aext !(aal) = cext !(cal)), ∃ sl, al. el = cext !(al) ∧ exec*(IOAut(cstart, cstep, cext))(sl, al) ⊦ |
IOAut?(IOAut(astart, astep, aext)), cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), ¬ trace*(IOAut(astart, astep, aext))(cext !(cal)), ∀ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) → (∃ asl, aal. 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)
| IOAut?(IOAut(astart, astep, aext)), cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), ¬ trace*(IOAut(astart, astep, aext))(cext !(cal)), ∀ csl, cal. frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) → (∃ asl, aal. frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) ∧ aext !(aal) = cext !(cal)) ⊦ |
IOAut?(IOAut(astart, astep, aext)), cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), ¬ trace*(IOAut(astart, astep, aext))(cext !(cal)), frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) → (∃ asl, aal. frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) ∧ aext !(aal) = cext !(cal)) ⊦
Used terms: csl, cal
| IOAut?(IOAut(astart, astep, aext)), cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), ¬ trace*(IOAut(astart, astep, aext))(cext !(cal)), frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) → (∃ asl, aal. frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) ∧ aext !(aal) = cext !(cal)) ⊦ |
aext !(aal) = cext !(cal), IOAut?(IOAut(astart, astep, aext)), astart(asl[0]), cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), frag*(IOAut(astart, astep, aext))(asl, aal), ¬ trace*(IOAut(astart, astep, aext))(cext !(cal)) ⊦
| aext !(aal) = cext !(cal), IOAut?(IOAut(astart, astep, aext)), astart(asl[0]), cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), frag*(IOAut(astart, astep, aext))(asl, aal), ¬ 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))
aext !(aal) = cext !(cal), IOAut?(IOAut(astart, astep, aext)), astart(asl[0]), cstart(csl[0]), frag*(IOAut(astart, astep, aext))(asl, aal), frag*(IOAut(cstart, cstep, cext))(csl, cal), ∀ 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)) |
| aext !(aal) = cext !(cal), IOAut?(IOAut(astart, astep, aext)), astart(asl[0]), cstart(csl[0]), frag*(IOAut(astart, astep, aext))(asl, aal), frag*(IOAut(cstart, cstep, cext))(csl, cal), ∀ sl, al. ¬(cext !(cal) = aext !(al) ∧ exec*(IOAut(astart, astep, aext))(sl, al)) ⊦ |
aext !(aal) = cext !(cal), IOAut?(IOAut(astart, astep, aext)), astart(asl[0]), cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), frag*(IOAut(astart, astep, aext))(asl, aal), ∀ 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)
| aext !(aal) = cext !(cal), IOAut?(IOAut(astart, astep, aext)), astart(asl[0]), cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), frag*(IOAut(astart, astep, aext))(asl, aal), ∀ sl, al. cext !(cal) ≠ aext !(al) ∨ ¬ frag*(IOAut(astart, astep, aext))(sl, al) ∨ ¬ astart(sl[0]) ⊦ |
Used terms: asl, aal
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.