| bwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV) ⊦ weakbwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, aINV) |
bwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), ¬ weakbwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, aINV) ⊦
| bwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), ¬ weakbwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, 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)))
bwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, 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)))) ⊦
Used terms: cstep, t, astart, cext, cstart, astep, aINV, aext
| ⊦ 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))) |
| bwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, 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)))) ⊦ |
bwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), ¬(frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) → (∃ as. t(csl.last, as) ∧ aINV(as))) ∨ ¬(cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as)) ∨ ¬(frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) → aINV(asl.last)) ∨ ¬ ( frag*(IOAut(cstart, cstep, cext))(csl0, cal0) ∧ cstart(csl0[0]) ∧ cstep(csl0.last, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as1. aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ t(csl0.last, as1))) ⊦
Used simplifier rules: ⊦ ext !(a ') = (ext(a) = None ⊃ [];ext(a).get '); (s) ⊦ IOAut(start, step, ext).start = start; (s) ⊦ exec*(ioa)(sl, al) ↔ frag*(ioa)(sl, al) ∧ ioa.start(sl[0]); (s)
| bwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), ¬(frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) → (∃ as. t(csl.last, as) ∧ aINV(as))) ∨ ¬(cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as)) ∨ ¬(frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) → aINV(asl.last)) ∨ ¬ ( frag*(IOAut(cstart, cstep, cext))(csl0, cal0) ∧ cstart(csl0[0]) ∧ cstep(csl0.last, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as1. aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ t(csl0.last, as1))) ⊦ |
⊦ 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. 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)), ¬(frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) → (∃ as. t(csl.last, as) ∧ aINV(as))) ∨ ¬(cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as)) ∨ ¬(frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) → aINV(asl.last)) ∨ ¬ ( frag*(IOAut(cstart, cstep, cext))(csl0, cal0) ∧ cstart(csl0[0]) ∧ cstep(csl0.last, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as1. aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ t(csl0.last, as1))) ⊦
Used terms: cstep, t, astart, cext, cstart, cINV, astep, aINV, aext
| ⊦ 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. 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)), ¬(frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) → (∃ as. t(csl.last, as) ∧ aINV(as))) ∨ ¬(cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as)) ∨ ¬(frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) → aINV(asl.last)) ∨ ¬ ( frag*(IOAut(cstart, cstep, cext))(csl0, cal0) ∧ cstart(csl0[0]) ∧ cstep(csl0.last, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as1. aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ t(csl0.last, as1))) ⊦ |
∀ 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. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ cs. (∃ csl, cal. exec*(IOAut(cstart, cstep, cext))(csl, cal) ∧ csl.last = cs) → cINV(cs), ¬(frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) → (∃ as. t(csl.last, as) ∧ aINV(as))) ∨ ¬(cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as)) ∨ ¬(frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) → aINV(asl.last)) ∨ ¬ ( frag*(IOAut(cstart, cstep, cext))(csl0, cal0) ∧ cstart(csl0[0]) ∧ cstep(csl0.last, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as1. aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ t(csl0.last, as1))) ⊦
∀ 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. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ¬(frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) → (∃ as. t(csl.last, as) ∧ aINV(as))) ∨ ¬(cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as)) ∨ ¬(frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) → aINV(asl.last)) ∨ ¬ ( frag*(IOAut(cstart, cstep, cext))(csl0, cal0) ∧ cstart(csl0[0]) ∧ cstep(csl0.last, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as1. aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ t(csl0.last, as1))) ⊦ ∀ cs. (∃ csl, cal. exec*(IOAut(cstart, cstep, cext))(csl, cal) ∧ csl.last = cs) → cINV(cs)
Used formulas: ∀ cs. (∃ csl, cal. exec*(IOAut(cstart, cstep, cext))(csl, cal) ∧ csl.last = cs) → cINV(cs)
| ∀ 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. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ∀ cs. (∃ csl, cal. exec*(IOAut(cstart, cstep, cext))(csl, cal) ∧ csl.last = cs) → cINV(cs), ¬(frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) → (∃ as. t(csl.last, as) ∧ aINV(as))) ∨ ¬(cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as)) ∨ ¬(frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) → aINV(asl.last)) ∨ ¬ ( frag*(IOAut(cstart, cstep, cext))(csl0, cal0) ∧ cstart(csl0[0]) ∧ cstep(csl0.last, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as1. aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ t(csl0.last, as1))) ⊦ |
∀ 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), ∀ cs1. (∃ csl1, cal1. frag*(IOAut(cstart, cstep, cext))(csl1, cal1) ∧ cstart(csl1[0]) ∧ csl1.last = cs1) → cINV(cs1), ∀ cs1, ca0, cs2, as1. cINV(cs1) ∧ cstep(cs1, ca0, cs2) ∧ t(cs2, as1) ∧ aINV(as1) → (∃ as2. aINV(as2) ∧ move(IOAut(astart, astep, aext))(as2, (cext(ca0) = None ⊃ [];cext(ca0).get '), as1) ∧ t(cs1, as2)), ¬(frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) → (∃ as. t(csl.last, as) ∧ aINV(as))) ∨ ¬(cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as)) ∨ ¬(frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) → aINV(asl.last)) ∨ ¬ ( frag*(IOAut(cstart, cstep, cext))(csl0, cal0) ∧ cstart(csl0[0]) ∧ cstep(csl0.last, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as1. aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ t(csl0.last, as1))) ⊦
Used simplifier rules: ⊦ ext !(a ') = (ext(a) = None ⊃ [];ext(a).get '); (s) ⊦ IOAut(start, step, ext).start = start; (s) ⊦ exec*(ioa)(sl, al) ↔ frag*(ioa)(sl, al) ∧ ioa.start(sl[0]); (s)
| ∀ 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), ∀ cs1. (∃ csl1, cal1. frag*(IOAut(cstart, cstep, cext))(csl1, cal1) ∧ cstart(csl1[0]) ∧ csl1.last = cs1) → cINV(cs1), ∀ cs1, ca0, cs2, as1. cINV(cs1) ∧ cstep(cs1, ca0, cs2) ∧ t(cs2, as1) ∧ aINV(as1) → (∃ as2. aINV(as2) ∧ move(IOAut(astart, astep, aext))(as2, (cext(ca0) = None ⊃ [];cext(ca0).get '), as1) ∧ t(cs1, as2)), ¬(frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) → (∃ as. t(csl.last, as) ∧ aINV(as))) ∨ ¬(cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as)) ∨ ¬(frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) → aINV(asl.last)) ∨ ¬ ( frag*(IOAut(cstart, cstep, cext))(csl0, cal0) ∧ cstart(csl0[0]) ∧ cstep(csl0.last, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as1. aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ t(csl0.last, as1))) ⊦ |
cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), ∀ cs1, ca0, cs2, as1. cINV(cs1) ∧ cstep(cs1, ca0, cs2) ∧ t(cs2, as1) ∧ aINV(as1) → (∃ as2. aINV(as2) ∧ move(IOAut(astart, astep, aext))(as2, (cext(ca0) = None ⊃ [];cext(ca0).get '), as1) ∧ t(cs1, as2)), ∀ cs1. (∃ csl1, cal1. frag*(IOAut(cstart, cstep, cext))(csl1, cal1) ∧ cstart(csl1[0]) ∧ csl1.last = cs1) → cINV(cs1), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs) ⊦ ∃ as. t(csl.last, as) ∧ aINV(as)
aINV(as), cstart(cs), t(cs, as), ¬ astart(as), ∀ cs1, ca0, cs2, as1. cINV(cs1) ∧ cstep(cs1, ca0, cs2) ∧ t(cs2, as1) ∧ aINV(as1) → (∃ as2. aINV(as2) ∧ move(IOAut(astart, astep, aext))(as2, (cext(ca0) = None ⊃ [];cext(ca0).get '), as1) ∧ t(cs1, as2)), ∀ cs1. (∃ csl1, cal1. frag*(IOAut(cstart, cstep, cext))(csl1, cal1) ∧ cstart(csl1[0]) ∧ csl1.last = cs1) → cINV(cs1), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs) ⊦
astart(asl[0]), frag*(IOAut(astart, astep, aext))(asl, aal), ¬ aINV(asl.last), ∀ cs1, ca0, cs2, as1. cINV(cs1) ∧ cstep(cs1, ca0, cs2) ∧ t(cs2, as1) ∧ aINV(as1) → (∃ as2. aINV(as2) ∧ move(IOAut(astart, astep, aext))(as2, (cext(ca0) = None ⊃ [];cext(ca0).get '), as1) ∧ t(cs1, as2)), ∀ cs1. (∃ csl1, cal1. frag*(IOAut(cstart, cstep, cext))(csl1, cal1) ∧ cstart(csl1[0]) ∧ csl1.last = cs1) → cINV(cs1), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs) ⊦
aINV(as0), cstart(csl0[0]), cstep(csl0.last, ca, cs0), frag*(IOAut(cstart, cstep, cext))(csl0, cal0), t(cs0, as0), ∀ cs1, ca0, cs2, as1. cINV(cs1) ∧ cstep(cs1, ca0, cs2) ∧ t(cs2, as1) ∧ aINV(as1) → (∃ as2. aINV(as2) ∧ move(IOAut(astart, astep, aext))(as2, (cext(ca0) = None ⊃ [];cext(ca0).get '), as1) ∧ t(cs1, as2)), ∀ cs1. (∃ csl1, cal1. frag*(IOAut(cstart, cstep, cext))(csl1, cal1) ∧ cstart(csl1[0]) ∧ csl1.last = cs1) → cINV(cs1), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs) ⊦ ∃ as1. aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ t(csl0.last, as1)
| cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), ∀ cs1, ca0, cs2, as1. cINV(cs1) ∧ cstep(cs1, ca0, cs2) ∧ t(cs2, as1) ∧ aINV(as1) → (∃ as2. aINV(as2) ∧ move(IOAut(astart, astep, aext))(as2, (cext(ca0) = None ⊃ [];cext(ca0).get '), as1) ∧ t(cs1, as2)), ∀ cs1. (∃ csl1, cal1. frag*(IOAut(cstart, cstep, cext))(csl1, cal1) ∧ cstart(csl1[0]) ∧ csl1.last = cs1) → cINV(cs1), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs) ⊦ ∃ as. t(csl.last, as) ∧ aINV(as) |
cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), cINV(csl.last) → (∃ as. t(csl.last, as) ∧ aINV(as)), ∀ 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, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs1. (∃ csl1, cal1. frag*(IOAut(cstart, cstep, cext))(csl1, cal1) ∧ cstart(csl1[0]) ∧ csl1.last = cs1) → cINV(cs1), ∀ cs1, ca0, cs2, as1. cINV(cs1) ∧ cstep(cs1, ca0, cs2) ∧ t(cs2, as1) ∧ aINV(as1) → (∃ as2. aINV(as2) ∧ move(IOAut(astart, astep, aext))(as2, (cext(ca0) = None ⊃ [];cext(ca0).get '), as1) ∧ t(cs1, as2)) ⊦ ∃ as. t(csl.last, as) ∧ aINV(as)
Used terms: csl.last
| cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), cINV(csl.last) → (∃ as. t(csl.last, as) ∧ aINV(as)), ∀ 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, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs1. (∃ csl1, cal1. frag*(IOAut(cstart, cstep, cext))(csl1, cal1) ∧ cstart(csl1[0]) ∧ csl1.last = cs1) → cINV(cs1), ∀ cs1, ca0, cs2, as1. cINV(cs1) ∧ cstep(cs1, ca0, cs2) ∧ t(cs2, as1) ∧ aINV(as1) → (∃ as2. aINV(as2) ∧ move(IOAut(astart, astep, aext))(as2, (cext(ca0) = None ⊃ [];cext(ca0).get '), as1) ∧ t(cs1, as2)) ⊦ ∃ as. t(csl.last, as) ∧ aINV(as) |
cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), ¬ cINV(csl.last), ∀ cs1, ca0, cs2, as1. cINV(cs1) ∧ cstep(cs1, ca0, cs2) ∧ t(cs2, as1) ∧ aINV(as1) → (∃ as2. aINV(as2) ∧ move(IOAut(astart, astep, aext))(as2, (cext(ca0) = None ⊃ [];cext(ca0).get '), as1) ∧ t(cs1, as2)), ∀ cs1. (∃ csl1, cal1. frag*(IOAut(cstart, cstep, cext))(csl1, cal1) ∧ cstart(csl1[0]) ∧ csl1.last = cs1) → cINV(cs1), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs) ⊦ ∃ as. t(csl.last, as) ∧ aINV(as)
| cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), ¬ cINV(csl.last), ∀ cs1, ca0, cs2, as1. cINV(cs1) ∧ cstep(cs1, ca0, cs2) ∧ t(cs2, as1) ∧ aINV(as1) → (∃ as2. aINV(as2) ∧ move(IOAut(astart, astep, aext))(as2, (cext(ca0) = None ⊃ [];cext(ca0).get '), as1) ∧ t(cs1, as2)), ∀ cs1. (∃ csl1, cal1. frag*(IOAut(cstart, cstep, cext))(csl1, cal1) ∧ cstart(csl1[0]) ∧ csl1.last = cs1) → cINV(cs1), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs) ⊦ ∃ as. t(csl.last, as) ∧ aINV(as) |
cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), ¬ cINV(csl.last), (∃ csl1, cal1. frag*(IOAut(cstart, cstep, cext))(csl1, cal1) ∧ cstart(csl1[0]) ∧ csl1.last = csl.last) → cINV(csl.last), ∀ 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, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs1, ca0, cs2, as1. cINV(cs1) ∧ cstep(cs1, ca0, cs2) ∧ t(cs2, as1) ∧ aINV(as1) → (∃ as2. aINV(as2) ∧ move(IOAut(astart, astep, aext))(as2, (cext(ca0) = None ⊃ [];cext(ca0).get '), as1) ∧ t(cs1, as2)) ⊦ ∃ as. t(csl.last, as) ∧ aINV(as)
Used terms: csl.last
| cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), ¬ cINV(csl.last), (∃ csl1, cal1. frag*(IOAut(cstart, cstep, cext))(csl1, cal1) ∧ cstart(csl1[0]) ∧ csl1.last = csl.last) → cINV(csl.last), ∀ 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, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs1, ca0, cs2, as1. cINV(cs1) ∧ cstep(cs1, ca0, cs2) ∧ t(cs2, as1) ∧ aINV(as1) → (∃ as2. aINV(as2) ∧ move(IOAut(astart, astep, aext))(as2, (cext(ca0) = None ⊃ [];cext(ca0).get '), as1) ∧ t(cs1, as2)) ⊦ ∃ as. t(csl.last, as) ∧ aINV(as) |
cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), ¬ cINV(csl.last), ∀ cs1, ca0, cs2, as1. cINV(cs1) ∧ cstep(cs1, ca0, cs2) ∧ t(cs2, as1) ∧ aINV(as1) → (∃ as2. aINV(as2) ∧ move(IOAut(astart, astep, aext))(as2, (cext(ca0) = None ⊃ [];cext(ca0).get '), as1) ∧ t(cs1, as2)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs) ⊦ ∃ as. t(csl.last, as) ∧ aINV(as), ∃ csl1, cal1. frag*(IOAut(cstart, cstep, cext))(csl1, cal1) ∧ cstart(csl1[0]) ∧ csl1.last = csl.last
| cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), ¬ cINV(csl.last), ∀ cs1, ca0, cs2, as1. cINV(cs1) ∧ cstep(cs1, ca0, cs2) ∧ t(cs2, as1) ∧ aINV(as1) → (∃ as2. aINV(as2) ∧ move(IOAut(astart, astep, aext))(as2, (cext(ca0) = None ⊃ [];cext(ca0).get '), as1) ∧ t(cs1, as2)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs) ⊦ ∃ as. t(csl.last, as) ∧ aINV(as), ∃ csl1, cal1. frag*(IOAut(cstart, cstep, cext))(csl1, cal1) ∧ cstart(csl1[0]) ∧ csl1.last = csl.last |
Used terms: csl, cal
| aINV(as), cstart(cs), t(cs, as), ¬ astart(as), ∀ cs1, ca0, cs2, as1. cINV(cs1) ∧ cstep(cs1, ca0, cs2) ∧ t(cs2, as1) ∧ aINV(as1) → (∃ as2. aINV(as2) ∧ move(IOAut(astart, astep, aext))(as2, (cext(ca0) = None ⊃ [];cext(ca0).get '), as1) ∧ t(cs1, as2)), ∀ cs1. (∃ csl1, cal1. frag*(IOAut(cstart, cstep, cext))(csl1, cal1) ∧ cstart(csl1[0]) ∧ csl1.last = cs1) → cINV(cs1), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs) ⊦ |
Used terms: cs, as
| astart(asl[0]), frag*(IOAut(astart, astep, aext))(asl, aal), ¬ aINV(asl.last), ∀ cs1, ca0, cs2, as1. cINV(cs1) ∧ cstep(cs1, ca0, cs2) ∧ t(cs2, as1) ∧ aINV(as1) → (∃ as2. aINV(as2) ∧ move(IOAut(astart, astep, aext))(as2, (cext(ca0) = None ⊃ [];cext(ca0).get '), as1) ∧ t(cs1, as2)), ∀ cs1. (∃ csl1, cal1. frag*(IOAut(cstart, cstep, cext))(csl1, cal1) ∧ cstart(csl1[0]) ∧ csl1.last = cs1) → cINV(cs1), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs) ⊦ |
astart(asl[0]), frag*(IOAut(astart, astep, aext))(asl, aal), ¬ aINV(asl.last), astart(asl[0]) → aINV(asl[0]), ∀ cs. cstart(cs) → cINV(cs), ∀ 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), ∀ cs1. (∃ csl1, cal1. frag*(IOAut(cstart, cstep, cext))(csl1, cal1) ∧ cstart(csl1[0]) ∧ csl1.last = cs1) → cINV(cs1), ∀ cs1, ca0, cs2, as1. cINV(cs1) ∧ cstep(cs1, ca0, cs2) ∧ t(cs2, as1) ∧ aINV(as1) → (∃ as2. aINV(as2) ∧ move(IOAut(astart, astep, aext))(as2, (cext(ca0) = None ⊃ [];cext(ca0).get '), as1) ∧ t(cs1, as2)) ⊦
Used terms: asl[0]
| astart(asl[0]), frag*(IOAut(astart, astep, aext))(asl, aal), ¬ aINV(asl.last), astart(asl[0]) → aINV(asl[0]), ∀ cs. cstart(cs) → cINV(cs), ∀ 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), ∀ cs1. (∃ csl1, cal1. frag*(IOAut(cstart, cstep, cext))(csl1, cal1) ∧ cstart(csl1[0]) ∧ csl1.last = cs1) → cINV(cs1), ∀ cs1, ca0, cs2, as1. cINV(cs1) ∧ cstep(cs1, ca0, cs2) ∧ t(cs2, as1) ∧ aINV(as1) → (∃ as2. aINV(as2) ∧ move(IOAut(astart, astep, aext))(as2, (cext(ca0) = None ⊃ [];cext(ca0).get '), as1) ∧ t(cs1, as2)) ⊦ |
aINV(asl[0]), astart(asl[0]), frag*(IOAut(astart, astep, aext))(asl, aal), ¬ aINV(asl.last), ∀ cs1, ca0, cs2, as1. cINV(cs1) ∧ cstep(cs1, ca0, cs2) ∧ t(cs2, as1) ∧ aINV(as1) → (∃ as2. aINV(as2) ∧ move(IOAut(astart, astep, aext))(as2, (cext(ca0) = None ⊃ [];cext(ca0).get '), as1) ∧ t(cs1, as2)), ∀ cs1. (∃ csl1, cal1. frag*(IOAut(cstart, cstep, cext))(csl1, cal1) ∧ cstart(csl1[0]) ∧ csl1.last = cs1) → cINV(cs1), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ cs. cstart(cs) → cINV(cs) ⊦
| aINV(asl[0]), astart(asl[0]), frag*(IOAut(astart, astep, aext))(asl, aal), ¬ aINV(asl.last), ∀ cs1, ca0, cs2, as1. cINV(cs1) ∧ cstep(cs1, ca0, cs2) ∧ t(cs2, as1) ∧ aINV(as1) → (∃ as2. aINV(as2) ∧ move(IOAut(astart, astep, aext))(as2, (cext(ca0) = None ⊃ [];cext(ca0).get '), as1) ∧ t(cs1, as2)), ∀ cs1. (∃ csl1, cal1. frag*(IOAut(cstart, cstep, cext))(csl1, cal1) ∧ cstart(csl1[0]) ∧ csl1.last = cs1) → cINV(cs1), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ cs. cstart(cs) → cINV(cs) ⊦ |
aINV(asl[0]), frag*(IOAut(astart, astep, aext))(asl, aal), ¬ aINV(asl.last), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0) ⊦
| aINV(asl[0]), frag*(IOAut(astart, astep, aext))(asl, aal), ¬ aINV(asl.last), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0) ⊦ |
aINV((as + asl0)[0]), frag*(IOAut(astart, astep, aext))(as + asl0, aal), ¬ aINV((as + asl0).last), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ aINV, astart, astep, aext, aal. ¬(aINV(asl0[0]) ∧ frag*(IOAut(astart, astep, aext))(asl0, aal) ∧ ¬ aINV(asl0.last) ∧ (∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0))) ⊦
Used simplifier rules: List('a) freely generated by [], +;; ⊦ ¬ frag*(IOAut(start, step, ext))([], al); (s)
| aINV((as + asl0)[0]), frag*(IOAut(astart, astep, aext))(as + asl0, aal), ¬ aINV((as + asl0).last), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ aINV, astart, astep, aext, aal. ¬(aINV(asl0[0]) ∧ frag*(IOAut(astart, astep, aext))(asl0, aal) ∧ ¬ aINV(asl0.last) ∧ (∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0))) ⊦ |
aINV(as), frag*(IOAut(astart, astep, aext))(as ' + asl0, aal), ¬ aINV((as ' + asl0).last), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ aINV0, astart0, astep0, aext0, aal0. ¬ aINV0(asl0[0]) ∨ ¬ frag*(IOAut(astart0, astep0, aext0))(asl0, aal0) ∨ aINV0(asl0.last) ∨ ¬(∀ as, aa, as0. aINV0(as) ∧ astep0(as, aa, as0) → aINV0(as0)) ⊦
Used simplifier rules: ⊦ a + x = a ' + x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ (a ' + x)[0] = a; (s)
| aINV(as), frag*(IOAut(astart, astep, aext))(as ' + asl0, aal), ¬ aINV((as ' + asl0).last), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ aINV0, astart0, astep0, aext0, aal0. ¬ aINV0(asl0[0]) ∨ ¬ frag*(IOAut(astart0, astep0, aext0))(asl0, aal0) ∨ aINV0(asl0.last) ∨ ¬(∀ as, aa, as0. aINV0(as) ∧ astep0(as, aa, as0) → aINV0(as0)) ⊦ |
aal = aa0 + aal1, aINV(as), frag*(IOAut(astart, astep, aext))(as ' + asl0, aal), ¬ aINV((as ' + asl0).last), ∀ aINV0, astart0, astep0, aext0, aal0. ¬ aINV0(asl0[0]) ∨ ¬ frag*(IOAut(astart0, astep0, aext0))(asl0, aal0) ∨ aINV0(asl0.last) ∨ ¬(∀ as, aa, as0. aINV0(as) ∧ astep0(as, aa, as0) → aINV0(as0)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0) ⊦
Used simplifier rules: List('a) freely generated by [], +;; ⊦ frag*(IOAut(start, step, ext))(sl, []) ↔ sl = sl.head '; (s) ⊦ (a ' + x).head = a; (s) ⊦ a ' = a0 ' + x ↔ a = a0 ∧ x = []; (ws) ⊦ x + [] = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ a '.last = a; (s) ⊦ ¬ frag*(IOAut(start, step, ext))([], al); (s)
| aal = aa0 + aal1, aINV(as), frag*(IOAut(astart, astep, aext))(as ' + asl0, aal), ¬ aINV((as ' + asl0).last), ∀ aINV0, astart0, astep0, aext0, aal0. ¬ aINV0(asl0[0]) ∨ ¬ frag*(IOAut(astart0, astep0, aext0))(asl0, aal0) ∨ aINV0(asl0.last) ∨ ¬(∀ as, aa, as0. aINV0(as) ∧ astep0(as, aa, as0) → aINV0(as0)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0) ⊦ |
aINV(as), frag*(IOAut(astart, astep, aext))(as ' + asl0, aa0 ' + aal1), ¬ aINV((as ' + asl0).last), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ aINV0, astart0, astep0, aext0, aal0. ¬ aINV0(asl0[0]) ∨ ¬ frag*(IOAut(astart0, astep0, aext0))(asl0, aal0) ∨ aINV0(asl0.last) ∨ ¬(∀ as, aa, as0. aINV0(as) ∧ astep0(as, aa, as0) → aINV0(as0)) ⊦
Used simplifier rules: ⊦ a + x = a ' + x; (s)
| aINV(as), frag*(IOAut(astart, astep, aext))(as ' + asl0, aa0 ' + aal1), ¬ aINV((as ' + asl0).last), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ aINV0, astart0, astep0, aext0, aal0. ¬ aINV0(asl0[0]) ∨ ¬ frag*(IOAut(astart0, astep0, aext0))(asl0, aal0) ∨ aINV0(asl0.last) ∨ ¬(∀ as, aa, as0. aINV0(as) ∧ astep0(as, aa, as0) → aINV0(as0)) ⊦ |
⊦ frag*(IOAut(start, step, ext))(s ' + sl, a ' + al) ↔ step(s, a, sl.head) ∧ frag*(IOAut(start, step, ext))(sl, al)
aINV(as), astep(as, aa0, asl0.head), frag*(IOAut(astart, astep, aext))(asl0, aal1), ¬ aINV((as ' + asl0).last), ∀ aINV0, astart0, astep0, aext0, aal0. ¬ aINV0(asl0[0]) ∨ ¬ frag*(IOAut(astart0, astep0, aext0))(asl0, aal0) ∨ aINV0(asl0.last) ∨ ¬(∀ as, aa, as0. aINV0(as) ∧ astep0(as, aa, as0) → aINV0(as0)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: aal1, as, aext, asl0, aa0, astart, astep
| ⊦ frag*(IOAut(start, step, ext))(s ' + sl, a ' + al) ↔ step(s, a, sl.head) ∧ frag*(IOAut(start, step, ext))(sl, al) |
| aINV(as), astep(as, aa0, asl0.head), frag*(IOAut(astart, astep, aext))(asl0, aal1), ¬ aINV((as ' + asl0).last), ∀ aINV0, astart0, astep0, aext0, aal0. ¬ aINV0(asl0[0]) ∨ ¬ frag*(IOAut(astart0, astep0, aext0))(asl0, aal0) ∨ aINV0(asl0.last) ∨ ¬(∀ as, aa, as0. aINV0(as) ∧ astep0(as, aa, as0) → aINV0(as0)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0) ⊦ |
aINV(as), astep(as, aa0, asl0.head), frag*(IOAut(astart, astep, aext))(asl0, aal1), ¬ aINV((as ' + asl0).last), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ¬ aINV(asl0[0]) ∨ ¬ frag*(IOAut(astart, astep, aext))(asl0, aal1) ∨ aINV(asl0.last) ∨ ¬(∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0)) ⊦
Used terms: aINV, astart, astep, aext, aal1
| aINV(as), astep(as, aa0, asl0.head), frag*(IOAut(astart, astep, aext))(asl0, aal1), ¬ aINV((as ' + asl0).last), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ¬ aINV(asl0[0]) ∨ ¬ frag*(IOAut(astart, astep, aext))(asl0, aal1) ∨ aINV(asl0.last) ∨ ¬(∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0)) ⊦ |
aINV(as), astep(as, aa0, asl0.head), frag*(IOAut(astart, astep, aext))(asl0, aal1), ¬ aINV((as ' + asl0).last), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ¬ aINV(asl0[0]) ∨ aINV(asl0.last) ⊦
| aINV(as), astep(as, aa0, asl0.head), frag*(IOAut(astart, astep, aext))(asl0, aal1), ¬ aINV((as ' + asl0).last), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ¬ aINV(asl0[0]) ∨ aINV(asl0.last) ⊦ |
aINV(as), astep(as, aa0, asl0.head), frag*(IOAut(astart, astep, aext))(asl0, aal1), ¬ aINV((as ' + asl0).last), aINV(as) ∧ astep(as, aa0, hd(⌜asl0⌝ )) → aINV(hd(⌜asl0⌝ )), ¬ aINV(asl0[0]) ∨ aINV(asl0.last) ⊦
Used terms: as, aa0, hd(⌜asl0⌝ )
| aINV(as), astep(as, aa0, asl0.head), frag*(IOAut(astart, astep, aext))(asl0, aal1), ¬ aINV((as ' + asl0).last), aINV(as) ∧ astep(as, aa0, hd(⌜asl0⌝ )) → aINV(hd(⌜asl0⌝ )), ¬ aINV(asl0[0]) ∨ aINV(asl0.last) ⊦ |
aINV(as), astep(as, aa0, asl0.head), frag*(IOAut(astart, astep, aext))(asl0, aal1), ¬ aINV((as ' + asl0).last), astep(as, aa0, hd(⌜asl0⌝ )) → aINV(hd(⌜asl0⌝ )), ¬ aINV(asl0[0]) ∨ aINV(asl0.last) ⊦
| aINV(as), astep(as, aa0, asl0.head), frag*(IOAut(astart, astep, aext))(asl0, aal1), ¬ aINV((as ' + asl0).last), astep(as, aa0, hd(⌜asl0⌝ )) → aINV(hd(⌜asl0⌝ )), ¬ aINV(asl0[0]) ∨ aINV(asl0.last) ⊦ |
Used simplifier rules: List('a) freely generated by [], +;; ⊦ (a ' + x).head = a; (s) ⊦ (b ' + a ' + x).last = (a ' + x).last; (s) ⊦ (a ' + x)[0] = a; (s) ⊦ a + x = a ' + x; (s) ⊦ ⌜x + y⌝ = ⌜x⌝ + ⌜y⌝ ; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ hd(⌜a '⌝ + ⌜x⌝ ) = a; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ ¬ frag*(IOAut(start, step, ext))([], al); (s)
| aINV(as0), cstart(csl0[0]), cstep(csl0.last, ca, cs0), frag*(IOAut(cstart, cstep, cext))(csl0, cal0), t(cs0, as0), ∀ cs1, ca0, cs2, as1. cINV(cs1) ∧ cstep(cs1, ca0, cs2) ∧ t(cs2, as1) ∧ aINV(as1) → (∃ as2. aINV(as2) ∧ move(IOAut(astart, astep, aext))(as2, (cext(ca0) = None ⊃ [];cext(ca0).get '), as1) ∧ t(cs1, as2)), ∀ cs1. (∃ csl1, cal1. frag*(IOAut(cstart, cstep, cext))(csl1, cal1) ∧ cstart(csl1[0]) ∧ csl1.last = cs1) → cINV(cs1), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs) ⊦ ∃ as1. aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ t(csl0.last, as1) |
aINV(as0), cstart(csl0[0]), cstep(csl0.last, ca, cs0), frag*(IOAut(cstart, cstep, cext))(csl0, cal0), t(cs0, as0), cINV(csl0.last) ∧ cstep(csl0.last, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as2. aINV(as2) ∧ move(IOAut(astart, astep, aext))(as2, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ t(csl0.last, as2)), ∀ 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), ∀ cs1. (∃ csl1, cal1. frag*(IOAut(cstart, cstep, cext))(csl1, cal1) ∧ cstart(csl1[0]) ∧ csl1.last = cs1) → cINV(cs1) ⊦ ∃ as1. aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ t(csl0.last, as1)
Used terms: csl0.last, ca, cs0, as0
| aINV(as0), cstart(csl0[0]), cstep(csl0.last, ca, cs0), frag*(IOAut(cstart, cstep, cext))(csl0, cal0), t(cs0, as0), cINV(csl0.last) ∧ cstep(csl0.last, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as2. aINV(as2) ∧ move(IOAut(astart, astep, aext))(as2, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ t(csl0.last, as2)), ∀ 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), ∀ cs1. (∃ csl1, cal1. frag*(IOAut(cstart, cstep, cext))(csl1, cal1) ∧ cstart(csl1[0]) ∧ csl1.last = cs1) → cINV(cs1) ⊦ ∃ as1. aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ t(csl0.last, as1) |
aINV(as0), cstart(csl0[0]), cstep(csl0.last, ca, cs0), frag*(IOAut(cstart, cstep, cext))(csl0, cal0), t(cs0, as0), cINV(csl0.last) → aINV(as2) ∧ move(IOAut(astart, astep, aext))(as2, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ t(csl0.last, as2), ∀ cs1. (∃ csl1, cal1. frag*(IOAut(cstart, cstep, cext))(csl1, cal1) ∧ cstart(csl1[0]) ∧ csl1.last = cs1) → cINV(cs1), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs) ⊦ ∃ as1. aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ t(csl0.last, as1)
| aINV(as0), cstart(csl0[0]), cstep(csl0.last, ca, cs0), frag*(IOAut(cstart, cstep, cext))(csl0, cal0), t(cs0, as0), cINV(csl0.last) → aINV(as2) ∧ move(IOAut(astart, astep, aext))(as2, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ t(csl0.last, as2), ∀ cs1. (∃ csl1, cal1. frag*(IOAut(cstart, cstep, cext))(csl1, cal1) ∧ cstart(csl1[0]) ∧ csl1.last = cs1) → cINV(cs1), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs) ⊦ ∃ as1. aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ t(csl0.last, as1) |
aINV(as0), cstart(csl0[0]), cstep(csl0.last, ca, cs0), frag*(IOAut(cstart, cstep, cext))(csl0, cal0), t(cs0, as0), cINV(csl0.last) → aINV(as2) ∧ move(IOAut(astart, astep, aext))(as2, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ t(csl0.last, as2), (∃ csl1, cal1. frag*(IOAut(cstart, cstep, cext))(csl1, cal1) ∧ cstart(csl1[0]) ∧ csl1.last = csl0.last) → cINV(csl0.last), ∀ 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) ⊦ ∃ as1. aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ t(csl0.last, as1)
Used terms: csl0.last
| aINV(as0), cstart(csl0[0]), cstep(csl0.last, ca, cs0), frag*(IOAut(cstart, cstep, cext))(csl0, cal0), t(cs0, as0), cINV(csl0.last) → aINV(as2) ∧ move(IOAut(astart, astep, aext))(as2, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ t(csl0.last, as2), (∃ csl1, cal1. frag*(IOAut(cstart, cstep, cext))(csl1, cal1) ∧ cstart(csl1[0]) ∧ csl1.last = csl0.last) → cINV(csl0.last), ∀ 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) ⊦ ∃ as1. aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ t(csl0.last, as1) |
aINV(as0), cstart(csl0[0]), cstep(csl0.last, ca, cs0), frag*(IOAut(cstart, cstep, cext))(csl0, cal0), t(cs0, as0), (∃ csl1, cal1. frag*(IOAut(cstart, cstep, cext))(csl1, cal1) ∧ cstart(csl1[0]) ∧ csl1.last = csl0.last) → cINV(csl0.last), cINV(csl0.last) → aINV(as2) ∧ move(IOAut(astart, astep, aext))(as2, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ t(csl0.last, as2), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs) ⊦ ∃ as1. aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ t(csl0.last, as1)
| aINV(as0), cstart(csl0[0]), cstep(csl0.last, ca, cs0), frag*(IOAut(cstart, cstep, cext))(csl0, cal0), t(cs0, as0), (∃ csl1, cal1. frag*(IOAut(cstart, cstep, cext))(csl1, cal1) ∧ cstart(csl1[0]) ∧ csl1.last = csl0.last) → cINV(csl0.last), cINV(csl0.last) → aINV(as2) ∧ move(IOAut(astart, astep, aext))(as2, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ t(csl0.last, as2), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs) ⊦ ∃ as1. aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ t(csl0.last, as1) |
aINV(as0), cstart(csl0[0]), cstep(csl0.last, ca, cs0), frag*(IOAut(cstart, cstep, cext))(csl0, cal0), t(cs0, as0), ¬ cINV(csl0.last), (∃ csl1, cal1. frag*(IOAut(cstart, cstep, cext))(csl1, cal1) ∧ cstart(csl1[0]) ∧ csl1.last = csl0.last) → cINV(csl0.last), ∀ 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) ⊦ ∃ as1. aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ t(csl0.last, as1)
aINV(as0), aINV(as2), cstart(csl0[0]), cstep(csl0.last, ca, cs0), frag*(IOAut(cstart, cstep, cext))(csl0, cal0), move(IOAut(astart, astep, aext))(as2, (cext(ca) = None ⊃ [];cext(ca).get '), as0), t(cs0, as0), t(csl0.last, as2), (∃ csl1, cal1. frag*(IOAut(cstart, cstep, cext))(csl1, cal1) ∧ cstart(csl1[0]) ∧ csl1.last = csl0.last) → cINV(csl0.last), ∀ 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) ⊦ ∃ as1. aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ t(csl0.last, as1)
| aINV(as0), cstart(csl0[0]), cstep(csl0.last, ca, cs0), frag*(IOAut(cstart, cstep, cext))(csl0, cal0), t(cs0, as0), ¬ cINV(csl0.last), (∃ csl1, cal1. frag*(IOAut(cstart, cstep, cext))(csl1, cal1) ∧ cstart(csl1[0]) ∧ csl1.last = csl0.last) → cINV(csl0.last), ∀ 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) ⊦ ∃ as1. aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ t(csl0.last, as1) |
aINV(as0), cstart(csl0[0]), cstep(csl0.last, ca, cs0), frag*(IOAut(cstart, cstep, cext))(csl0, cal0), t(cs0, as0), ¬ cINV(csl0.last), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs) ⊦ ∃ as1. aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ t(csl0.last, as1), ∃ csl1, cal1. frag*(IOAut(cstart, cstep, cext))(csl1, cal1) ∧ cstart(csl1[0]) ∧ csl1.last = csl0.last
| aINV(as0), cstart(csl0[0]), cstep(csl0.last, ca, cs0), frag*(IOAut(cstart, cstep, cext))(csl0, cal0), t(cs0, as0), ¬ cINV(csl0.last), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs) ⊦ ∃ as1. aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ t(csl0.last, as1), ∃ csl1, cal1. frag*(IOAut(cstart, cstep, cext))(csl1, cal1) ∧ cstart(csl1[0]) ∧ csl1.last = csl0.last |
Used terms: csl0, cal0
| aINV(as0), aINV(as2), cstart(csl0[0]), cstep(csl0.last, ca, cs0), frag*(IOAut(cstart, cstep, cext))(csl0, cal0), move(IOAut(astart, astep, aext))(as2, (cext(ca) = None ⊃ [];cext(ca).get '), as0), t(cs0, as0), t(csl0.last, as2), (∃ csl1, cal1. frag*(IOAut(cstart, cstep, cext))(csl1, cal1) ∧ cstart(csl1[0]) ∧ csl1.last = csl0.last) → cINV(csl0.last), ∀ 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) ⊦ ∃ as1. aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ t(csl0.last, as1) |
Used terms: as2
| ∀ 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. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ∀ cs. cstart(cs) → cINV(cs), ¬(frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) → (∃ as. t(csl.last, as) ∧ aINV(as))) ∨ ¬(cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as)) ∨ ¬(frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) → aINV(asl.last)) ∨ ¬ ( frag*(IOAut(cstart, cstep, cext))(csl0, cal0) ∧ cstart(csl0[0]) ∧ cstep(csl0.last, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as1. aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ t(csl0.last, as1))) ⊦ ∀ cs. (∃ csl, cal. exec*(IOAut(cstart, cstep, cext))(csl, cal) ∧ csl.last = cs) → cINV(cs) |
cstart(csl1[0]), frag*(IOAut(cstart, cstep, cext))(csl1, cal1), ¬ cINV(csl1.last), ∀ 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), ∀ cs1, ca0, cs2, as1. cINV(cs1) ∧ cstep(cs1, ca0, cs2) ∧ t(cs2, as1) ∧ aINV(as1) → (∃ as2. aINV(as2) ∧ move(IOAut(astart, astep, aext))(as2, (cext(ca0) = None ⊃ [];cext(ca0).get '), as1) ∧ t(cs1, as2)), ¬(frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) → (∃ as. t(csl.last, as) ∧ aINV(as))) ∨ ¬(cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as)) ∨ ¬(frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) → aINV(asl.last)) ∨ ¬ ( frag*(IOAut(cstart, cstep, cext))(csl0, cal0) ∧ cstart(csl0[0]) ∧ cstep(csl0.last, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as1. aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ t(csl0.last, as1))) ⊦
Used simplifier rules: ⊦ ext !(a ') = (ext(a) = None ⊃ [];ext(a).get '); (s) ⊦ IOAut(start, step, ext).start = start; (s) ⊦ exec*(ioa)(sl, al) ↔ frag*(ioa)(sl, al) ∧ ioa.start(sl[0]); (s)
| cstart(csl1[0]), frag*(IOAut(cstart, cstep, cext))(csl1, cal1), ¬ cINV(csl1.last), ∀ 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), ∀ cs1, ca0, cs2, as1. cINV(cs1) ∧ cstep(cs1, ca0, cs2) ∧ t(cs2, as1) ∧ aINV(as1) → (∃ as2. aINV(as2) ∧ move(IOAut(astart, astep, aext))(as2, (cext(ca0) = None ⊃ [];cext(ca0).get '), as1) ∧ t(cs1, as2)), ¬(frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) → (∃ as. t(csl.last, as) ∧ aINV(as))) ∨ ¬(cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as)) ∨ ¬(frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) → aINV(asl.last)) ∨ ¬ ( frag*(IOAut(cstart, cstep, cext))(csl0, cal0) ∧ cstart(csl0[0]) ∧ cstep(csl0.last, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as1. aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ t(csl0.last, as1))) ⊦ |
cstart(csl1[0]), frag*(IOAut(cstart, cstep, cext))(csl1, cal1), ¬ cINV(csl1.last), cstart(csl1[0]) → cINV(csl1[0]), ∀ cs1, ca0, cs2, as1. cINV(cs1) ∧ cstep(cs1, ca0, cs2) ∧ t(cs2, as1) ∧ aINV(as1) → (∃ as2. aINV(as2) ∧ move(IOAut(astart, astep, aext))(as2, (cext(ca0) = None ⊃ [];cext(ca0).get '), as1) ∧ t(cs1, as2)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ¬(frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) → (∃ as. t(csl.last, as) ∧ aINV(as))) ∨ ¬(cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as)) ∨ ¬(frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) → aINV(asl.last)) ∨ ¬ ( frag*(IOAut(cstart, cstep, cext))(csl0, cal0) ∧ cstart(csl0[0]) ∧ cstep(csl0.last, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as1. aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ t(csl0.last, as1))) ⊦
Used terms: csl1[0]
| cstart(csl1[0]), frag*(IOAut(cstart, cstep, cext))(csl1, cal1), ¬ cINV(csl1.last), cstart(csl1[0]) → cINV(csl1[0]), ∀ cs1, ca0, cs2, as1. cINV(cs1) ∧ cstep(cs1, ca0, cs2) ∧ t(cs2, as1) ∧ aINV(as1) → (∃ as2. aINV(as2) ∧ move(IOAut(astart, astep, aext))(as2, (cext(ca0) = None ⊃ [];cext(ca0).get '), as1) ∧ t(cs1, as2)), ∀ cs, as. cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as), ∀ cs. cINV(cs) → (∃ as. t(cs, as) ∧ aINV(as)), ∀ as, aa, as0. aINV(as) ∧ astep(as, aa, as0) → aINV(as0), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ as. astart(as) → aINV(as), ¬(frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) → (∃ as. t(csl.last, as) ∧ aINV(as))) ∨ ¬(cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as)) ∨ ¬(frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) → aINV(asl.last)) ∨ ¬ ( frag*(IOAut(cstart, cstep, cext))(csl0, cal0) ∧ cstart(csl0[0]) ∧ cstep(csl0.last, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as1. aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ t(csl0.last, as1))) ⊦ |
cINV(csl1[0]), cstart(csl1[0]), frag*(IOAut(cstart, cstep, cext))(csl1, cal1), ¬ cINV(csl1.last), ∀ 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), ∀ cs1, ca0, cs2, as1. cINV(cs1) ∧ cstep(cs1, ca0, cs2) ∧ t(cs2, as1) ∧ aINV(as1) → (∃ as2. aINV(as2) ∧ move(IOAut(astart, astep, aext))(as2, (cext(ca0) = None ⊃ [];cext(ca0).get '), as1) ∧ t(cs1, as2)), ¬(frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) → (∃ as. t(csl.last, as) ∧ aINV(as))) ∨ ¬(cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as)) ∨ ¬(frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) → aINV(asl.last)) ∨ ¬ ( frag*(IOAut(cstart, cstep, cext))(csl0, cal0) ∧ cstart(csl0[0]) ∧ cstep(csl0.last, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as1. aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ t(csl0.last, as1))) ⊦
| cINV(csl1[0]), cstart(csl1[0]), frag*(IOAut(cstart, cstep, cext))(csl1, cal1), ¬ cINV(csl1.last), ∀ 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), ∀ cs1, ca0, cs2, as1. cINV(cs1) ∧ cstep(cs1, ca0, cs2) ∧ t(cs2, as1) ∧ aINV(as1) → (∃ as2. aINV(as2) ∧ move(IOAut(astart, astep, aext))(as2, (cext(ca0) = None ⊃ [];cext(ca0).get '), as1) ∧ t(cs1, as2)), ¬(frag*(IOAut(cstart, cstep, cext))(csl, cal) ∧ cstart(csl[0]) → (∃ as. t(csl.last, as) ∧ aINV(as))) ∨ ¬(cstart(cs) ∧ t(cs, as) ∧ aINV(as) → astart(as)) ∨ ¬(frag*(IOAut(astart, astep, aext))(asl, aal) ∧ astart(asl[0]) → aINV(asl.last)) ∨ ¬ ( frag*(IOAut(cstart, cstep, cext))(csl0, cal0) ∧ cstart(csl0[0]) ∧ cstep(csl0.last, ca, cs0) ∧ t(cs0, as0) ∧ aINV(as0) → (∃ as1. aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, (cext(ca) = None ⊃ [];cext(ca).get '), as0) ∧ t(csl0.last, as1))) ⊦ |
cINV(csl1[0]), frag*(IOAut(cstart, cstep, cext))(csl1, cal1), ¬ cINV(csl1.last), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0) ⊦
| cINV(csl1[0]), frag*(IOAut(cstart, cstep, cext))(csl1, cal1), ¬ cINV(csl1.last), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0) ⊦ |
cINV((cs + csl)[0]), frag*(IOAut(cstart, cstep, cext))(cs + csl, cal1), ¬ cINV((cs + csl).last), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ cINV, cstart, cstep, cext, cal1. ¬(cINV(csl[0]) ∧ frag*(IOAut(cstart, cstep, cext))(csl, cal1) ∧ ¬ cINV(csl.last) ∧ (∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0))) ⊦
Used simplifier rules: List('a) freely generated by [], +;; ⊦ ¬ frag*(IOAut(start, step, ext))([], al); (s)
| cINV((cs + csl)[0]), frag*(IOAut(cstart, cstep, cext))(cs + csl, cal1), ¬ cINV((cs + csl).last), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ cINV, cstart, cstep, cext, cal1. ¬(cINV(csl[0]) ∧ frag*(IOAut(cstart, cstep, cext))(csl, cal1) ∧ ¬ cINV(csl.last) ∧ (∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0))) ⊦ |
cINV(cs), frag*(IOAut(cstart, cstep, cext))(cs ' + csl, cal1), ¬ cINV((cs ' + csl).last), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ cINV0, cstart0, cstep0, cext0, cal. ¬ cINV0(csl[0]) ∨ ¬ frag*(IOAut(cstart0, cstep0, cext0))(csl, cal) ∨ cINV0(csl.last) ∨ ¬(∀ cs, ca, cs0. cINV0(cs) ∧ cstep0(cs, ca, cs0) → cINV0(cs0)) ⊦
Used simplifier rules: ⊦ a + x = a ' + x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ (a ' + x)[0] = a; (s)
| cINV(cs), frag*(IOAut(cstart, cstep, cext))(cs ' + csl, cal1), ¬ cINV((cs ' + csl).last), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ cINV0, cstart0, cstep0, cext0, cal. ¬ cINV0(csl[0]) ∨ ¬ frag*(IOAut(cstart0, cstep0, cext0))(csl, cal) ∨ cINV0(csl.last) ∨ ¬(∀ cs, ca, cs0. cINV0(cs) ∧ cstep0(cs, ca, cs0) → cINV0(cs0)) ⊦ |
cal1 = ca0 + cal0, cINV(cs), frag*(IOAut(cstart, cstep, cext))(cs ' + csl, cal1), ¬ cINV((cs ' + csl).last), ∀ cINV0, cstart0, cstep0, cext0, cal. ¬ cINV0(csl[0]) ∨ ¬ frag*(IOAut(cstart0, cstep0, cext0))(csl, cal) ∨ cINV0(csl.last) ∨ ¬(∀ cs, ca, cs0. cINV0(cs) ∧ cstep0(cs, ca, cs0) → cINV0(cs0)), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0) ⊦
Used simplifier rules: List('a) freely generated by [], +;; ⊦ frag*(IOAut(start, step, ext))(sl, []) ↔ sl = sl.head '; (s) ⊦ (a ' + x).head = a; (s) ⊦ a ' = a0 ' + x ↔ a = a0 ∧ x = []; (ws) ⊦ x + [] = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ a '.last = a; (s) ⊦ ¬ frag*(IOAut(start, step, ext))([], al); (s)
| cal1 = ca0 + cal0, cINV(cs), frag*(IOAut(cstart, cstep, cext))(cs ' + csl, cal1), ¬ cINV((cs ' + csl).last), ∀ cINV0, cstart0, cstep0, cext0, cal. ¬ cINV0(csl[0]) ∨ ¬ frag*(IOAut(cstart0, cstep0, cext0))(csl, cal) ∨ cINV0(csl.last) ∨ ¬(∀ cs, ca, cs0. cINV0(cs) ∧ cstep0(cs, ca, cs0) → cINV0(cs0)), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0) ⊦ |
cINV(cs), frag*(IOAut(cstart, cstep, cext))(cs ' + csl, ca0 ' + cal0), ¬ cINV((cs ' + csl).last), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ cINV0, cstart0, cstep0, cext0, cal. ¬ cINV0(csl[0]) ∨ ¬ frag*(IOAut(cstart0, cstep0, cext0))(csl, cal) ∨ cINV0(csl.last) ∨ ¬(∀ cs, ca, cs0. cINV0(cs) ∧ cstep0(cs, ca, cs0) → cINV0(cs0)) ⊦
Used simplifier rules: ⊦ a + x = a ' + x; (s)
| cINV(cs), frag*(IOAut(cstart, cstep, cext))(cs ' + csl, ca0 ' + cal0), ¬ cINV((cs ' + csl).last), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ∀ cINV0, cstart0, cstep0, cext0, cal. ¬ cINV0(csl[0]) ∨ ¬ frag*(IOAut(cstart0, cstep0, cext0))(csl, cal) ∨ cINV0(csl.last) ∨ ¬(∀ cs, ca, cs0. cINV0(cs) ∧ cstep0(cs, ca, cs0) → cINV0(cs0)) ⊦ |
⊦ frag*(IOAut(start, step, ext))(s ' + sl, a ' + al) ↔ step(s, a, sl.head) ∧ frag*(IOAut(start, step, ext))(sl, al)
cINV(cs), cstep(cs, ca0, csl.head), frag*(IOAut(cstart, cstep, cext))(csl, cal0), ¬ cINV((cs ' + csl).last), ∀ cINV0, cstart0, cstep0, cext0, cal. ¬ cINV0(csl[0]) ∨ ¬ frag*(IOAut(cstart0, cstep0, cext0))(csl, cal) ∨ cINV0(csl.last) ∨ ¬(∀ cs, ca, cs0. cINV0(cs) ∧ cstep0(cs, ca, cs0) → cINV0(cs0)), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: cal0, cs, cext, csl, ca0, cstart, cstep
| ⊦ frag*(IOAut(start, step, ext))(s ' + sl, a ' + al) ↔ step(s, a, sl.head) ∧ frag*(IOAut(start, step, ext))(sl, al) |
| cINV(cs), cstep(cs, ca0, csl.head), frag*(IOAut(cstart, cstep, cext))(csl, cal0), ¬ cINV((cs ' + csl).last), ∀ cINV0, cstart0, cstep0, cext0, cal. ¬ cINV0(csl[0]) ∨ ¬ frag*(IOAut(cstart0, cstep0, cext0))(csl, cal) ∨ cINV0(csl.last) ∨ ¬(∀ cs, ca, cs0. cINV0(cs) ∧ cstep0(cs, ca, cs0) → cINV0(cs0)), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0) ⊦ |
cINV(cs), cstep(cs, ca0, csl.head), frag*(IOAut(cstart, cstep, cext))(csl, cal0), ¬ cINV((cs ' + csl).last), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ¬ cINV(csl[0]) ∨ ¬ frag*(IOAut(cstart, cstep, cext))(csl, cal0) ∨ cINV(csl.last) ∨ ¬(∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0)) ⊦
Used terms: cINV, cstart, cstep, cext, cal0
| cINV(cs), cstep(cs, ca0, csl.head), frag*(IOAut(cstart, cstep, cext))(csl, cal0), ¬ cINV((cs ' + csl).last), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ¬ cINV(csl[0]) ∨ ¬ frag*(IOAut(cstart, cstep, cext))(csl, cal0) ∨ cINV(csl.last) ∨ ¬(∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0)) ⊦ |
cINV(cs), cstep(cs, ca0, csl.head), frag*(IOAut(cstart, cstep, cext))(csl, cal0), ¬ cINV((cs ' + csl).last), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ¬ cINV(csl[0]) ∨ cINV(csl.last) ⊦
| cINV(cs), cstep(cs, ca0, csl.head), frag*(IOAut(cstart, cstep, cext))(csl, cal0), ¬ cINV((cs ' + csl).last), ∀ cs, ca, cs0. cINV(cs) ∧ cstep(cs, ca, cs0) → cINV(cs0), ¬ cINV(csl[0]) ∨ cINV(csl.last) ⊦ |
cINV(cs), cstep(cs, ca0, csl.head), frag*(IOAut(cstart, cstep, cext))(csl, cal0), ¬ cINV((cs ' + csl).last), cINV(cs) ∧ cstep(cs, ca0, hd(⌜csl⌝ )) → cINV(hd(⌜csl⌝ )), ¬ cINV(csl[0]) ∨ cINV(csl.last) ⊦
Used terms: cs, ca0, hd(⌜csl⌝ )
| cINV(cs), cstep(cs, ca0, csl.head), frag*(IOAut(cstart, cstep, cext))(csl, cal0), ¬ cINV((cs ' + csl).last), cINV(cs) ∧ cstep(cs, ca0, hd(⌜csl⌝ )) → cINV(hd(⌜csl⌝ )), ¬ cINV(csl[0]) ∨ cINV(csl.last) ⊦ |
cINV(cs), cstep(cs, ca0, csl.head), frag*(IOAut(cstart, cstep, cext))(csl, cal0), ¬ cINV((cs ' + csl).last), cstep(cs, ca0, hd(⌜csl⌝ )) → cINV(hd(⌜csl⌝ )), ¬ cINV(csl[0]) ∨ cINV(csl.last) ⊦
| cINV(cs), cstep(cs, ca0, csl.head), frag*(IOAut(cstart, cstep, cext))(csl, cal0), ¬ cINV((cs ' + csl).last), cstep(cs, ca0, hd(⌜csl⌝ )) → cINV(hd(⌜csl⌝ )), ¬ cINV(csl[0]) ∨ cINV(csl.last) ⊦ |
Used simplifier rules: List('a) freely generated by [], +;; ⊦ (a ' + x).head = a; (s) ⊦ (b ' + a ' + x).last = (a ' + x).last; (s) ⊦ (a ' + x)[0] = a; (s) ⊦ a + x = a ' + x; (s) ⊦ ⌜x + y⌝ = ⌜x⌝ + ⌜y⌝ ; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ hd(⌜a '⌝ + ⌜x⌝ ) = a; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ ¬ frag*(IOAut(start, step, ext))([], al); (s)
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.