| imfinbwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV) ⊦ C_≤T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)) |
imfinbwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), ¬ C_≤T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)) ⊦
| imfinbwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), ¬ C_≤T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)) ⊦ |
⊦ C_≤T_A(cioaut, aioaut) ↔ (∀ β. trace(cioaut)(β) → trace(aioaut)(β))
imfinbwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), ∃ β. ¬(trace(IOAut(cstart, cstep, cext))(β) → trace(IOAut(astart, astep, aext))(β)) ⊦
Used terms: IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)
| ⊦ C_≤T_A(cioaut, aioaut) ↔ (∀ β. trace(cioaut)(β) → trace(aioaut)(β)) |
| imfinbwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), ∃ β. ¬(trace(IOAut(cstart, cstep, cext))(β) → trace(IOAut(astart, astep, aext))(β)) ⊦ |
imfinbwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), trace(IOAut(cstart, cstep, cext))(β), ¬ trace(IOAut(astart, astep, aext))(β) ⊦
| imfinbwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), trace(IOAut(cstart, cstep, cext))(β), ¬ trace(IOAut(astart, astep, aext))(β) ⊦ |
⊦ trace(IOAut(start, step, ext))(β) ↔ (∃ σ, α. β = ext !(α) ∧ exec(IOAut(start, step, ext))(σ, α))
imfinbwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), ¬ trace(IOAut(astart, astep, aext))(β), ∃ σ, α. β = cext !(α) ∧ exec(IOAut(cstart, cstep, cext))(σ, α) ⊦
Used terms: cstart, cstep, cext, β
| ⊦ trace(IOAut(start, step, ext))(β) ↔ (∃ σ, α. β = ext !(α) ∧ exec(IOAut(start, step, ext))(σ, α)) |
| imfinbwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), ¬ trace(IOAut(astart, astep, aext))(β), ∃ σ, α. β = cext !(α) ∧ exec(IOAut(cstart, cstep, cext))(σ, α) ⊦ |
cstart(cσ[0]), frag(IOAut(cstart, cstep, cext))(cσ, α), imfinbwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), ¬ trace(IOAut(astart, astep, aext))(cext !(α)) ⊦
Used simplifier rules: ⊦ IOAut(start, step, ext).start = start; (s) ⊦ exec(ioa)(σ, α) ↔ frag(ioa)(σ, α) ∧ ioa.start(σ[0]); (s)
| cstart(cσ[0]), frag(IOAut(cstart, cstep, cext))(cσ, α), imfinbwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), ¬ trace(IOAut(astart, astep, aext))(cext !(α)) ⊦ |
cσ = ⌜csl⌝ , cstart(cσ[0]), frag(IOAut(cstart, cstep, cext))(cσ, α), imfinbwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), ¬ trace(IOAut(astart, astep, aext))(cext !(α)) ⊦
cσ = ⌜csf⌝ , cstart(cσ[0]), frag(IOAut(cstart, cstep, cext))(cσ, α), imfinbwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), ¬ trace(IOAut(astart, astep, aext))(cext !(α)) ⊦
Used simplifier rules: Stream('a) freely generated by ⌜ ⌝, ⌜ ⌝;;
| cσ = ⌜csl⌝ , cstart(cσ[0]), frag(IOAut(cstart, cstep, cext))(cσ, α), imfinbwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), ¬ trace(IOAut(astart, astep, aext))(cext !(α)) ⊦ |
cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), imfinbwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), ¬ trace*(IOAut(astart, astep, aext))(cext !(cal)) ⊦
Used simplifier rules: ⊦ trace(ioa)(⌜el⌝ ) ↔ trace*(ioa)(el); (s) ⊦ ext !(⌜al⌝ ) = ⌜ext !(al)⌝ ; (s) ⊦ ⌜x⌝ .l = x; (s) ⊦ finp(σ) ↔ (∃ x. ⌜x⌝ = σ); (as) ⊦ ⌜x⌝ [n] = x[n]; (s) ⊦ frag(ioa)(⌜sl⌝ , α) ↔ frag*(ioa)(sl, α.l) ∧ finp(α); (s)
| cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), imfinbwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), ¬ trace*(IOAut(astart, astep, aext))(cext !(cal)) ⊦ |
≤BI(cioaut, aioaut) ⊦ C_≤*T_A(cioaut, aioaut)
cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), imfinbwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), ¬ trace*(IOAut(astart, astep, aext))(cext !(cal)), ¬ ≤BI(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)) ⊦
C_≤*T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)), cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), imfinbwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), ¬ trace*(IOAut(astart, astep, aext))(cext !(cal)) ⊦
Used terms: IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)
| ≤BI(cioaut, aioaut) ⊦ C_≤*T_A(cioaut, aioaut) |
| cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), imfinbwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), ¬ trace*(IOAut(astart, astep, aext))(cext !(cal)), ¬ ≤BI(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)) ⊦ |
⊦ ≤BI(cioaut, aioaut) ↔ (∃ t, aINV, cINV. bwsim(cioaut, aioaut, t, cINV, aINV))
cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), imfinbwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), ¬ trace*(IOAut(astart, astep, aext))(cext !(cal)), ∀ t, aINV, cINV. ¬ bwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV) ⊦
Used terms: IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)
| ⊦ ≤BI(cioaut, aioaut) ↔ (∃ t, aINV, cINV. bwsim(cioaut, aioaut, t, cINV, aINV)) |
| cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), imfinbwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), ¬ trace*(IOAut(astart, astep, aext))(cext !(cal)), ∀ t, aINV, cINV. ¬ bwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV) ⊦ |
cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), imfinbwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), ¬ bwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), ¬ trace*(IOAut(astart, astep, aext))(cext !(cal)) ⊦
Used terms: t, aINV, cINV
| cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), imfinbwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), ¬ bwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), ¬ trace*(IOAut(astart, astep, aext))(cext !(cal)) ⊦ |
⊦ imfinbwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV) ↔ bwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV) ∧ (∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass))
Used terms: cstep, cext, aext, t, astart, cstart, cINV, astep, aINV
| ⊦ imfinbwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV) ↔ bwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV) ∧ (∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass)) |
| C_≤*T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)), cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), imfinbwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), ¬ trace*(IOAut(astart, astep, aext))(cext !(cal)) ⊦ |
⊦ C_≤*T_A(cioaut, aioaut) ↔ (∀ el. trace*(cioaut)(el) → trace*(aioaut)(el))
cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), imfinbwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), ¬ trace*(IOAut(astart, astep, aext))(cext !(cal)), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el) ⊦
Used terms: IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)
| ⊦ C_≤*T_A(cioaut, aioaut) ↔ (∀ el. trace*(cioaut)(el) → trace*(aioaut)(el)) |
| cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), imfinbwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), ¬ trace*(IOAut(astart, astep, aext))(cext !(cal)), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el) ⊦ |
cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), imfinbwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), ¬ trace*(IOAut(astart, astep, aext))(cext !(cal)), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el) ⊦
| cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), imfinbwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), ¬ trace*(IOAut(astart, astep, aext))(cext !(cal)), ∀ el. trace*(IOAut(cstart, cstep, cext))(el) → trace*(IOAut(astart, astep, aext))(el) ⊦ |
cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), imfinbwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), ¬ trace*(IOAut(astart, astep, aext))(cext !(cal)), trace*(IOAut(cstart, cstep, cext))(cext !(cal)) → trace*(IOAut(astart, astep, aext))(cext !(cal)) ⊦
Used terms: cext !(cal)
| cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), imfinbwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), ¬ trace*(IOAut(astart, astep, aext))(cext !(cal)), trace*(IOAut(cstart, cstep, cext))(cext !(cal)) → trace*(IOAut(astart, astep, aext))(cext !(cal)) ⊦ |
cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), imfinbwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), ¬ trace*(IOAut(astart, astep, aext))(cext !(cal)), ¬ trace*(IOAut(cstart, cstep, cext))(cext !(cal)) ⊦
| cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), imfinbwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), ¬ trace*(IOAut(astart, astep, aext))(cext !(cal)), ¬ trace*(IOAut(cstart, cstep, cext))(cext !(cal)) ⊦ |
⊦ trace*(IOAut(start, step, ext))(el) ↔ (∃ sl, al. el = ext !(al) ∧ exec*(IOAut(start, step, ext))(sl, al))
cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), imfinbwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), ¬ trace*(IOAut(astart, astep, aext))(cext !(cal)), ∀ sl, al. ¬(cext !(cal) = cext !(al) ∧ exec*(IOAut(cstart, cstep, cext))(sl, al)) ⊦
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)) |
| cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), imfinbwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), ¬ trace*(IOAut(astart, astep, aext))(cext !(cal)), ∀ sl, al. ¬(cext !(cal) = cext !(al) ∧ exec*(IOAut(cstart, cstep, cext))(sl, al)) ⊦ |
cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), imfinbwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), ¬ trace*(IOAut(astart, astep, aext))(cext !(cal)), ∀ sl, al. cext !(cal) ≠ cext !(al) ∨ ¬ frag*(IOAut(cstart, cstep, cext))(sl, al) ∨ ¬ cstart(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)
| cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), imfinbwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), ¬ trace*(IOAut(astart, astep, aext))(cext !(cal)), ∀ sl, al. cext !(cal) ≠ cext !(al) ∨ ¬ frag*(IOAut(cstart, cstep, cext))(sl, al) ∨ ¬ cstart(sl[0]) ⊦ |
Used terms: csl, cal
| cσ = ⌜csf⌝ , cstart(cσ[0]), frag(IOAut(cstart, cstep, cext))(cσ, α), imfinbwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), ¬ trace(IOAut(astart, astep, aext))(cext !(α)) ⊦ |
cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), imfinbwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )) ⊦
Used simplifier rules: ⊦ ⌜nf⌝ .f = nf; (s) ⊦ finp(σ) ↔ ¬(∃ nf. ⌜nf⌝ = σ); (ss) ⊦ ⌜nf⌝ [n] = nf(n); (s) ⊦ frag(ioa)(⌜sf⌝ , α) ↔ fragω(ioa)(sf, α.f) ∧ ¬ finp(α); (s)
| cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), imfinbwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )) ⊦ |
⊦ imfinbwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV) ↔ bwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV) ∧ (∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass))
bwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass) ⊦
Used terms: cstep, cext, aext, t, astart, cstart, cINV, astep, aINV
| ⊦ imfinbwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV) ↔ bwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV) ∧ (∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass)) |
| bwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), t, cINV, aINV), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass) ⊦ |
⊦ 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)))
cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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)) ⊦
Used terms: cstep, cext, aext, t, astart, cstart, cINV, astep, aINV
| ⊦ 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))) |
| cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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)) ⊦ |
cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), cstart(csf(0)) → cINV(csf(0)), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass) ⊦
Used terms: csf(0)
| cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), cstart(csf(0)) → cINV(csf(0)), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass) ⊦ |
cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) ⊦
Used simplifier rules: ⊦ ext !(a ') = (ext(a) = None ⊃ [];ext(a).get '); (s)
| cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) ⊦ |
cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), cINV(csf(0)) → (∃ as. t(csf(0), as) ∧ aINV(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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)) ⊦
Used terms: csf(0)
| cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), cINV(csf(0)) → (∃ as. t(csf(0), as) ∧ aINV(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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)) ⊦ |
aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) ⊦
| aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) ⊦ |
aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦
aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)) ⊦ ∀ n. cINV(csf(n))
Used formulas: ∀ n. cINV(csf(n))
| aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ |
infgraph(g), finroot(g), finout(g), allreachable(g) ⊦ ∃ nf. isroot(g)(nf(0)) ∧ pathp(g)(⌜nf⌝ )
aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) ⊦ infgraph ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ∧ finroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ∧ finout ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ∧ allreachable ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1)))
aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∃ nf. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (nf(0)) ∧ pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (⌜nf⌝ ) ⊦
Used terms: (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))
| infgraph(g), finroot(g), finout(g), allreachable(g) ⊦ ∃ nf. isroot(g)(nf(0)) ∧ pathp(g)(⌜nf⌝ ) |
| aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) ⊦ infgraph ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ∧ finroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ∧ finout ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) ∧ allreachable ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) |
aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ infgraph ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦
aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ finroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦
aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ finout ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦
aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ allreachable ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦
| aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ infgraph ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ |
⊦ infgraph(g) ↔ (∀ s. ∃ a. dom(g)(a) ∧ ¬ a ∈ s)
aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∃ s. ¬ (∃ a. dom ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ ¬ a ∈ s) ⊦
Used terms: (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))
| ⊦ infgraph(g) ↔ (∀ s. ∃ a. dom(g)(a) ∧ ¬ a ∈ s) |
| aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∃ s. ¬ (∃ a. dom ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ ¬ a ∈ s) ⊦ |
aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ ∃ a. t(csf(a._2), a._1) ∧ aINV(a._1) ∧ ¬ a ∈ asn-s
Used simplifier rules: ⊦ dom(vs × es) = vs; (s) ⊦ ext !(a ') = (ext(a) = None ⊃ [];ext(a).get '); (s)
| aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ ∃ a. t(csf(a._2), a._1) ∧ aINV(a._1) ∧ ¬ a ∈ asn-s |
aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∃ n. ∀ asn. asn ∈ asn-s → asn._2 < n ⊦ ∃ a. t(csf(a._2), a._1) ∧ aINV(a._1) ∧ ¬ a ∈ asn-s
aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) ⊦ ∃ a. t(csf(a._2), a._1) ∧ aINV(a._1) ∧ ¬ a ∈ asn-s, ∃ n. ∀ asn. asn ∈ asn-s → asn._2 < n
Used formulas: ∃ n. ∀ asn. asn ∈ asn-s → asn._2 < n
| aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∃ n. ∀ asn. asn ∈ asn-s → asn._2 < n ⊦ ∃ a. t(csf(a._2), a._1) ∧ aINV(a._1) ∧ ¬ a ∈ asn-s |
aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ asn. asn ∈ asn-s → asn._2 < n, ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ ∃ a. t(csf(a._2), a._1) ∧ aINV(a._1) ∧ ¬ a ∈ asn-s
| aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ asn. asn ∈ asn-s → asn._2 < n, ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ ∃ a. t(csf(a._2), a._1) ∧ aINV(a._1) ∧ ¬ a ∈ asn-s |
aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), cINV(csf(n + 1)) → (∃ as. t(csf(n + 1), as) ∧ aINV(as)), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ asn. asn ∈ asn-s → asn._2 < n ⊦ ∃ a. t(csf(a._2), a._1) ∧ aINV(a._1) ∧ ¬ a ∈ asn-s
Used terms: csf(n + 1)
| aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), cINV(csf(n + 1)) → (∃ as. t(csf(n + 1), as) ∧ aINV(as)), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ asn. asn ∈ asn-s → asn._2 < n ⊦ ∃ a. t(csf(a._2), a._1) ∧ aINV(a._1) ∧ ¬ a ∈ asn-s |
aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), cINV(csf(n + 1)) → t(csf(n + 1), as0) ∧ aINV(as0), ∀ asn. asn ∈ asn-s → asn._2 < n, ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ ∃ a. t(csf(a._2), a._1) ∧ aINV(a._1) ∧ ¬ a ∈ asn-s
| aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), cINV(csf(n + 1)) → t(csf(n + 1), as0) ∧ aINV(as0), ∀ asn. asn ∈ asn-s → asn._2 < n, ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ ∃ a. t(csf(a._2), a._1) ∧ aINV(a._1) ∧ ¬ a ∈ asn-s |
aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ cINV(csf(n + 1)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ asn. asn ∈ asn-s → asn._2 < n ⊦ ∃ a. t(csf(a._2), a._1) ∧ aINV(a._1) ∧ ¬ a ∈ asn-s
aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(n + 1), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ asn. asn ∈ asn-s → asn._2 < n ⊦ ∃ a. t(csf(a._2), a._1) ∧ aINV(a._1) ∧ ¬ a ∈ asn-s
| aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ cINV(csf(n + 1)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ asn. asn ∈ asn-s → asn._2 < n ⊦ ∃ a. t(csf(a._2), a._1) ∧ aINV(a._1) ∧ ¬ a ∈ asn-s |
Used terms: n + 1
| aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(n + 1), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ asn. asn ∈ asn-s → asn._2 < n ⊦ ∃ a. t(csf(a._2), a._1) ∧ aINV(a._1) ∧ ¬ a ∈ asn-s |
aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n + 1), as0), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ asn. asn ∈ asn-s → asn._2 < n, ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ t(csf((as0, n + 1)._2), (as0, n + 1)._1) ∧ aINV((as0, n + 1)._1) ∧ ¬ (as0, n + 1) ∈ asn-s
Used terms: (as0, n + 1)
| aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n + 1), as0), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ asn. asn ∈ asn-s → asn._2 < n, ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ t(csf((as0, n + 1)._2), (as0, n + 1)._1) ∧ aINV((as0, n + 1)._1) ∧ ¬ (as0, n + 1) ∈ asn-s |
# asn-s ≠ 0, asn-s ≠ ∅, aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n + 1), as0), t(csf(0), as), (as0, n + 1) ∈ asn-s, ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ asn. asn ∈ asn-s → asn._2 < n, ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦
Used simplifier rules: size-zero-01: ⊦ s ≠ ∅ → # s ≠ 0; (forward) from specification set-basic ne-01: ⊦ a ∈ s → s ≠ ∅; (forward) from specification set-basic
| # asn-s ≠ 0, asn-s ≠ ∅, aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n + 1), as0), t(csf(0), as), (as0, n + 1) ∈ asn-s, ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ asn. asn ∈ asn-s → asn._2 < n, ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ |
Used simplifier rules: ⊦ ¬ m + n < m; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: (as0, n + 1)
| aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) ⊦ ∃ a. t(csf(a._2), a._1) ∧ aINV(a._1) ∧ ¬ a ∈ asn-s, ∃ n. ∀ asn. asn ∈ asn-s → asn._2 < n |
⊦ ∃ n. ∀ asn. asn ∈ asn-s → asn._2 < n
| ⊦ ∃ n. ∀ asn. asn ∈ asn-s → asn._2 < n |
∃ n. ∀ asn. asn ∈ asn-s0 → asn._2 < n ⊦ ∃ n. ∀ asn0. asn0 ∈ asn-s0 ++ asn → asn0._2 < n
Used simplifier rules: Set('a) generated by ∅, ++;; ⊦ ¬ a ∈ ∅; (s)
| ∃ n. ∀ asn. asn ∈ asn-s0 → asn._2 < n ⊦ ∃ n. ∀ asn0. asn0 ∈ asn-s0 ++ asn → asn0._2 < n |
∀ asn. asn ∈ asn-s0 → asn._2 < n ⊦ ∃ n0. ∀ asn0. asn0 = asn ∨ asn0 ∈ asn-s0 → asn0._2 < n0
Used simplifier rules: ⊦ a ∈ s ++ b ↔ a = b ∨ a ∈ s; (s)
| ∀ asn. asn ∈ asn-s0 → asn._2 < n ⊦ ∃ n0. ∀ asn0. asn0 = asn ∨ asn0 ∈ asn-s0 → asn0._2 < n0 |
∀ asn. asn ∈ asn-s0 → asn._2 < n ⊦ ∀ asn0. asn0 = asn ∨ asn0 ∈ asn-s0 → asn0._2 < n, ∃ n0. ∀ asn0. asn0 = asn ∨ asn0 ∈ asn-s0 → asn0._2 < n0
Used terms: n
| ∀ asn. asn ∈ asn-s0 → asn._2 < n ⊦ ∀ asn0. asn0 = asn ∨ asn0 ∈ asn-s0 → asn0._2 < n, ∃ n0. ∀ asn0. asn0 = asn ∨ asn0 ∈ asn-s0 → asn0._2 < n0 |
n ≤ asn0._2, ∀ asn. asn ∈ asn-s0 → asn._2 < n, asn0 = asn ∨ asn0 ∈ asn-s0 ⊦ ∃ n0. ∀ asn0. asn0 = asn ∨ asn0 ∈ asn-s0 → asn0._2 < n0
Used simplifier rules: ⊦ m < n ↔ ¬ n ≤ m; (ss)
| n ≤ asn0._2, ∀ asn. asn ∈ asn-s0 → asn._2 < n, asn0 = asn ∨ asn0 ∈ asn-s0 ⊦ ∃ n0. ∀ asn0. asn0 = asn ∨ asn0 ∈ asn-s0 → asn0._2 < n0 |
asn0 = (as, n0), n ≤ n0, ∀ asn. asn ∈ asn-s0 → asn._2 < n, asn0 = asn ∨ asn0 ∈ asn-s0 ⊦ ∃ n0. ∀ asn0. asn0 = asn ∨ asn0 ∈ asn-s0 → asn0._2 < n0
Used terms: as, n0
| asn0 = (as, n0), n ≤ n0, ∀ asn. asn ∈ asn-s0 → asn._2 < n, asn0 = asn ∨ asn0 ∈ asn-s0 ⊦ ∃ n0. ∀ asn0. asn0 = asn ∨ asn0 ∈ asn-s0 → asn0._2 < n0 |
n ≤ n0, ∀ asn. asn ∈ asn-s0 → asn._2 < n, (as, n0) = asn ∨ (as, n0) ∈ asn-s0 ⊦ ∃ n0. ∀ asn0. asn0 = asn ∨ asn0 ∈ asn-s0 → asn0._2 < n0
| n ≤ n0, ∀ asn. asn ∈ asn-s0 → asn._2 < n, (as, n0) = asn ∨ (as, n0) ∈ asn-s0 ⊦ ∃ n0. ∀ asn0. asn0 = asn ∨ asn0 ∈ asn-s0 → asn0._2 < n0 |
n ≤ n0, ∀ asn. asn ∈ asn-s0 → asn._2 < n, (as, n0) = asn ∨ (as, n0) ∈ asn-s0 ⊦ ∀ asn0. asn0 = asn ∨ asn0 ∈ asn-s0 → asn0._2 < n0 + 1
Used terms: n0 + 1
| n ≤ n0, ∀ asn. asn ∈ asn-s0 → asn._2 < n, (as, n0) = asn ∨ (as, n0) ∈ asn-s0 ⊦ ∀ asn0. asn0 = asn ∨ asn0 ∈ asn-s0 → asn0._2 < n0 + 1 |
n < asn0._2, n0 < asn0._2, n ≤ n0, ∀ asn. asn ∈ asn-s0 → asn._2 < n, (as, n0) = asn ∨ (as, n0) ∈ asn-s0, asn0 = asn ∨ asn0 ∈ asn-s0 ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m < n + 1 ↔ ¬ n < m; (s)
| n < asn0._2, n0 < asn0._2, n ≤ n0, ∀ asn. asn ∈ asn-s0 → asn._2 < n, (as, n0) = asn ∨ (as, n0) ∈ asn-s0, asn0 = asn ∨ asn0 ∈ asn-s0 ⊦ |
asn0 = (as0, n1), n0 < n1, n < n1, n ≤ n0, ∀ asn. asn ∈ asn-s0 → asn._2 < n, asn0 = asn ∨ asn0 ∈ asn-s0, (as, n0) = asn ∨ (as, n0) ∈ asn-s0 ⊦
Used terms: as0, n1
| asn0 = (as0, n1), n0 < n1, n < n1, n ≤ n0, ∀ asn. asn ∈ asn-s0 → asn._2 < n, asn0 = asn ∨ asn0 ∈ asn-s0, (as, n0) = asn ∨ (as, n0) ∈ asn-s0 ⊦ |
n < n1, n0 < n1, n ≤ n0, ∀ asn. asn ∈ asn-s0 → asn._2 < n, (as0, n1) = asn ∨ (as0, n1) ∈ asn-s0, (as, n0) = asn ∨ (as, n0) ∈ asn-s0 ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| n < n1, n0 < n1, n ≤ n0, ∀ asn. asn ∈ asn-s0 → asn._2 < n, (as0, n1) = asn ∨ (as0, n1) ∈ asn-s0, (as, n0) = asn ∨ (as, n0) ∈ asn-s0 ⊦ |
(as0, n1) = asn, n0 < n1, n < n1, n ≤ n0, ∀ asn. asn ∈ asn-s0 → asn._2 < n, (as, n0) = asn ∨ (as, n0) ∈ asn-s0 ⊦
n0 < n1, n < n1, (as0, n1) ∈ asn-s0, n ≤ n0, ∀ asn. asn ∈ asn-s0 → asn._2 < n, (as, n0) = asn ∨ (as, n0) ∈ asn-s0 ⊦
| (as0, n1) = asn, n0 < n1, n < n1, n ≤ n0, ∀ asn. asn ∈ asn-s0 → asn._2 < n, (as, n0) = asn ∨ (as, n0) ∈ asn-s0 ⊦ |
# asn-s0 ≠ 0, (as, n0) ≠ (as0, n1), asn-s0 ≠ ∅, n < n1, n0 < n1, (as, n0) ∈ asn-s0, n ≤ n0, ∀ asn. asn ∈ asn-s0 → asn._2 < n ⊦
Used simplifier rules: size-zero-01: ⊦ s ≠ ∅ → # s ≠ 0; (forward) from specification set-basic ne-01: ⊦ a ∈ s → s ≠ ∅; (forward) from specification set-basic ⊦ ¬ n < n; (s) lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic
| # asn-s0 ≠ 0, (as, n0) ≠ (as0, n1), asn-s0 ≠ ∅, n < n1, n0 < n1, (as, n0) ∈ asn-s0, n ≤ n0, ∀ asn. asn ∈ asn-s0 → asn._2 < n ⊦ |
Used simplifier rules: ⊦ m ≤ n → (n < m ↔ false); (s) Used terms: (as, n0)
| n0 < n1, n < n1, (as0, n1) ∈ asn-s0, n ≤ n0, ∀ asn. asn ∈ asn-s0 → asn._2 < n, (as, n0) = asn ∨ (as, n0) ∈ asn-s0 ⊦ |
# asn-s0 ≠ 0, asn-s0 ≠ ∅, n0 < n1, n < n1, (as0, n1) ∈ asn-s0, n ≤ n0, ∀ asn. asn ∈ asn-s0 → asn._2 < n, (as, n0) = asn ∨ (as, n0) ∈ asn-s0 ⊦
Used simplifier rules: size-zero-01: ⊦ s ≠ ∅ → # s ≠ 0; (forward) from specification set-basic ne-01: ⊦ a ∈ s → s ≠ ∅; (forward) from specification set-basic
| # asn-s0 ≠ 0, asn-s0 ≠ ∅, n0 < n1, n < n1, (as0, n1) ∈ asn-s0, n ≤ n0, ∀ asn. asn ∈ asn-s0 → asn._2 < n, (as, n0) = asn ∨ (as, n0) ∈ asn-s0 ⊦ |
Used simplifier rules: ⊦ m < n → ¬ n < m; (s) Used terms: (as0, n1)
| aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ finroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ |
⊦ finroot(g) ↔ (∃ s. ∀ a. isroot(g)(a) ↔ a ∈ s)
aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ s. ¬ (∀ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ↔ a ∈ s) ⊦
Used terms: (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))
| ⊦ finroot(g) ↔ (∃ s. ∀ a. isroot(g)(a) ↔ a ∈ s) |
| aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ s. ¬ (∀ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ↔ a ∈ s) ⊦ |
aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ s. ¬ (∀ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ↔ a ∈ s), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∀ ass. ∃ asn-s. (∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s) ∧ (∀ asn. asn ∈ asn-s → asn._2 = 0) ⊦
aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ s. ¬ (∀ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ↔ a ∈ s), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ ∀ ass. ∃ asn-s. (∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s) ∧ (∀ asn. asn ∈ asn-s → asn._2 = 0)
Used formulas: ∀ ass. ∃ asn-s. (∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s) ∧ (∀ asn. asn ∈ asn-s → asn._2 = 0)
| aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ s. ¬ (∀ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ↔ a ∈ s), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∀ ass. ∃ asn-s. (∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s) ∧ (∀ asn. asn ∈ asn-s → asn._2 = 0) ⊦ |
aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), cINV(csf(0)) → (∃ ass. ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass), ∀ ass. ∃ asn-s. (∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s) ∧ (∀ asn. asn ∈ asn-s → asn._2 = 0), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ 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), ∀ s. ¬ (∀ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ↔ a ∈ s) ⊦
Used terms: csf(0)
| aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), cINV(csf(0)) → (∃ ass. ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass), ∀ ass. ∃ asn-s. (∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s) ∧ (∀ asn. asn ∈ asn-s → asn._2 = 0), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ 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), ∀ s. ¬ (∀ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ↔ a ∈ s) ⊦ |
aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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, 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∀ ass. ∃ asn-s. (∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s) ∧ (∀ asn. asn ∈ asn-s → asn._2 = 0), ∀ s. ¬ (∀ asn. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asn) ↔ asn ∈ s), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass ⊦
Used simplifier rules: ⊦ ext !(a ') = (ext(a) = None ⊃ [];ext(a).get '); (s)
| aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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, 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∀ ass. ∃ asn-s. (∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s) ∧ (∀ asn. asn ∈ asn-s → asn._2 = 0), ∀ s. ¬ (∀ asn. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asn) ↔ asn ∈ s), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass ⊦ |
aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ∀ s. ¬ (∀ asn. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asn) ↔ asn ∈ s), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ 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), ∃ asn-s. (∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s) ∧ (∀ asn. asn ∈ asn-s → asn._2 = 0) ⊦
Used terms: ass
| aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ∀ s. ¬ (∀ asn. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asn) ↔ asn ∈ s), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ 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), ∃ asn-s. (∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s) ∧ (∀ asn. asn ∈ asn-s → asn._2 = 0) ⊦ |
aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s, ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ 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, 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∀ s. ¬ (∀ asn. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asn) ↔ asn ∈ s), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass ⊦
| aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s, ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ 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, 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∀ s. ¬ (∀ asn. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asn) ↔ asn ∈ s), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass ⊦ |
aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ 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), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s ⊦ ∀ asn. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asn) ↔ asn ∈ asn-s
Used terms: asn-s
| aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ 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), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s ⊦ ∀ asn. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asn) ↔ asn ∈ asn-s |
¬ ( isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asn) ↔ asn ∈ asn-s), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s, ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ 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, 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass ⊦
| ¬ ( isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asn) ↔ asn ∈ asn-s), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s, ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ 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, 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass ⊦ |
⊦ isroot(g)(b) ↔ dom(g)(b) ∧ (∀ a. ¬ edge(g)(a, b))
aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ 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), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s ⊦ dom ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asn) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, asn)) ↔ asn ∈ asn-s
Used terms: (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext)) (asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1)), asn
| ⊦ isroot(g)(b) ↔ dom(g)(b) ∧ (∀ a. ¬ edge(g)(a, b)) |
| aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ 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), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s ⊦ dom ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asn) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, asn)) ↔ asn ∈ asn-s |
aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s, ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ 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, 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass ⊦ t(csf(asn._2), asn._1) ∧ aINV(asn._1) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, asn)) ↔ asn ∈ asn-s
Used simplifier rules: ⊦ dom(vs × es) = vs; (s)
| aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s, ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ 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, 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass ⊦ t(csf(asn._2), asn._1) ∧ aINV(asn._1) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, asn)) ↔ asn ∈ asn-s |
asn = (as0, n), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ 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), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s ⊦ t(csf(n), as0) ∧ aINV(as0) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, asn)) ↔ asn ∈ asn-s
Used terms: as0, n
| asn = (as0, n), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ 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), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s ⊦ t(csf(n), as0) ∧ aINV(as0) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, asn)) ↔ asn ∈ asn-s |
aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s, ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ 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, 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass ⊦ t(csf(n), as0) ∧ aINV(as0) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, n))) ↔ (as0, n) ∈ asn-s
| aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s, ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ 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, 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass ⊦ t(csf(n), as0) ∧ aINV(as0) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, n))) ↔ (as0, n) ∈ asn-s |
aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(n), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ¬ (as0, n) ∈ asn-s, ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ 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), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s, ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, n)) ⊦
aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), (as0, n) ∈ asn-s, ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ 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), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s ⊦ t(csf(n), as0) ∧ aINV(as0) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, n)))
| aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(n), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ¬ (as0, n) ∈ asn-s, ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ 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), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s, ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, n)) ⊦ |
n = 0, aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n), as0), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ¬ (as0, n) ∈ asn-s, ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, n)), ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s, ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ 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, 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass ⊦
n ≠ 0, aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n), as0), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ¬ (as0, n) ∈ asn-s, ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, n)), ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s, ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ 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, 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass ⊦
Used formulas: n = 0
| n = 0, aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n), as0), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ¬ (as0, n) ∈ asn-s, ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, n)), ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s, ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ 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, 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass ⊦ |
aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(0), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ¬ (as0, 0) ∈ asn-s, ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ 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), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s, ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, 0)) ⊦
| aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(0), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ¬ (as0, 0) ∈ asn-s, ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ 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), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s, ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, 0)) ⊦ |
as0 ∈ ass ↔ (as0, 0) ∈ asn-s, aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as0), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ¬ (as0, 0) ∈ asn-s, ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, 0)), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ 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, 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass ⊦
Used terms: as0
| as0 ∈ ass ↔ (as0, 0) ∈ asn-s, aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as0), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ¬ (as0, 0) ∈ asn-s, ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, 0)), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ 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, 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass ⊦ |
aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(0), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ¬ (as0, 0) ∈ asn-s, ¬ as0 ∈ ass, ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ 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), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, 0)) ⊦
| aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(0), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ¬ (as0, 0) ∈ asn-s, ¬ as0 ∈ ass, ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ 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), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, 0)) ⊦ |
Used terms: as0
| n ≠ 0, aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n), as0), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ¬ (as0, n) ∈ asn-s, ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, n)), ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s, ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ 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, 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass ⊦ |
n ≠ 0, aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(n), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ¬ (as0, n) ∈ asn-s, cINV(csf(n - 1)) ∧ cstep(csf(n - 1), caf(n - 1), csf(n)) ∧ t(csf(n), as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, (cext(caf(n - 1)) = None ⊃ [];cext(caf(n - 1)).get '), as0) ∧ t(csf(n - 1), as)), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ∀ n. cINV(csf(n)), ∀ 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), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s, ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, n)) ⊦
Used terms: csf(n - 1), caf(n - 1), csf(n), as0
| n ≠ 0, aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(n), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ¬ (as0, n) ∈ asn-s, cINV(csf(n - 1)) ∧ cstep(csf(n - 1), caf(n - 1), csf(n)) ∧ t(csf(n), as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, (cext(caf(n - 1)) = None ⊃ [];cext(caf(n - 1)).get '), as0) ∧ t(csf(n - 1), as)), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ∀ n. cINV(csf(n)), ∀ 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), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s, ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, n)) ⊦ |
n ≠ 0, aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n), as0), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ¬ (as0, n) ∈ asn-s, cINV(csf(n - 1)) ∧ cstep(csf(n - 1), caf(n - 1), csf(n)) → aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n - 1)) = None ⊃ [];cext(caf(n - 1)).get '), as0) ∧ t(csf(n - 1), as1), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, n)), ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s, ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ 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), ∀ n. cINV(csf(n)), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass ⊦
| n ≠ 0, aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n), as0), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ¬ (as0, n) ∈ asn-s, cINV(csf(n - 1)) ∧ cstep(csf(n - 1), caf(n - 1), csf(n)) → aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n - 1)) = None ⊃ [];cext(caf(n - 1)).get '), as0) ∧ t(csf(n - 1), as1), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, n)), ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s, ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ 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), ∀ n. cINV(csf(n)), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass ⊦ |
n = n0 + 1, n ≠ 0, aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(n), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ¬ (as0, n) ∈ asn-s, cINV(csf(n0)) ∧ cstep(csf(n0), caf(n0), csf(n)) → aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0) ∧ t(csf(n0), as1), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ∀ n. cINV(csf(n)), ∀ 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), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s, ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, n)) ⊦
Used simplifier rules: n ≠ 0 ⊦ m = n - 1 ↔ n = m + 1; (elim) Used terms: n, n0
| n = n0 + 1, n ≠ 0, aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(n), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ¬ (as0, n) ∈ asn-s, cINV(csf(n0)) ∧ cstep(csf(n0), caf(n0), csf(n)) → aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0) ∧ t(csf(n0), as1), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ∀ n. cINV(csf(n)), ∀ 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), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s, ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, n)) ⊦ |
aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n0 + 1), as0), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ¬ (as0, n0 + 1) ∈ asn-s, cINV(csf(n0)) ∧ cstep(csf(n0), caf(n0), csf(n0 + 1)) → aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0) ∧ t(csf(n0), as1), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, n0 + 1)), ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s, ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ 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), ∀ n. cINV(csf(n)), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m + 1 ≠ 0; (s)
| aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n0 + 1), as0), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ¬ (as0, n0 + 1) ∈ asn-s, cINV(csf(n0)) ∧ cstep(csf(n0), caf(n0), csf(n0 + 1)) → aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0) ∧ t(csf(n0), as1), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, n0 + 1)), ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s, ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ 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), ∀ n. cINV(csf(n)), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass ⊦ |
aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(n0 + 1), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ¬ (as0, n0 + 1) ∈ asn-s, ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ∀ n. cINV(csf(n)), ∀ 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), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s, ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, n0 + 1)) ⊦ cINV(csf(n0)) ∧ cstep(csf(n0), caf(n0), csf(n0 + 1))
aINV(as), aINV(as0), aINV(as1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(0), as), t(csf(n0 + 1), as0), t(csf(n0), as1), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ¬ (as0, n0 + 1) ∈ asn-s, ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ∀ n. cINV(csf(n)), ∀ 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), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s, ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, n0 + 1)) ⊦
| aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(n0 + 1), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ¬ (as0, n0 + 1) ∈ asn-s, ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ∀ n. cINV(csf(n)), ∀ 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), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s, ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, n0 + 1)) ⊦ cINV(csf(n0)) ∧ cstep(csf(n0), caf(n0), csf(n0 + 1)) |
aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(n0 + 1), as0), ¬ cINV(csf(n0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ¬ (as0, n0 + 1) ∈ asn-s, ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ∀ n. cINV(csf(n)), ∀ 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), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s, ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, n0 + 1)) ⊦
Used simplifier rules: ⊦ ¬ step(sf(n), af(n), sf(n + 1)) → (fragω(IOAut(start, step, ext))(sf, af) ↔ false); (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic
| aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(n0 + 1), as0), ¬ cINV(csf(n0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ¬ (as0, n0 + 1) ∈ asn-s, ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ∀ n. cINV(csf(n)), ∀ 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), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s, ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, n0 + 1)) ⊦ |
Used terms: n0
| aINV(as), aINV(as0), aINV(as1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(0), as), t(csf(n0 + 1), as0), t(csf(n0), as1), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ¬ (as0, n0 + 1) ∈ asn-s, ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ∀ n. cINV(csf(n)), ∀ 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), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s, ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, n0 + 1)) ⊦ |
aINV(as1), aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n0), as1), t(csf(n0 + 1), as0), t(csf(0), as), ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) ((as1, n0), (as0, n0 + 1)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ¬ (as0, n0 + 1) ∈ asn-s, ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s, ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ 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), ∀ n. cINV(csf(n)), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass ⊦
Used terms: (as1, n0)
| aINV(as1), aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n0), as1), t(csf(n0 + 1), as0), t(csf(0), as), ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) ((as1, n0), (as0, n0 + 1)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ¬ (as0, n0 + 1) ∈ asn-s, ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s, ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ 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), ∀ n. cINV(csf(n)), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass ⊦ |
⊦ edge(vs × es)(a, b) ↔ es(a, b) ∧ vs(a) ∧ vs(b)
Used simplifier rules: ⊦ m + n = m + n0 ↔ n = n0; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1), λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext)) (asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1), (as1, n0), (as0, n0 + 1)
| ⊦ edge(vs × es)(a, b) ↔ es(a, b) ∧ vs(a) ∧ vs(b) |
| aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), (as0, n) ∈ asn-s, ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ 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), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s ⊦ t(csf(n), as0) ∧ aINV(as0) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, n))) |
# asn-s ≠ 0, asn-s ≠ ∅, aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), (as0, n) ∈ asn-s, ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ 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), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s ⊦ t(csf(n), as0) ∧ aINV(as0) ∧ ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asn, (as0, n))
Used simplifier rules: size-zero-01: ⊦ s ≠ ∅ → # s ≠ 0; (forward) from specification set-basic ne-01: ⊦ a ∈ s → s ≠ ∅; (forward) from specification set-basic
| # asn-s ≠ 0, asn-s ≠ ∅, aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), (as0, n) ∈ asn-s, ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ 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), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s ⊦ t(csf(n), as0) ∧ aINV(as0) ∧ ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asn, (as0, n)) |
# asn-s ≠ 0, asn-s ≠ ∅, aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), (as0, n) ∈ asn-s, ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), (as0, n) ∈ asn-s → (as0, n)._2 = 0, ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s, ∀ 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, 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass ⊦ t(csf(n), as0) ∧ aINV(as0) ∧ ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asn, (as0, n))
Used terms: (as0, n)
| # asn-s ≠ 0, asn-s ≠ ∅, aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), (as0, n) ∈ asn-s, ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), (as0, n) ∈ asn-s → (as0, n)._2 = 0, ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s, ∀ 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, 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass ⊦ t(csf(n), as0) ∧ aINV(as0) ∧ ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asn, (as0, n)) |
# asn-s ≠ 0, asn-s ≠ ∅, aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), (as0, 0) ∈ asn-s, ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asn, (as0, 0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s, ∀ 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, 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass ⊦ aINV(as0) ∧ t(csf(0), as0)
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m + 1 ≠ 0; (s) ⊦ edge(vs × es)(a, b) ↔ es(a, b) ∧ vs(a) ∧ vs(b); (ws)
| # asn-s ≠ 0, asn-s ≠ ∅, aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), (as0, 0) ∈ asn-s, ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asn, (as0, 0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s, ∀ 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, 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass ⊦ aINV(as0) ∧ t(csf(0), as0) |
as0 ∈ ass ↔ (as0, 0) ∈ asn-s, # asn-s ≠ 0, asn-s ≠ ∅, aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), (as0, 0) ∈ asn-s, ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asn, (as0, 0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ 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) ⊦ aINV(as0) ∧ t(csf(0), as0)
Used terms: as0
| as0 ∈ ass ↔ (as0, 0) ∈ asn-s, # asn-s ≠ 0, asn-s ≠ ∅, aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), (as0, 0) ∈ asn-s, ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asn, (as0, 0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ 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) ⊦ aINV(as0) ∧ t(csf(0), as0) |
# asn-s ≠ 0, # ass ≠ 0, asn-s ≠ ∅, ass ≠ ∅, aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), as0 ∈ ass, (as0, 0) ∈ asn-s, ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asn, (as0, 0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ 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) ⊦ aINV(as0) ∧ t(csf(0), as0)
Used simplifier rules: size-zero-01: ⊦ s ≠ ∅ → # s ≠ 0; (forward) from specification set-basic ne-01: ⊦ a ∈ s → s ≠ ∅; (forward) from specification set-basic
| # asn-s ≠ 0, # ass ≠ 0, asn-s ≠ ∅, ass ≠ ∅, aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), as0 ∈ ass, (as0, 0) ∈ asn-s, ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asn, (as0, 0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ as. t(csf(0), as) ∧ aINV(as) ↔ as ∈ ass, ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ 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) ⊦ aINV(as0) ∧ t(csf(0), as0) |
Used terms: as0
| aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ s. ¬ (∀ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ↔ a ∈ s), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ ∀ ass. ∃ asn-s. (∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s) ∧ (∀ asn. asn ∈ asn-s → asn._2 = 0) |
aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ s. ¬ (∀ asn. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asn) ↔ asn ∈ s) ⊦ ∃ asn-s. (∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s) ∧ (∀ asn. asn ∈ asn-s → asn._2 = 0)
Used simplifier rules: ⊦ ext !(a ') = (ext(a) = None ⊃ [];ext(a).get '); (s)
| aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ s. ¬ (∀ asn. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asn) ↔ asn ∈ s) ⊦ ∃ asn-s. (∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s) ∧ (∀ asn. asn ∈ asn-s → asn._2 = 0) |
⊦ ∃ asn-s. (∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s) ∧ (∀ asn. asn ∈ asn-s → asn._2 = 0)
| ⊦ ∃ asn-s. (∀ as. as ∈ ass ↔ (as, 0) ∈ asn-s) ∧ (∀ asn. asn ∈ asn-s → asn._2 = 0) |
⊦ ∃ asn-s. (∀ as. as ∈ ∅ ↔ (as, 0) ∈ asn-s) ∧ (∀ asn. asn ∈ asn-s → asn._2 = 0)
∃ asn-s. (∀ as. as ∈ ass0 ↔ (as, 0) ∈ asn-s) ∧ (∀ asn. asn ∈ asn-s → asn._2 = 0) ⊦ ∃ asn-s. (∀ as0. as0 ∈ ass0 ++ as ↔ (as0, 0) ∈ asn-s) ∧ (∀ asn. asn ∈ asn-s → asn._2 = 0)
Used simplifier rules: Set('a) generated by ∅, ++;;
| ⊦ ∃ asn-s. (∀ as. as ∈ ∅ ↔ (as, 0) ∈ asn-s) ∧ (∀ asn. asn ∈ asn-s → asn._2 = 0) |
⊦ ∃ asn-s. (∀ as. ¬ (as, 0) ∈ asn-s) ∧ (∀ asn. asn ∈ asn-s → asn._2 = 0)
Used simplifier rules: ⊦ ¬ a ∈ ∅; (s)
| ⊦ ∃ asn-s. (∀ as. ¬ (as, 0) ∈ asn-s) ∧ (∀ asn. asn ∈ asn-s → asn._2 = 0) |
Used simplifier rules: ⊦ ¬ a ∈ ∅; (s) Used terms: ∅
| ∃ asn-s. (∀ as. as ∈ ass0 ↔ (as, 0) ∈ asn-s) ∧ (∀ asn. asn ∈ asn-s → asn._2 = 0) ⊦ ∃ asn-s. (∀ as0. as0 ∈ ass0 ++ as ↔ (as0, 0) ∈ asn-s) ∧ (∀ asn. asn ∈ asn-s → asn._2 = 0) |
∀ as. as ∈ ass0 ↔ (as, 0) ∈ asn-s, ∀ asn. asn ∈ asn-s → asn._2 = 0 ⊦ ∃ asn-s0. (∀ as0. as0 = as ∨ as0 ∈ ass0 ↔ (as0, 0) ∈ asn-s0) ∧ (∀ asn. asn ∈ asn-s0 → asn._2 = 0)
Used simplifier rules: ⊦ a ∈ s ++ b ↔ a = b ∨ a ∈ s; (s)
| ∀ as. as ∈ ass0 ↔ (as, 0) ∈ asn-s, ∀ asn. asn ∈ asn-s → asn._2 = 0 ⊦ ∃ asn-s0. (∀ as0. as0 = as ∨ as0 ∈ ass0 ↔ (as0, 0) ∈ asn-s0) ∧ (∀ asn. asn ∈ asn-s0 → asn._2 = 0) |
∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ as. as ∈ ass0 ↔ (as, 0) ∈ asn-s ⊦ (∀ as0. as0 = as ∨ as0 ∈ ass0 ↔ (as0, 0) ∈ asn-s ++ (as, 0)) ∧ (∀ asn. asn ∈ asn-s ++ (as, 0) → asn._2 = 0)
Used terms: asn-s ++ (as, 0)
| ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ as. as ∈ ass0 ↔ (as, 0) ∈ asn-s ⊦ (∀ as0. as0 = as ∨ as0 ∈ ass0 ↔ (as0, 0) ∈ asn-s ++ (as, 0)) ∧ (∀ asn. asn ∈ asn-s ++ (as, 0) → asn._2 = 0) |
∀ as. as ∈ ass0 ↔ (as, 0) ∈ asn-s, ∀ asn. asn ∈ asn-s → asn._2 = 0 ⊦ (as0 ≠ as → (as0 ∈ ass0 ↔ (as0, 0) ∈ asn-s)) ∧ (asn = (as, 0) ∨ asn ∈ asn-s → asn._2 = 0)
Used simplifier rules: ⊦ a ∈ s ++ b ↔ a = b ∨ a ∈ s; (s)
| ∀ as. as ∈ ass0 ↔ (as, 0) ∈ asn-s, ∀ asn. asn ∈ asn-s → asn._2 = 0 ⊦ (as0 ≠ as → (as0 ∈ ass0 ↔ (as0, 0) ∈ asn-s)) ∧ (asn = (as, 0) ∨ asn ∈ asn-s → asn._2 = 0) |
asn = (as1, n), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ as. as ∈ ass0 ↔ (as, 0) ∈ asn-s ⊦ (as0 ≠ as → (as0 ∈ ass0 ↔ (as0, 0) ∈ asn-s)) ∧ (asn = (as, 0) ∨ asn ∈ asn-s → n = 0)
Used terms: as1, n
| asn = (as1, n), ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ as. as ∈ ass0 ↔ (as, 0) ∈ asn-s ⊦ (as0 ≠ as → (as0 ∈ ass0 ↔ (as0, 0) ∈ asn-s)) ∧ (asn = (as, 0) ∨ asn ∈ asn-s → n = 0) |
∀ as. as ∈ ass0 ↔ (as, 0) ∈ asn-s, ∀ asn. asn ∈ asn-s → asn._2 = 0 ⊦ (as0 ≠ as → (as0 ∈ ass0 ↔ (as0, 0) ∈ asn-s)) ∧ ((as1, n) = (as, 0) ∨ (as1, n) ∈ asn-s → n = 0)
| ∀ as. as ∈ ass0 ↔ (as, 0) ∈ asn-s, ∀ asn. asn ∈ asn-s → asn._2 = 0 ⊦ (as0 ≠ as → (as0 ∈ ass0 ↔ (as0, 0) ∈ asn-s)) ∧ ((as1, n) = (as, 0) ∨ (as1, n) ∈ asn-s → n = 0) |
¬(as0 ∈ ass0 ↔ (as0, 0) ∈ asn-s), as0 ≠ as, ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ as. as ∈ ass0 ↔ (as, 0) ∈ asn-s ⊦
n ≠ 0, ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ as. as ∈ ass0 ↔ (as, 0) ∈ asn-s, (as1, n) = (as, 0) ∨ (as1, n) ∈ asn-s ⊦
| ¬(as0 ∈ ass0 ↔ (as0, 0) ∈ asn-s), as0 ≠ as, ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ as. as ∈ ass0 ↔ (as, 0) ∈ asn-s ⊦ |
Used terms: as0
| n ≠ 0, ∀ asn. asn ∈ asn-s → asn._2 = 0, ∀ as. as ∈ ass0 ↔ (as, 0) ∈ asn-s, (as1, n) = (as, 0) ∨ (as1, n) ∈ asn-s ⊦ |
# asn-s ≠ 0, (as1, n) ≠ (as, 0), asn-s ≠ ∅, n ≠ 0, (as1, n) ∈ asn-s, ∀ as. as ∈ ass0 ↔ (as, 0) ∈ asn-s, ∀ asn. asn ∈ asn-s → asn._2 = 0 ⊦
Used simplifier rules: size-zero-01: ⊦ s ≠ ∅ → # s ≠ 0; (forward) from specification set-basic ne-01: ⊦ a ∈ s → s ≠ ∅; (forward) from specification set-basic
| # asn-s ≠ 0, (as1, n) ≠ (as, 0), asn-s ≠ ∅, n ≠ 0, (as1, n) ∈ asn-s, ∀ as. as ∈ ass0 ↔ (as, 0) ∈ asn-s, ∀ asn. asn ∈ asn-s → asn._2 = 0 ⊦ |
Used terms: (as1, n)
| aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ finout ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ |
⊦ finout(g) ↔ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s)
aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∃ a. ¬ (∃ s. ∀ b. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, b) ↔ b ∈ s) ⊦
Used terms: (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))
| ⊦ finout(g) ↔ (∀ a. ∃ s. ∀ b. edge(g)(a, b) ↔ b ∈ s) |
| aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∃ a. ¬ (∃ s. ∀ b. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, b) ↔ b ∈ s) ⊦ |
aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ ∃ s. ∀ asn0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asn, asn0) ↔ asn0 ∈ s
Used simplifier rules: ⊦ ext !(a ') = (ext(a) = None ⊃ [];ext(a).get '); (s)
| aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ ∃ s. ∀ asn0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asn, asn0) ↔ asn0 ∈ s |
asn = (as1, n0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) ⊦ ∃ s. ∀ asn0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asn, asn0) ↔ asn0 ∈ s
| asn = (as1, n0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) ⊦ ∃ s. ∀ asn0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asn, asn0) ↔ asn0 ∈ s |
aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ ∃ s. ∀ asn0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) ((as1, n0), asn0) ↔ asn0 ∈ s
| aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ ∃ s. ∀ asn0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) ((as1, n0), asn0) ↔ asn0 ∈ s |
aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), cINV(csf(n0 + 1)) → (∃ ass. ∀ as. t(csf(n0 + 1), as) ∧ aINV(as) ↔ as ∈ ass), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) ⊦ ∃ s. ∀ asn0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) ((as1, n0), asn0) ↔ asn0 ∈ s
Used terms: csf(n0 + 1)
| aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), cINV(csf(n0 + 1)) → (∃ ass. ∀ as. t(csf(n0 + 1), as) ∧ aINV(as) ↔ as ∈ ass), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) ⊦ ∃ s. ∀ asn0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) ((as1, n0), asn0) ↔ asn0 ∈ s |
aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), cINV(csf(n0 + 1)) → (∀ as. t(csf(n0 + 1), as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ ∃ s. ∀ asn0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) ((as1, n0), asn0) ↔ asn0 ∈ s
| aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), cINV(csf(n0 + 1)) → (∀ as. t(csf(n0 + 1), as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ ∃ s. ∀ asn0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) ((as1, n0), asn0) ↔ asn0 ∈ s |
aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ cINV(csf(n0 + 1)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) ⊦ ∃ s. ∀ asn0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) ((as1, n0), asn0) ↔ asn0 ∈ s
aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ as. t(csf(n0 + 1), as) ∧ aINV(as) ↔ as ∈ ass ⊦ ∃ s. ∀ asn0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) ((as1, n0), asn0) ↔ asn0 ∈ s
| aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ cINV(csf(n0 + 1)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) ⊦ ∃ s. ∀ asn0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) ((as1, n0), asn0) ↔ asn0 ∈ s |
Used terms: n0 + 1
| aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ as. t(csf(n0 + 1), as) ∧ aINV(as) ↔ as ∈ ass ⊦ ∃ s. ∀ asn0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) ((as1, n0), asn0) ↔ asn0 ∈ s |
aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ as. t(csf(n0 + 1), as) ∧ aINV(as) ↔ as ∈ ass, ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∃ asn-s. ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as) ⊦ ∃ s. ∀ asn0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) ((as1, n0), asn0) ↔ asn0 ∈ s
aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ as. t(csf(n0 + 1), as) ∧ aINV(as) ↔ as ∈ ass, ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ ∃ s. ∀ asn0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) ((as1, n0), asn0) ↔ asn0 ∈ s, ∃ asn-s. ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as)
Used formulas: ∃ asn-s. ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as)
| aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ as. t(csf(n0 + 1), as) ∧ aINV(as) ↔ as ∈ ass, ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∃ asn-s. ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as) ⊦ ∃ s. ∀ asn0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) ((as1, n0), asn0) ↔ asn0 ∈ s |
aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ as. t(csf(n0 + 1), as) ∧ aINV(as) ↔ as ∈ ass, ∀ as0, m0. (as0, m0) ∈ asn-s ↔ as0 ∈ ass ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0) ⊦ ∃ s. ∀ asn0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) ((as1, n0), asn0) ↔ asn0 ∈ s
Used simplifier rules: ⊦ ext !(a ') = (ext(a) = None ⊃ [];ext(a).get '); (s)
| aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ as. t(csf(n0 + 1), as) ∧ aINV(as) ↔ as ∈ ass, ∀ as0, m0. (as0, m0) ∈ asn-s ↔ as0 ∈ ass ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0) ⊦ ∃ s. ∀ asn0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) ((as1, n0), asn0) ↔ asn0 ∈ s |
aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(n0), as1), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ as0, m0. (as0, m0) ∈ asn-s ↔ as0 ∈ ass ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), ∀ as. t(csf(n0 + 1), as) ∧ aINV(as) ↔ as ∈ ass, ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ ∃ s. ∀ asn0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) ((as1, n0), asn0) ↔ asn0 ∈ s
aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ t(csf(n0), as1), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ as0, m0. (as0, m0) ∈ asn-s ↔ as0 ∈ ass ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), ∀ as. t(csf(n0 + 1), as) ∧ aINV(as) ↔ as ∈ ass, ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ ∃ s. ∀ asn0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) ((as1, n0), asn0) ↔ asn0 ∈ s
Used formulas: t(csf(n0), as1)
| aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(n0), as1), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ as0, m0. (as0, m0) ∈ asn-s ↔ as0 ∈ ass ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), ∀ as. t(csf(n0 + 1), as) ∧ aINV(as) ↔ as ∈ ass, ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ ∃ s. ∀ asn0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) ((as1, n0), asn0) ↔ asn0 ∈ s |
aINV(as), aINV(as1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n0), as1), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ as. t(csf(n0 + 1), as) ∧ aINV(as) ↔ as ∈ ass, ∀ as0, m0. (as0, m0) ∈ asn-s ↔ as0 ∈ ass ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0) ⊦ ∃ s. ∀ asn0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) ((as1, n0), asn0) ↔ asn0 ∈ s
aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n0), as1), t(csf(0), as), ¬ aINV(as1), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ as. t(csf(n0 + 1), as) ∧ aINV(as) ↔ as ∈ ass, ∀ as0, m0. (as0, m0) ∈ asn-s ↔ as0 ∈ ass ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0) ⊦ ∃ s. ∀ asn0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) ((as1, n0), asn0) ↔ asn0 ∈ s
Used formulas: aINV(as1)
| aINV(as), aINV(as1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n0), as1), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ as. t(csf(n0 + 1), as) ∧ aINV(as) ↔ as ∈ ass, ∀ as0, m0. (as0, m0) ∈ asn-s ↔ as0 ∈ ass ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0) ⊦ ∃ s. ∀ asn0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) ((as1, n0), asn0) ↔ asn0 ∈ s |
aINV(as1), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(n0), as1), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ as0, m0. (as0, m0) ∈ asn-s ↔ as0 ∈ ass ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), ∀ as. t(csf(n0 + 1), as) ∧ aINV(as) ↔ as ∈ ass, ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ ∀ asn0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) ((as1, n0), asn0) ↔ asn0 ∈ asn-s
Used terms: asn-s
| aINV(as1), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(n0), as1), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ as0, m0. (as0, m0) ∈ asn-s ↔ as0 ∈ ass ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), ∀ as. t(csf(n0 + 1), as) ∧ aINV(as) ↔ as ∈ ass, ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ ∀ asn0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) ((as1, n0), asn0) ↔ asn0 ∈ asn-s |
¬ ( edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) ((as1, n0), asn0) ↔ asn0 ∈ asn-s), aINV(as), aINV(as1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n0), as1), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ as. t(csf(n0 + 1), as) ∧ aINV(as) ↔ as ∈ ass, ∀ as0, m0. (as0, m0) ∈ asn-s ↔ as0 ∈ ass ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0) ⊦
| ¬ ( edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) ((as1, n0), asn0) ↔ asn0 ∈ asn-s), aINV(as), aINV(as1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n0), as1), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ as. t(csf(n0 + 1), as) ∧ aINV(as) ↔ as ∈ ass, ∀ as0, m0. (as0, m0) ∈ asn-s ↔ as0 ∈ ass ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0) ⊦ |
⊦ edge(vs × es)(a, b) ↔ es(a, b) ∧ vs(a) ∧ vs(b)
¬ ( ( aINV((as1, n0)._1) ∧ aINV(asn0._1) ∧ asn0._2 = (as1, n0)._2 + 1 ∧ move(IOAut(astart, astep, aext))((as1, n0)._1, (cext(caf((as1, n0)._2)) = None ⊃ [];cext(caf((as1, n0)._2)).get '), asn0._1)) ∧ (t(csf((as1, n0)._2), (as1, n0)._1) ∧ aINV((as1, n0)._1)) ∧ t(csf(asn0._2), asn0._1) ∧ aINV(asn0._1) ↔ asn0 ∈ asn-s), aINV(as1), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(n0), as1), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ as0, m0. (as0, m0) ∈ asn-s ↔ as0 ∈ ass ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), ∀ as. t(csf(n0 + 1), as) ∧ aINV(as) ↔ as ∈ ass, ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦
Used terms: λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1), λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext)) (asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1), (as1, n0), asn0
| ⊦ edge(vs × es)(a, b) ↔ es(a, b) ∧ vs(a) ∧ vs(b) |
| ¬ ( ( aINV((as1, n0)._1) ∧ aINV(asn0._1) ∧ asn0._2 = (as1, n0)._2 + 1 ∧ move(IOAut(astart, astep, aext))((as1, n0)._1, (cext(caf((as1, n0)._2)) = None ⊃ [];cext(caf((as1, n0)._2)).get '), asn0._1)) ∧ (t(csf((as1, n0)._2), (as1, n0)._1) ∧ aINV((as1, n0)._1)) ∧ t(csf(asn0._2), asn0._1) ∧ aINV(asn0._1) ↔ asn0 ∈ asn-s), aINV(as1), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(n0), as1), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ as0, m0. (as0, m0) ∈ asn-s ↔ as0 ∈ ass ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), ∀ as. t(csf(n0 + 1), as) ∧ aINV(as) ↔ as ∈ ass, ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ |
¬ ( asn0._2 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), asn0._1) ∧ t(csf(asn0._2), asn0._1) ∧ aINV(asn0._1) ↔ asn0 ∈ asn-s), aINV(as), aINV(as1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n0), as1), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ as. t(csf(n0 + 1), as) ∧ aINV(as) ↔ as ∈ ass, ∀ as0, m0. (as0, m0) ∈ asn-s ↔ as0 ∈ ass ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0) ⊦
| ¬ ( asn0._2 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), asn0._1) ∧ t(csf(asn0._2), asn0._1) ∧ aINV(asn0._1) ↔ asn0 ∈ asn-s), aINV(as), aINV(as1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n0), as1), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ as. t(csf(n0 + 1), as) ∧ aINV(as) ↔ as ∈ ass, ∀ as0, m0. (as0, m0) ∈ asn-s ↔ as0 ∈ ass ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0) ⊦ |
asn0 = (as0, n), ¬ (n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0) ∧ t(csf(n), as0) ∧ aINV(as0) ↔ asn0 ∈ asn-s), aINV(as1), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(n0), as1), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ as0, m0. (as0, m0) ∈ asn-s ↔ as0 ∈ ass ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), ∀ as. t(csf(n0 + 1), as) ∧ aINV(as) ↔ as ∈ ass, ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦
Used terms: as0, n
| asn0 = (as0, n), ¬ (n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0) ∧ t(csf(n), as0) ∧ aINV(as0) ↔ asn0 ∈ asn-s), aINV(as1), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(n0), as1), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ as0, m0. (as0, m0) ∈ asn-s ↔ as0 ∈ ass ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), ∀ as. t(csf(n0 + 1), as) ∧ aINV(as) ↔ as ∈ ass, ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ |
¬ ( n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0) ∧ t(csf(n0 + 1), as0) ∧ aINV(as0) ↔ (as0, n) ∈ asn-s), aINV(as), aINV(as1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n0), as1), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ as. t(csf(n0 + 1), as) ∧ aINV(as) ↔ as ∈ ass, ∀ as0, m0. (as0, m0) ∈ asn-s ↔ as0 ∈ ass ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0) ⊦
| ¬ ( n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0) ∧ t(csf(n0 + 1), as0) ∧ aINV(as0) ↔ (as0, n) ∈ asn-s), aINV(as), aINV(as1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n0), as1), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ as. t(csf(n0 + 1), as) ∧ aINV(as) ↔ as ∈ ass, ∀ as0, m0. (as0, m0) ∈ asn-s ↔ as0 ∈ ass ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0) ⊦ |
(as0, n) ∈ asn-s ↔ as0 ∈ ass ∧ n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), ¬ ( n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0) ∧ t(csf(n0 + 1), as0) ∧ aINV(as0) ↔ (as0, n) ∈ asn-s), aINV(as1), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(n0), as1), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ as0, m0. (as0, m0) ∈ asn-s ↔ as0 ∈ ass ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), ∀ as. t(csf(n0 + 1), as) ∧ aINV(as) ↔ as ∈ ass, ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦
Used terms: as0, n
| (as0, n) ∈ asn-s ↔ as0 ∈ ass ∧ n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), ¬ ( n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0) ∧ t(csf(n0 + 1), as0) ∧ aINV(as0) ↔ (as0, n) ∈ asn-s), aINV(as1), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(n0), as1), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ as0, m0. (as0, m0) ∈ asn-s ↔ as0 ∈ ass ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), ∀ as. t(csf(n0 + 1), as) ∧ aINV(as) ↔ as ∈ ass, ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ |
¬ ( n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0) ∧ t(csf(n0 + 1), as0) ∧ aINV(as0) ↔ (as0, n) ∈ asn-s), aINV(as), aINV(as1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n0), as1), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ¬ (as0, n) ∈ asn-s, ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ as. t(csf(n0 + 1), as) ∧ aINV(as) ↔ as ∈ ass, ∀ as0, m0. (as0, m0) ∈ asn-s ↔ as0 ∈ ass ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0) ⊦ as0 ∈ ass ∧ n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0)
n = n0 + 1, ¬ ( n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0) ∧ t(csf(n0 + 1), as0) ∧ aINV(as0) ↔ (as0, n) ∈ asn-s), aINV(as), aINV(as1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n0), as1), t(csf(0), as), as0 ∈ ass, (as0, n) ∈ asn-s, ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ as. t(csf(n0 + 1), as) ∧ aINV(as) ↔ as ∈ ass, ∀ as0, m0. (as0, m0) ∈ asn-s ↔ as0 ∈ ass ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0) ⊦
| ¬ ( n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0) ∧ t(csf(n0 + 1), as0) ∧ aINV(as0) ↔ (as0, n) ∈ asn-s), aINV(as), aINV(as1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n0), as1), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ¬ (as0, n) ∈ asn-s, ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ as. t(csf(n0 + 1), as) ∧ aINV(as) ↔ as ∈ ass, ∀ as0, m0. (as0, m0) ∈ asn-s ↔ as0 ∈ ass ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0) ⊦ as0 ∈ ass ∧ n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0) |
aINV(as0), aINV(as), aINV(as1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n0 + 1), as0), t(csf(n0), as1), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ¬ as0 ∈ ass, ¬ (as0, n0 + 1) ∈ asn-s, ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ as. t(csf(n0 + 1), as) ∧ aINV(as) ↔ as ∈ ass, ∀ as0, m0. (as0, m0) ∈ asn-s ↔ as0 ∈ ass ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0) ⊦
| aINV(as0), aINV(as), aINV(as1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n0 + 1), as0), t(csf(n0), as1), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ¬ as0 ∈ ass, ¬ (as0, n0 + 1) ∈ asn-s, ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ as. t(csf(n0 + 1), as) ∧ aINV(as) ↔ as ∈ ass, ∀ as0, m0. (as0, m0) ∈ asn-s ↔ as0 ∈ ass ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0) ⊦ |
Used terms: as0
| n = n0 + 1, ¬ ( n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0) ∧ t(csf(n0 + 1), as0) ∧ aINV(as0) ↔ (as0, n) ∈ asn-s), aINV(as), aINV(as1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n0), as1), t(csf(0), as), as0 ∈ ass, (as0, n) ∈ asn-s, ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ as. t(csf(n0 + 1), as) ∧ aINV(as) ↔ as ∈ ass, ∀ as0, m0. (as0, m0) ∈ asn-s ↔ as0 ∈ ass ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0) ⊦ |
# ass ≠ 0, # asn-s ≠ 0, asn-s ≠ ∅, ass ≠ ∅, aINV(as), aINV(as1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n0), as1), t(csf(0), as), as0 ∈ ass, (as0, n0 + 1) ∈ asn-s, ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ as. t(csf(n0 + 1), as) ∧ aINV(as) ↔ as ∈ ass, ∀ as0, m0. (as0, m0) ∈ asn-s ↔ as0 ∈ ass ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0) ⊦ t(csf(n0 + 1), as0) ∧ aINV(as0)
Used simplifier rules: size-zero-01: ⊦ s ≠ ∅ → # s ≠ 0; (forward) from specification set-basic ne-01: ⊦ a ∈ s → s ≠ ∅; (forward) from specification set-basic
| # ass ≠ 0, # asn-s ≠ 0, asn-s ≠ ∅, ass ≠ ∅, aINV(as), aINV(as1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n0), as1), t(csf(0), as), as0 ∈ ass, (as0, n0 + 1) ∈ asn-s, ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ as. t(csf(n0 + 1), as) ∧ aINV(as) ↔ as ∈ ass, ∀ as0, m0. (as0, m0) ∈ asn-s ↔ as0 ∈ ass ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0) ⊦ t(csf(n0 + 1), as0) ∧ aINV(as0) |
(as0, n0 + 1) ∈ asn-s ↔ as0 ∈ ass ∧ n0 + 1 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), # ass ≠ 0, # asn-s ≠ 0, asn-s ≠ ∅, ass ≠ ∅, aINV(as1), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(0), as), t(csf(n0), as1), (as0, n0 + 1) ∈ asn-s, as0 ∈ ass, ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ as. t(csf(n0 + 1), as) ∧ aINV(as) ↔ as ∈ ass, ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ t(csf(n0 + 1), as0) ∧ aINV(as0)
Used terms: as0, n0 + 1
| (as0, n0 + 1) ∈ asn-s ↔ as0 ∈ ass ∧ n0 + 1 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), # ass ≠ 0, # asn-s ≠ 0, asn-s ≠ ∅, ass ≠ ∅, aINV(as1), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(0), as), t(csf(n0), as1), (as0, n0 + 1) ∈ asn-s, as0 ∈ ass, ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ as. t(csf(n0 + 1), as) ∧ aINV(as) ↔ as ∈ ass, ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ t(csf(n0 + 1), as0) ∧ aINV(as0) |
# ass ≠ 0, # asn-s ≠ 0, asn-s ≠ ∅, ass ≠ ∅, aINV(as), aINV(as1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n0), as1), t(csf(0), as), as0 ∈ ass, (as0, n0 + 1) ∈ asn-s, ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ as. t(csf(n0 + 1), as) ∧ aINV(as) ↔ as ∈ ass ⊦ t(csf(n0 + 1), as0) ∧ aINV(as0)
| # ass ≠ 0, # asn-s ≠ 0, asn-s ≠ ∅, ass ≠ ∅, aINV(as), aINV(as1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n0), as1), t(csf(0), as), as0 ∈ ass, (as0, n0 + 1) ∈ asn-s, ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ as. t(csf(n0 + 1), as) ∧ aINV(as) ↔ as ∈ ass ⊦ t(csf(n0 + 1), as0) ∧ aINV(as0) |
Used terms: as0
| aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n0), as1), t(csf(0), as), ¬ aINV(as1), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ as. t(csf(n0 + 1), as) ∧ aINV(as) ↔ as ∈ ass, ∀ as0, m0. (as0, m0) ∈ asn-s ↔ as0 ∈ ass ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0) ⊦ ∃ s. ∀ asn0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) ((as1, n0), asn0) ↔ asn0 ∈ s |
Used simplifier rules: ⊦ ¬ a ∈ ∅; (s) ⊦ edge(vs × es)(a, b) ↔ es(a, b) ∧ vs(a) ∧ vs(b); (ws) Used terms: ∅
| aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ t(csf(n0), as1), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ as0, m0. (as0, m0) ∈ asn-s ↔ as0 ∈ ass ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), ∀ as. t(csf(n0 + 1), as) ∧ aINV(as) ↔ as ∈ ass, ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ ∃ s. ∀ asn0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) ((as1, n0), asn0) ↔ asn0 ∈ s |
Used simplifier rules: ⊦ ¬ a ∈ ∅; (s) ⊦ edge(vs × es)(a, b) ↔ es(a, b) ∧ vs(a) ∧ vs(b); (ws) Used terms: ∅
| aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ as. t(csf(n0 + 1), as) ∧ aINV(as) ↔ as ∈ ass, ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ ∃ s. ∀ asn0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) ((as1, n0), asn0) ↔ asn0 ∈ s, ∃ asn-s. ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as) |
⊦ ∃ asn-s. ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as)
| ⊦ ∃ asn-s. ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as) |
⊦ ∃ asn-s. ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ∅ ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as)
∀ n0, astart, astep, aext, as1, cext, caf. ∃ asn-s. ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass0 ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as) ⊦ ∃ asn-s. ∀ as0, m0. (as0, m0) ∈ asn-s ↔ as0 ∈ ass0 ++ as ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as0)
Used simplifier rules: Set('a) generated by ∅, ++;;
| ⊦ ∃ asn-s. ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ∅ ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as) |
⊦ ∃ asn-s. ∀ as, n. ¬ (as, n) ∈ asn-s
Used simplifier rules: ⊦ ¬ a ∈ ∅; (s)
| ⊦ ∃ asn-s. ∀ as, n. ¬ (as, n) ∈ asn-s |
Used simplifier rules: ⊦ ¬ a ∈ ∅; (s) Used terms: ∅
| ∀ n0, astart, astep, aext, as1, cext, caf. ∃ asn-s. ∀ as, m0. (as, m0) ∈ asn-s ↔ as ∈ ass0 ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as) ⊦ ∃ asn-s. ∀ as0, m0. (as0, m0) ∈ asn-s ↔ as0 ∈ ass0 ++ as ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, cext !(caf(n0) '), as0) |
∀ n, astart0, astep0, aext0, as0, cext0, caf0. ∃ asn-s. ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart0, astep0, aext0))(as0, (cext0(caf0(n)) = None ⊃ [];cext0(caf0(n)).get '), as2) ⊦ ∃ asn-s. ∀ as0, n. (as0, n) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0)
Used simplifier rules: ⊦ ext !(a ') = (ext(a) = None ⊃ [];ext(a).get '); (s) ⊦ a ∈ s ++ b ↔ a = b ∨ a ∈ s; (s)
| ∀ n, astart0, astep0, aext0, as0, cext0, caf0. ∃ asn-s. ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n + 1 ∧ move(IOAut(astart0, astep0, aext0))(as0, (cext0(caf0(n)) = None ⊃ [];cext0(caf0(n)).get '), as2) ⊦ ∃ asn-s. ∀ as0, n. (as0, n) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0) |
∃ asn-s. ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2) ⊦ ∃ asn-s. ∀ as0, n. (as0, n) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0)
Used terms: n0, astart, astep, aext, as1, cext, caf
| ∃ asn-s. ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2) ⊦ ∃ asn-s. ∀ as0, n. (as0, n) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0) |
∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2) ⊦ ∃ asn-s. ∀ as0, n. (as0, n) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0)
| ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2) ⊦ ∃ asn-s. ∀ as0, n. (as0, n) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0) |
∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2) ⊦ ∀ as0, n. (as0, n) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), ∃ asn-s. ∀ as0, n. (as0, n) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0)
Used terms: asn-s
| ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2) ⊦ ∀ as0, n. (as0, n) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), ∃ asn-s. ∀ as0, n. (as0, n) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0) |
¬ ((as0, n) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0)), ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2) ⊦ ∃ asn-s. ∀ as0, n. (as0, n) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0)
| ¬ ((as0, n) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0)), ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2) ⊦ ∃ asn-s. ∀ as0, n. (as0, n) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0) |
¬ ((as0, n) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0)), ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2) ⊦ ∀ as0, n. (as0, n) ∈ asn-s ++ (as, n0 + 1) ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0)
Used terms: asn-s ++ (as, n0 + 1)
| ¬ ((as0, n) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0)), ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2) ⊦ ∀ as0, n. (as0, n) ∈ asn-s ++ (as, n0 + 1) ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0) |
¬ ((as0, n) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0)), ¬ ( (as2, n1) = (as, n0 + 1) ∨ (as2, n1) ∈ asn-s ↔ (as2 = as ∨ as2 ∈ ass0) ∧ n1 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2)), ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2) ⊦
Used simplifier rules: ⊦ a ∈ s ++ b ↔ a = b ∨ a ∈ s; (s)
| ¬ ((as0, n) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0)), ¬ ( (as2, n1) = (as, n0 + 1) ∨ (as2, n1) ∈ asn-s ↔ (as2 = as ∨ as2 ∈ ass0) ∧ n1 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2)), ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2) ⊦ |
¬ ((as0, n) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0)), ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2), (as2, n1) = (as, n0 + 1) ∨ (as2, n1) ∈ asn-s ⊦ (as2 = as ∨ as2 ∈ ass0) ∧ n1 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2)
n1 = n0 + 1, (as2, n1) ≠ (as, n0 + 1), ¬ ((as0, n) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0)), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2), ¬ (as2, n1) ∈ asn-s, ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2), as2 = as ∨ as2 ∈ ass0 ⊦
| ¬ ((as0, n) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0)), ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2), (as2, n1) = (as, n0 + 1) ∨ (as2, n1) ∈ asn-s ⊦ (as2 = as ∨ as2 ∈ ass0) ∧ n1 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2) |
(as2, n1) = (as, n0 + 1), ¬ ((as0, n) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0)), ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2) ⊦ (as2 = as ∨ as2 ∈ ass0) ∧ n1 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2)
¬ ((as0, n) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0)), (as2, n1) ∈ asn-s, ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2) ⊦ (as2 = as ∨ as2 ∈ ass0) ∧ n1 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2)
| (as2, n1) = (as, n0 + 1), ¬ ((as0, n) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0)), ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2) ⊦ (as2 = as ∨ as2 ∈ ass0) ∧ n1 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2) |
¬((as0, n) ∈ asn-s ↔ as0 ∈ ass0 ∧ n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0)), ¬ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as), ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2) ⊦
| ¬((as0, n) ∈ asn-s ↔ as0 ∈ ass0 ∧ n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0)), ¬ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as), ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2) ⊦ |
(as0, n) ∈ asn-s, ¬ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as), ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2) ⊦ as0 ∈ ass0 ∧ n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0)
n = n0 + 1, move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), as0 ∈ ass0, ¬ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as), ¬ (as0, n) ∈ asn-s, ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2) ⊦
| (as0, n) ∈ asn-s, ¬ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as), ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2) ⊦ as0 ∈ ass0 ∧ n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0) |
# asn-s ≠ 0, asn-s ≠ ∅, (as0, n) ∈ asn-s, ¬ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as), ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2) ⊦ as0 ∈ ass0 ∧ n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0)
Used simplifier rules: size-zero-01: ⊦ s ≠ ∅ → # s ≠ 0; (forward) from specification set-basic ne-01: ⊦ a ∈ s → s ≠ ∅; (forward) from specification set-basic
| # asn-s ≠ 0, asn-s ≠ ∅, (as0, n) ∈ asn-s, ¬ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as), ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2) ⊦ as0 ∈ ass0 ∧ n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0) |
Used terms: as0, n
| n = n0 + 1, move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), as0 ∈ ass0, ¬ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as), ¬ (as0, n) ∈ asn-s, ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2) ⊦ |
# ass0 ≠ 0, ass0 ≠ ∅, move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), as0 ∈ ass0, ¬ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as), ¬ (as0, n0 + 1) ∈ asn-s, ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2) ⊦
Used simplifier rules: size-zero-01: ⊦ s ≠ ∅ → # s ≠ 0; (forward) from specification set-basic ne-01: ⊦ a ∈ s → s ≠ ∅; (forward) from specification set-basic
| # ass0 ≠ 0, ass0 ≠ ∅, move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), as0 ∈ ass0, ¬ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as), ¬ (as0, n0 + 1) ∈ asn-s, ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2) ⊦ |
Used terms: as0, n0 + 1
| ¬ ((as0, n) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0)), (as2, n1) ∈ asn-s, ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2) ⊦ (as2 = as ∨ as2 ∈ ass0) ∧ n1 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2) |
# asn-s ≠ 0, ¬ ((as0, n) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0)), asn-s ≠ ∅, (as2, n1) ∈ asn-s, ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2) ⊦ (as2 = as ∨ as2 ∈ ass0) ∧ n1 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2)
Used simplifier rules: size-zero-01: ⊦ s ≠ ∅ → # s ≠ 0; (forward) from specification set-basic ne-01: ⊦ a ∈ s → s ≠ ∅; (forward) from specification set-basic
| # asn-s ≠ 0, ¬ ((as0, n) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0)), asn-s ≠ ∅, (as2, n1) ∈ asn-s, ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2) ⊦ (as2 = as ∨ as2 ∈ ass0) ∧ n1 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2) |
# asn-s ≠ 0, asn-s ≠ ∅, (as2, n1) ∈ asn-s, (as0, n) ∈ asn-s, ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2) ⊦ (as2 = as ∨ as2 ∈ ass0) ∧ n1 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2), (as0 = as ∨ as0 ∈ ass0) ∧ n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0)
n = n0 + 1, # asn-s ≠ 0, asn-s ≠ ∅, move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), (as2, n1) ∈ asn-s, ¬ (as0, n) ∈ asn-s, ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2), as0 = as ∨ as0 ∈ ass0 ⊦ (as2 = as ∨ as2 ∈ ass0) ∧ n1 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2)
| # asn-s ≠ 0, asn-s ≠ ∅, (as2, n1) ∈ asn-s, (as0, n) ∈ asn-s, ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2) ⊦ (as2 = as ∨ as2 ∈ ass0) ∧ n1 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2), (as0 = as ∨ as0 ∈ ass0) ∧ n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0) |
Used terms: as0, n
| n = n0 + 1, # asn-s ≠ 0, asn-s ≠ ∅, move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), (as2, n1) ∈ asn-s, ¬ (as0, n) ∈ asn-s, ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2), as0 = as ∨ as0 ∈ ass0 ⊦ (as2 = as ∨ as2 ∈ ass0) ∧ n1 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2) |
# asn-s ≠ 0, asn-s ≠ ∅, move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), (as2, n1) ∈ asn-s, ¬ (as0, n0 + 1) ∈ asn-s, ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2), as0 = as ∨ as0 ∈ ass0 ⊦ (as2 = as ∨ as2 ∈ ass0) ∧ n1 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2)
| # asn-s ≠ 0, asn-s ≠ ∅, move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), (as2, n1) ∈ asn-s, ¬ (as0, n0 + 1) ∈ asn-s, ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2), as0 = as ∨ as0 ∈ ass0 ⊦ (as2 = as ∨ as2 ∈ ass0) ∧ n1 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2) |
Used terms: as2, n1
| n1 = n0 + 1, (as2, n1) ≠ (as, n0 + 1), ¬ ((as0, n) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0)), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2), ¬ (as2, n1) ∈ asn-s, ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2), as2 = as ∨ as2 ∈ ass0 ⊦ |
# ass0 ≠ 0, ¬ ((as0, n) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0)), as2 ≠ as, ass0 ≠ ∅, move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2), as2 ∈ ass0, ¬ (as2, n0 + 1) ∈ asn-s, ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2) ⊦
Used simplifier rules: size-zero-01: ⊦ s ≠ ∅ → # s ≠ 0; (forward) from specification set-basic ne-01: ⊦ a ∈ s → s ≠ ∅; (forward) from specification set-basic
| # ass0 ≠ 0, ¬ ((as0, n) ∈ asn-s ↔ (as0 = as ∨ as0 ∈ ass0) ∧ n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0)), as2 ≠ as, ass0 ≠ ∅, move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2), as2 ∈ ass0, ¬ (as2, n0 + 1) ∈ asn-s, ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2) ⊦ |
# ass0 ≠ 0, as2 ≠ as, ass0 ≠ ∅, move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2), as2 ∈ ass0, (as0, n) ∈ asn-s, ¬ (as2, n0 + 1) ∈ asn-s, ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2) ⊦ (as0 = as ∨ as0 ∈ ass0) ∧ n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0)
n = n0 + 1, # ass0 ≠ 0, as2 ≠ as, ass0 ≠ ∅, move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), as2 ∈ ass0, ¬ (as0, n) ∈ asn-s, ¬ (as2, n0 + 1) ∈ asn-s, ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2), as0 = as ∨ as0 ∈ ass0 ⊦
| # ass0 ≠ 0, as2 ≠ as, ass0 ≠ ∅, move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2), as2 ∈ ass0, (as0, n) ∈ asn-s, ¬ (as2, n0 + 1) ∈ asn-s, ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2) ⊦ (as0 = as ∨ as0 ∈ ass0) ∧ n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0) |
# ass0 ≠ 0, # asn-s ≠ 0, as2 ≠ as, asn-s ≠ ∅, ass0 ≠ ∅, move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2), as2 ∈ ass0, (as0, n) ∈ asn-s, ¬ (as2, n0 + 1) ∈ asn-s, ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2) ⊦ (as0 = as ∨ as0 ∈ ass0) ∧ n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0)
Used simplifier rules: size-zero-01: ⊦ s ≠ ∅ → # s ≠ 0; (forward) from specification set-basic ne-01: ⊦ a ∈ s → s ≠ ∅; (forward) from specification set-basic
| # ass0 ≠ 0, # asn-s ≠ 0, as2 ≠ as, asn-s ≠ ∅, ass0 ≠ ∅, move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2), as2 ∈ ass0, (as0, n) ∈ asn-s, ¬ (as2, n0 + 1) ∈ asn-s, ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2) ⊦ (as0 = as ∨ as0 ∈ ass0) ∧ n = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0) |
Used terms: as2, n0 + 1
| n = n0 + 1, # ass0 ≠ 0, as2 ≠ as, ass0 ≠ ∅, move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), as2 ∈ ass0, ¬ (as0, n) ∈ asn-s, ¬ (as2, n0 + 1) ∈ asn-s, ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2), as0 = as ∨ as0 ∈ ass0 ⊦ |
# ass0 ≠ 0, as2 ≠ as, ass0 ≠ ∅, move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2), as2 ∈ ass0, ¬ (as0, n0 + 1) ∈ asn-s, ¬ (as2, n0 + 1) ∈ asn-s, ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2), as0 = as ∨ as0 ∈ ass0 ⊦
| # ass0 ≠ 0, as2 ≠ as, ass0 ≠ ∅, move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2), as2 ∈ ass0, ¬ (as0, n0 + 1) ∈ asn-s, ¬ (as2, n0 + 1) ∈ asn-s, ∀ as2, m0. (as2, m0) ∈ asn-s ↔ as2 ∈ ass0 ∧ m0 = n0 + 1 ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2), as0 = as ∨ as0 ∈ ass0 ⊦ |
Used terms: as2, n0 + 1
| aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ allreachable ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ |
⊦ allreachable(g) ↔ (∀ b. dom(g)(b) → (∃ a. isroot(g)(a) ∧ path(g)(a, b)))
aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∃ b. ¬ ( dom ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (b) → (∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, b))) ⊦
Used terms: (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))
| ⊦ allreachable(g) ↔ (∀ b. dom(g)(b) → (∃ a. isroot(g)(a) ∧ path(g)(a, b))) |
| aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∃ b. ¬ ( dom ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (b) → (∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (a, b))) ⊦ |
aINV(as), aINV(asn._1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(asn._2), asn._1), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a, asn)
Used simplifier rules: ⊦ ext !(a ') = (ext(a) = None ⊃ [];ext(a).get '); (s) ⊦ dom(vs × es) = vs; (s)
| aINV(as), aINV(asn._1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(asn._2), asn._1), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a, asn) |
asn = (as0, n), aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n), as0), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a, asn)
Used terms: as0, n
| asn = (as0, n), aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n), as0), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a, asn) |
aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(n), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a, (as0, n))
| aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(n), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a, (as0, n)) |
aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as0), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a, (as0, 0))
aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n0 +1), as0), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ aINV, as, as0, cINV, csf, cstart, cstep, cext, caf, t, astart, astep, aext. aINV(as) ∧ aINV(as0) ∧ cINV(csf(0)) ∧ cstart(csf(0)) ∧ fragω(IOAut(cstart, cstep, cext))(csf, caf) ∧ t(csf(0), as) ∧ t(csf(n0), as0) ∧ ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )) ∧ (∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass)) ∧ (∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as))) ∧ (∀ n. cINV(csf(n))) → (∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a, (as0, n0))) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a, (as0, n0 +1))
Used simplifier rules: Nat freely generated by 0, +1;;
| aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as0), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a, (as0, 0)) |
aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(0), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((as0, 0)) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((as0, 0), (as0, 0))
Used terms: (as0, 0)
| aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(0), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((as0, 0)) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((as0, 0), (as0, 0)) |
aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as0), t(csf(0), as), ¬ isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((as0, 0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) ⊦
aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as0), t(csf(0), as), ¬ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((as0, 0), (as0, 0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) ⊦
| aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as0), t(csf(0), as), ¬ isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((as0, 0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) ⊦ |
⊦ isroot(g)(b) ↔ dom(g)(b) ∧ (∀ a. ¬ edge(g)(a, b))
Used simplifier rules: ⊦ dom(vs × es) = vs; (s) ⊦ edge(vs × es)(a, b) ↔ es(a, b) ∧ vs(a) ∧ vs(b); (ws) ⊦ m + 1 ≠ 0; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext)) (asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1)), (as0, 0)
| ⊦ isroot(g)(b) ↔ dom(g)(b) ∧ (∀ a. ¬ edge(g)(a, b)) |
| aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as0), t(csf(0), as), ¬ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((as0, 0), (as0, 0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) ⊦ |
⊦ path(g)(a, b) ↔ (∃ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ a = x.head ∧ b = x.last)
aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(0), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∀ x. ¬ ( pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (⌜x⌝ ) ∧ x ≠ [] ∧ (as0, 0) = x.head ∧ (as0, 0) = x.last) ⊦
Used terms: (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext)) (asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1)), (as0, 0), (as0, 0)
| ⊦ path(g)(a, b) ↔ (∃ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ a = x.head ∧ b = x.last) |
| aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(0), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∀ x. ¬ ( pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (⌜x⌝ ) ∧ x ≠ [] ∧ (as0, 0) = x.head ∧ (as0, 0) = x.last) ⊦ |
aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as0), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ x. ¬ pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (⌜x⌝ ) ∨ x = [] ∨ (as0, 0) ≠ x.head ∨ (as0, 0) ≠ x.last ⊦
| aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as0), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ x. ¬ pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (⌜x⌝ ) ∨ x = [] ∨ (as0, 0) ≠ x.head ∨ (as0, 0) ≠ x.last ⊦ |
aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(0), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ¬ pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (⌜(as0, 0) '⌝ ) ∨ (as0, 0) ' = [] ∨ (as0, 0) ≠ (as0, 0) '.head ∨ (as0, 0) ≠ (as0, 0) '.last ⊦
Used terms: (as0, 0) '
| aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(0), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ¬ pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (⌜(as0, 0) '⌝ ) ∨ (as0, 0) ' = [] ∨ (as0, 0) ≠ (as0, 0) '.head ∨ (as0, 0) ≠ (as0, 0) '.last ⊦ |
aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as0), t(csf(0), as), ¬ pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (⌜(as0, 0) '⌝ ), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) ⊦
Used simplifier rules: ⊦ a '.last = a; (s) ⊦ a '.head = a; (s) ⊦ a ' ≠ []; (s)
| aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as0), t(csf(0), as), ¬ pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (⌜(as0, 0) '⌝ ), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) ⊦ |
⊦ pathp(g)(σ) ↔ (∀ n. ⌜n⌝ < # σ → dom(g)(σ[n])) ∧ (∀ n. ⌜n + 1⌝ < # σ → edge(g)(σ[n], σ[n + 1]))
Used simplifier rules: ⊦ m < 1 ↔ m = 0; (s) ⊦ ⌜x⌝ [n] = x[n]; (s) ⊦ a '[0] = a; (s) ⊦ dom(vs × es) = vs; (s) ⊦ ⌜m + n⌝ = ⌜m⌝ + ⌜n⌝ ; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ # a ' = 0 +1; (s) ⊦ m ≤ n → (⌜(* m)⌝ + n∞2 < ⌜(* n)⌝ ↔ n∞2 < ⌜n - m⌝ ); (s) ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ ¬ n < 0; (s) add-assoc: ⊦ (n∞ + n∞1) + n∞2 = n∞ + n∞1 + n∞2; from specification nat-inf add-comm: ⊦ n∞1 + n∞2 = n∞2 + n∞1; from specification nat-inf Used terms: (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext)) (asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1)), ⌜(as0, 0) '⌝
| ⊦ pathp(g)(σ) ↔ (∀ n. ⌜n⌝ < # σ → dom(g)(σ[n])) ∧ (∀ n. ⌜n + 1⌝ < # σ → edge(g)(σ[n], σ[n + 1])) |
| aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n0 +1), as0), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ aINV, as, as0, cINV, csf, cstart, cstep, cext, caf, t, astart, astep, aext. aINV(as) ∧ aINV(as0) ∧ cINV(csf(0)) ∧ cstart(csf(0)) ∧ fragω(IOAut(cstart, cstep, cext))(csf, caf) ∧ t(csf(0), as) ∧ t(csf(n0), as0) ∧ ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )) ∧ (∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass)) ∧ (∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as))) ∧ (∀ n. cINV(csf(n))) → (∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a, (as0, n0))) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a, (as0, n0 +1)) |
aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(n0 + 1), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ aINV, as, as0, cINV, csf, cstart, cstep, cext, caf, t, astart, astep, aext. aINV(as) ∧ aINV(as0) ∧ cINV(csf(0)) ∧ cstart(csf(0)) ∧ fragω(IOAut(cstart, cstep, cext))(csf, caf) ∧ t(csf(0), as) ∧ t(csf(n0), as0) ∧ ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )) ∧ (∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass)) ∧ (∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as))) ∧ (∀ n. cINV(csf(n))) → (∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a, (as0, n0))), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a, (as0, n0 + 1))
Used simplifier rules: ⊦ m +1 = m + 1; (s)
| aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(n0 + 1), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ aINV, as, as0, cINV, csf, cstart, cstep, cext, caf, t, astart, astep, aext. aINV(as) ∧ aINV(as0) ∧ cINV(csf(0)) ∧ cstart(csf(0)) ∧ fragω(IOAut(cstart, cstep, cext))(csf, caf) ∧ t(csf(0), as) ∧ t(csf(n0), as0) ∧ ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )) ∧ (∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass)) ∧ (∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as))) ∧ (∀ n. cINV(csf(n))) → (∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a, (as0, n0))), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a, (as0, n0 + 1)) |
aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n0 + 1), as0), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), cINV(csf(n0)) ∧ cstep(csf(n0), caf(n0), csf(n0 + 1)) ∧ t(csf(n0 + 1), as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0) ∧ t(csf(n0), as)), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ aINV, as, as0, cINV, csf, cstart, cstep, cext, caf, t, astart, astep, aext. aINV(as) ∧ aINV(as0) ∧ cINV(csf(0)) ∧ cstart(csf(0)) ∧ fragω(IOAut(cstart, cstep, cext))(csf, caf) ∧ t(csf(0), as) ∧ t(csf(n0), as0) ∧ ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )) ∧ (∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass)) ∧ (∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as))) ∧ (∀ n. cINV(csf(n))) → (∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a, (as0, n0))) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a, (as0, n0 + 1))
Used terms: csf(n0), caf(n0), csf(n0 + 1), as0
| aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n0 + 1), as0), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), cINV(csf(n0)) ∧ cstep(csf(n0), caf(n0), csf(n0 + 1)) ∧ t(csf(n0 + 1), as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0) ∧ t(csf(n0), as)), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ aINV, as, as0, cINV, csf, cstart, cstep, cext, caf, t, astart, astep, aext. aINV(as) ∧ aINV(as0) ∧ cINV(csf(0)) ∧ cstart(csf(0)) ∧ fragω(IOAut(cstart, cstep, cext))(csf, caf) ∧ t(csf(0), as) ∧ t(csf(n0), as0) ∧ ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )) ∧ (∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass)) ∧ (∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as))) ∧ (∀ n. cINV(csf(n))) → (∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a, (as0, n0))) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a, (as0, n0 + 1)) |
aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(n0 + 1), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), cINV(csf(n0)) ∧ cstep(csf(n0), caf(n0), csf(n0 + 1)) → aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0) ∧ t(csf(n0), as1), ∀ aINV, as, as0, cINV, csf, cstart, cstep, cext, caf, t, astart, astep, aext. aINV(as) ∧ aINV(as0) ∧ cINV(csf(0)) ∧ cstart(csf(0)) ∧ fragω(IOAut(cstart, cstep, cext))(csf, caf) ∧ t(csf(0), as) ∧ t(csf(n0), as0) ∧ ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )) ∧ (∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass)) ∧ (∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as))) ∧ (∀ n. cINV(csf(n))) → (∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a, (as0, n0))), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a, (as0, n0 + 1))
| aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(n0 + 1), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), cINV(csf(n0)) ∧ cstep(csf(n0), caf(n0), csf(n0 + 1)) → aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0) ∧ t(csf(n0), as1), ∀ aINV, as, as0, cINV, csf, cstart, cstep, cext, caf, t, astart, astep, aext. aINV(as) ∧ aINV(as0) ∧ cINV(csf(0)) ∧ cstart(csf(0)) ∧ fragω(IOAut(cstart, cstep, cext))(csf, caf) ∧ t(csf(0), as) ∧ t(csf(n0), as0) ∧ ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )) ∧ (∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass)) ∧ (∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as))) ∧ (∀ n. cINV(csf(n))) → (∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a, (as0, n0))), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a, (as0, n0 + 1)) |
aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n0 + 1), as0), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ aINV, as, as0, cINV, csf, cstart, cstep, cext, caf, t, astart, astep, aext. aINV(as) ∧ aINV(as0) ∧ cINV(csf(0)) ∧ cstart(csf(0)) ∧ fragω(IOAut(cstart, cstep, cext))(csf, caf) ∧ t(csf(0), as) ∧ t(csf(n0), as0) ∧ ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )) ∧ (∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass)) ∧ (∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as))) ∧ (∀ n. cINV(csf(n))) → (∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a, (as0, n0))) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a, (as0, n0 + 1)), cINV(csf(n0)) ∧ cstep(csf(n0), caf(n0), csf(n0 + 1))
aINV(as0), aINV(as), aINV(as1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n0 + 1), as0), t(csf(0), as), t(csf(n0), as1), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ aINV, as, as0, cINV, csf, cstart, cstep, cext, caf, t, astart, astep, aext. aINV(as) ∧ aINV(as0) ∧ cINV(csf(0)) ∧ cstart(csf(0)) ∧ fragω(IOAut(cstart, cstep, cext))(csf, caf) ∧ t(csf(0), as) ∧ t(csf(n0), as0) ∧ ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )) ∧ (∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass)) ∧ (∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as))) ∧ (∀ n. cINV(csf(n))) → (∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a, (as0, n0))) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a, (as0, n0 + 1))
| aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n0 + 1), as0), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ aINV, as, as0, cINV, csf, cstart, cstep, cext, caf, t, astart, astep, aext. aINV(as) ∧ aINV(as0) ∧ cINV(csf(0)) ∧ cstart(csf(0)) ∧ fragω(IOAut(cstart, cstep, cext))(csf, caf) ∧ t(csf(0), as) ∧ t(csf(n0), as0) ∧ ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )) ∧ (∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass)) ∧ (∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as))) ∧ (∀ n. cINV(csf(n))) → (∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a, (as0, n0))) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a, (as0, n0 + 1)), cINV(csf(n0)) ∧ cstep(csf(n0), caf(n0), csf(n0 + 1)) |
aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n0 + 1), as0), t(csf(0), as), ¬ cINV(csf(n0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ aINV, as, as0, cINV, csf, cstart, cstep, cext, caf, t, astart, astep, aext. aINV(as) ∧ aINV(as0) ∧ cINV(csf(0)) ∧ cstart(csf(0)) ∧ fragω(IOAut(cstart, cstep, cext))(csf, caf) ∧ t(csf(0), as) ∧ t(csf(n0), as0) ∧ ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )) ∧ (∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass)) ∧ (∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as))) ∧ (∀ n. cINV(csf(n))) → (∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a, (as0, n0))) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a, (as0, n0 + 1))
Used simplifier rules: ⊦ ¬ step(sf(n), af(n), sf(n + 1)) → (fragω(IOAut(start, step, ext))(sf, af) ↔ false); (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic
| aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), cstep(csf(n0), caf(n0), csf(n0 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n0 + 1), as0), t(csf(0), as), ¬ cINV(csf(n0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ aINV, as, as0, cINV, csf, cstart, cstep, cext, caf, t, astart, astep, aext. aINV(as) ∧ aINV(as0) ∧ cINV(csf(0)) ∧ cstart(csf(0)) ∧ fragω(IOAut(cstart, cstep, cext))(csf, caf) ∧ t(csf(0), as) ∧ t(csf(n0), as0) ∧ ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )) ∧ (∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass)) ∧ (∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as))) ∧ (∀ n. cINV(csf(n))) → (∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a, (as0, n0))) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a, (as0, n0 + 1)) |
Used terms: n0
| aINV(as0), aINV(as), aINV(as1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n0 + 1), as0), t(csf(0), as), t(csf(n0), as1), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ aINV, as, as0, cINV, csf, cstart, cstep, cext, caf, t, astart, astep, aext. aINV(as) ∧ aINV(as0) ∧ cINV(csf(0)) ∧ cstart(csf(0)) ∧ fragω(IOAut(cstart, cstep, cext))(csf, caf) ∧ t(csf(0), as) ∧ t(csf(n0), as0) ∧ ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )) ∧ (∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass)) ∧ (∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as))) ∧ (∀ n. cINV(csf(n))) → (∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a, (as0, n0))) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a, (as0, n0 + 1)) |
aINV(as1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n0), as1), t(csf(0), as), t(csf(n0 + 1), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), aINV(as) ∧ aINV(as1) ∧ cINV(csf(0)) ∧ cstart(csf(0)) ∧ fragω(IOAut(cstart, cstep, cext))(csf, caf) ∧ t(csf(0), as) ∧ t(csf(n0), as1) ∧ ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )) ∧ (∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass)) ∧ (∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as))) ∧ (∀ n. cINV(csf(n))) → (∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a, (as1, n0))), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a, (as0, n0 + 1))
Used terms: aINV, as, as1, cINV, csf, cstart, cstep, cext, caf, t, astart, astep, aext
| aINV(as1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n0), as1), t(csf(0), as), t(csf(n0 + 1), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), aINV(as) ∧ aINV(as1) ∧ cINV(csf(0)) ∧ cstart(csf(0)) ∧ fragω(IOAut(cstart, cstep, cext))(csf, caf) ∧ t(csf(0), as) ∧ t(csf(n0), as1) ∧ ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )) ∧ (∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass)) ∧ (∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as))) ∧ (∀ n. cINV(csf(n))) → (∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a, (as1, n0))), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a, (as0, n0 + 1)) |
aINV(as0), aINV(as), aINV(as1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn, (as1, n0)), t(csf(n0 + 1), as0), t(csf(0), as), t(csf(n0), as1), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a, (as0, n0 + 1))
| aINV(as0), aINV(as), aINV(as1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn, (as1, n0)), t(csf(n0 + 1), as0), t(csf(0), as), t(csf(n0), as1), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) ⊦ ∃ a. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (a, (as0, n0 + 1)) |
aINV(as1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn, (as1, n0)), t(csf(n0), as1), t(csf(0), as), t(csf(n0 + 1), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn, (as0, n0 + 1))
Used terms: asn
| aINV(as1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn, (as1, n0)), t(csf(n0), as1), t(csf(0), as), t(csf(n0 + 1), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn) ∧ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn, (as0, n0 + 1)) |
aINV(as0), aINV(as), aINV(as1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn, (as1, n0)), t(csf(n0 + 1), as0), t(csf(0), as), t(csf(n0), as1), ¬ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn, (as0, n0 + 1)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) ⊦
| aINV(as0), aINV(as), aINV(as1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn, (as1, n0)), t(csf(n0 + 1), as0), t(csf(0), as), t(csf(n0), as1), ¬ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn, (as0, n0 + 1)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) ⊦ |
⊦ path(g)(a, b) ↔ (∃ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ a = x.head ∧ b = x.last)
aINV(as1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n0), as1), t(csf(0), as), t(csf(n0 + 1), as0), ¬ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn, (as0, n0 + 1)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∃ x. pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (⌜x⌝ ) ∧ x ≠ [] ∧ asn = x.head ∧ (as1, n0) = x.last ⊦
Used terms: (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext)) (asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1)), asn, (as1, n0)
| ⊦ path(g)(a, b) ↔ (∃ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ a = x.head ∧ b = x.last) |
| aINV(as1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n0), as1), t(csf(0), as), t(csf(n0 + 1), as0), ¬ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn, (as0, n0 + 1)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∃ x. pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (⌜x⌝ ) ∧ x ≠ [] ∧ asn = x.head ∧ (as1, n0) = x.last ⊦ |
(as1, n0) = x.last, x ≠ [], aINV(as0), aINV(as), aINV(as1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (x.head), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (⌜x⌝ ), t(csf(n0 + 1), as0), t(csf(0), as), t(csf(n0), as1), ¬ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (x.head, (as0, n0 + 1)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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, n0) = x.last, x ≠ [], aINV(as0), aINV(as), aINV(as1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (x.head), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (⌜x⌝ ), t(csf(n0 + 1), as0), t(csf(0), as), t(csf(n0), as1), ¬ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (x.head, (as0, n0 + 1)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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, n0) = x.last, x = asn2 + x0, x ≠ [], aINV(as1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (⌜x⌝ ), t(csf(n0), as1), t(csf(0), as), t(csf(n0 + 1), as0), ¬ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2, (as0, n0 + 1)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦
Used simplifier rules: ⊦ x ≠ [] → (head = x.head ∧ tail = x.tail ↔ x = head + tail); (elim) Used terms: x, asn2, x0
| (as1, n0) = x.last, x = asn2 + x0, x ≠ [], aINV(as1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (⌜x⌝ ), t(csf(n0), as1), t(csf(0), as), t(csf(n0 + 1), as0), ¬ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2, (as0, n0 + 1)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ |
(as1, n0) = (asn2 ' + x0).last, aINV(as0), aINV(as), aINV(as1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (⌜asn2 '⌝ + ⌜x0⌝ ), t(csf(n0 + 1), as0), t(csf(0), as), t(csf(n0), as1), ¬ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2, (as0, n0 + 1)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ⌜x + y⌝ = ⌜x⌝ + ⌜y⌝ ; (s) ⊦ a + x = a ' + x; (s) ⊦ a ' ≠ []; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s)
| (as1, n0) = (asn2 ' + x0).last, aINV(as0), aINV(as), aINV(as1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (⌜asn2 '⌝ + ⌜x0⌝ ), t(csf(n0 + 1), as0), t(csf(0), as), t(csf(n0), as1), ¬ path ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2, (as0, n0 + 1)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) ⊦ |
⊦ path(g)(a, b) ↔ (∃ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ a = x.head ∧ b = x.last)
(as1, n0) = (asn2 ' + x0).last, aINV(as1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (⌜asn2 '⌝ + ⌜x0⌝ ), t(csf(n0), as1), t(csf(0), as), t(csf(n0 + 1), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∀ x. ¬ ( pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (⌜x⌝ ) ∧ x ≠ [] ∧ asn2 = x.head ∧ (as0, n0 + 1) = x.last) ⊦
Used terms: (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext)) (asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1)), asn2, (as0, n0 + 1)
| ⊦ path(g)(a, b) ↔ (∃ x. pathp(g)(⌜x⌝ ) ∧ x ≠ [] ∧ a = x.head ∧ b = x.last) |
| (as1, n0) = (asn2 ' + x0).last, aINV(as1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (⌜asn2 '⌝ + ⌜x0⌝ ), t(csf(n0), as1), t(csf(0), as), t(csf(n0 + 1), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∀ x. ¬ ( pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (⌜x⌝ ) ∧ x ≠ [] ∧ asn2 = x.head ∧ (as0, n0 + 1) = x.last) ⊦ |
(as1, n0) = (asn2 ' + x0).last, aINV(as0), aINV(as), aINV(as1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (⌜asn2 '⌝ + ⌜x0⌝ ), t(csf(n0 + 1), as0), t(csf(0), as), t(csf(n0), as1), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ x. ¬ pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (⌜x⌝ ) ∨ x = [] ∨ asn2 ≠ x.head ∨ (as0, n0 + 1) ≠ x.last ⊦
| (as1, n0) = (asn2 ' + x0).last, aINV(as0), aINV(as), aINV(as1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (⌜asn2 '⌝ + ⌜x0⌝ ), t(csf(n0 + 1), as0), t(csf(0), as), t(csf(n0), as1), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ x. ¬ pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (⌜x⌝ ) ∨ x = [] ∨ asn2 ≠ x.head ∨ (as0, n0 + 1) ≠ x.last ⊦ |
(as1, n0) = (asn2 ' + x0).last, aINV(as1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (⌜asn2 '⌝ + ⌜x0⌝ ), t(csf(n0), as1), t(csf(0), as), t(csf(n0 + 1), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ¬ pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (⌜asn2 ' + x0 + (as0, n0 + 1) '⌝ ) ∨ asn2 ' + x0 + (as0, n0 + 1) ' = [] ∨ asn2 ≠ (asn2 ' + x0 + (as0, n0 + 1) ').head ∨ (as0, n0 + 1) ≠ (asn2 ' + x0 + (as0, n0 + 1) ').last ⊦
Used terms: asn2 ' + x0 + (as0, n0 + 1) '
| (as1, n0) = (asn2 ' + x0).last, aINV(as1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (⌜asn2 '⌝ + ⌜x0⌝ ), t(csf(n0), as1), t(csf(0), as), t(csf(n0 + 1), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ¬ pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (⌜asn2 ' + x0 + (as0, n0 + 1) '⌝ ) ∨ asn2 ' + x0 + (as0, n0 + 1) ' = [] ∨ asn2 ≠ (asn2 ' + x0 + (as0, n0 + 1) ').head ∨ (as0, n0 + 1) ≠ (asn2 ' + x0 + (as0, n0 + 1) ').last ⊦ |
(as1, n0) = (asn2 ' + x0).last, aINV(as0), aINV(as), aINV(as1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (⌜asn2 '⌝ + ⌜x0⌝ ), t(csf(n0 + 1), as0), t(csf(0), as), t(csf(n0), as1), ¬ pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (⌜asn2 '⌝ + ⌜x0⌝ + ⌜(as0, n0 + 1) '⌝ ), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ (a ' + x + b ').last = b; (s) ⊦ (a ' + x).head = a; (s) ⊦ a ' ≠ []; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) ⊦ ⌜x + y⌝ = ⌜x⌝ + ⌜y⌝ ; (s)
| (as1, n0) = (asn2 ' + x0).last, aINV(as0), aINV(as), aINV(as1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (⌜asn2 '⌝ + ⌜x0⌝ ), t(csf(n0 + 1), as0), t(csf(0), as), t(csf(n0), as1), ¬ pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (⌜asn2 '⌝ + ⌜x0⌝ + ⌜(as0, n0 + 1) '⌝ ), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) ⊦ |
⊦ pathp(g)(σ) ↔ (∀ n. ⌜n⌝ < # σ → dom(g)(σ[n])) ∧ (∀ n. ⌜n + 1⌝ < # σ → edge(g)(σ[n], σ[n + 1]))
(as1, n0) = (asn2 ' + x0).last, aINV(as1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n0), as1), t(csf(0), as), t(csf(n0 + 1), as0), ¬ pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (⌜asn2 '⌝ + ⌜x0⌝ + ⌜(as0, n0 + 1) '⌝ ), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∀ n. ⌜n⌝ < #(⌜asn2 '⌝ + ⌜x0⌝ ) → dom ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((⌜asn2 '⌝ + ⌜x0⌝ )[n]), ∀ n. ⌜n + 1⌝ < #(⌜asn2 '⌝ + ⌜x0⌝ ) → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((⌜asn2 '⌝ + ⌜x0⌝ )[n], (⌜asn2 '⌝ + ⌜x0⌝ )[n + 1]) ⊦
Used terms: (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext)) (asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1)), ⌜asn2 '⌝ + ⌜x0⌝
| ⊦ pathp(g)(σ) ↔ (∀ n. ⌜n⌝ < # σ → dom(g)(σ[n])) ∧ (∀ n. ⌜n + 1⌝ < # σ → edge(g)(σ[n], σ[n + 1])) |
| (as1, n0) = (asn2 ' + x0).last, aINV(as1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n0), as1), t(csf(0), as), t(csf(n0 + 1), as0), ¬ pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (⌜asn2 '⌝ + ⌜x0⌝ + ⌜(as0, n0 + 1) '⌝ ), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∀ n. ⌜n⌝ < #(⌜asn2 '⌝ + ⌜x0⌝ ) → dom ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((⌜asn2 '⌝ + ⌜x0⌝ )[n]), ∀ n. ⌜n + 1⌝ < #(⌜asn2 '⌝ + ⌜x0⌝ ) → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((⌜asn2 '⌝ + ⌜x0⌝ )[n], (⌜asn2 '⌝ + ⌜x0⌝ )[n + 1]) ⊦ |
(as1, n0) = (asn2 ' + x0).last, aINV(as0), aINV(as), aINV(as1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n0 + 1), as0), t(csf(0), as), t(csf(n0), as1), ¬ pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (⌜asn2 '⌝ + ⌜x0⌝ + ⌜(as0, n0 + 1) '⌝ ), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → t(csf((asn2 ' + x0)[n]._2), (asn2 ' + x0)[n]._1) ∧ aINV((asn2 ' + x0)[n]._1) ⊦
Used simplifier rules: ⊦ dom(vs × es) = vs; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ (⌜x⌝ + ⌜x0⌝ )[m] = (x + x0)[m]; (s) add-comm: ⊦ n∞1 + n∞2 = n∞2 + n∞1; from specification nat-inf add-assoc: ⊦ (n∞ + n∞1) + n∞2 = n∞ + n∞1 + n∞2; from specification nat-inf ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ ⌜n⌝ < ⌜1⌝ + n∞ ↔ ¬ n∞ < ⌜n⌝ ; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ # a ' = 0 +1; (s) ⊦ #(σ + σ1) = # σ + # σ1; (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ ⌜x⌝ [n] = x[n]; (s) ⊦ (⌜a '⌝ + σ)[n + 1] = σ[n]; (s) ⊦ n∞ + ⌜0⌝ = n∞; (s) ⊦ m ≤ n → (⌜(* m)⌝ + n∞2 < ⌜(* n)⌝ + n∞1 ↔ n∞2 < ⌜n - m⌝ + n∞1); (s) ⊦ ⌜m + n⌝ = ⌜m⌝ + ⌜n⌝ ; (s)
| (as1, n0) = (asn2 ' + x0).last, aINV(as0), aINV(as), aINV(as1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n0 + 1), as0), t(csf(0), as), t(csf(n0), as1), ¬ pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (⌜asn2 '⌝ + ⌜x0⌝ + ⌜(as0, n0 + 1) '⌝ ), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → t(csf((asn2 ' + x0)[n]._2), (asn2 ' + x0)[n]._1) ∧ aINV((asn2 ' + x0)[n]._1) ⊦ |
⊦ pathp(g)(σ) ↔ (∀ n. ⌜n⌝ < # σ → dom(g)(σ[n])) ∧ (∀ n. ⌜n + 1⌝ < # σ → edge(g)(σ[n], σ[n + 1]))
(as1, n0) = (asn2 ' + x0).last, aINV(as1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n0), as1), t(csf(0), as), t(csf(n0 + 1), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. ¬ # x0 < n → t(csf((asn2 ' + x0)[n]._2), (asn2 ' + x0)[n]._1) ∧ aINV((asn2 ' + x0)[n]._1), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0)[n], x0[n]), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), (∃ n. ¬ ( ⌜n⌝ < #(⌜asn2 '⌝ + ⌜x0⌝ + ⌜(as0, n0 + 1) '⌝ ) → dom ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((⌜asn2 '⌝ + ⌜x0⌝ + ⌜(as0, n0 + 1) '⌝ )[n]))) ∨ (∃ n. ¬ ( ⌜n + 1⌝ < #(⌜asn2 '⌝ + ⌜x0⌝ + ⌜(as0, n0 + 1) '⌝ ) → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((⌜asn2 '⌝ + ⌜x0⌝ + ⌜(as0, n0 + 1) '⌝ )[n], (⌜asn2 '⌝ + ⌜x0⌝ + ⌜(as0, n0 + 1) '⌝ )[n + 1]))) ⊦
Used terms: (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext)) (asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1)), ⌜asn2 '⌝ + ⌜x0⌝ + ⌜(as0, n0 + 1) '⌝
| ⊦ pathp(g)(σ) ↔ (∀ n. ⌜n⌝ < # σ → dom(g)(σ[n])) ∧ (∀ n. ⌜n + 1⌝ < # σ → edge(g)(σ[n], σ[n + 1])) |
| (as1, n0) = (asn2 ' + x0).last, aINV(as1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n0), as1), t(csf(0), as), t(csf(n0 + 1), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. ¬ # x0 < n → t(csf((asn2 ' + x0)[n]._2), (asn2 ' + x0)[n]._1) ∧ aINV((asn2 ' + x0)[n]._1), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0)[n], x0[n]), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), (∃ n. ¬ ( ⌜n⌝ < #(⌜asn2 '⌝ + ⌜x0⌝ + ⌜(as0, n0 + 1) '⌝ ) → dom ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((⌜asn2 '⌝ + ⌜x0⌝ + ⌜(as0, n0 + 1) '⌝ )[n]))) ∨ (∃ n. ¬ ( ⌜n + 1⌝ < #(⌜asn2 '⌝ + ⌜x0⌝ + ⌜(as0, n0 + 1) '⌝ ) → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((⌜asn2 '⌝ + ⌜x0⌝ + ⌜(as0, n0 + 1) '⌝ )[n], (⌜asn2 '⌝ + ⌜x0⌝ + ⌜(as0, n0 + 1) '⌝ )[n + 1]))) ⊦ |
(as1, n0) = (asn2 ' + x0).last, aINV(as0), aINV(as), aINV(as1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n0 + 1), as0), t(csf(0), as), t(csf(n0), as1), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → t(csf((asn2 ' + x0)[n]._2), (asn2 ' + x0)[n]._1) ∧ aINV((asn2 ' + x0)[n]._1), ¬ ( n < 2 + # x0 → t(csf((asn2 ' + x0 + (as0, n0 + 1) ')[n]._2), (asn2 ' + x0 + (as0, n0 + 1) ')[n]._1) ∧ aINV((asn2 ' + x0 + (as0, n0 + 1) ')[n]._1)) ∨ ¬ ( ¬ # x0 < n1 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0 + (as0, n0 + 1) ')[n1], (x0 + (as0, n0 + 1) ')[n1])) ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ (⌜x⌝ + ⌜x0⌝ )[m] = (x + x0)[m]; (s) ⊦ (⌜a '⌝ + σ)[n + 1] = σ[n]; (s) ⊦ (⌜x⌝ + ⌜x0⌝ + ⌜x1⌝ )[m] = (x + x0 + x1)[m]; (s) add-comm: ⊦ n∞1 + n∞2 = n∞2 + n∞1; from specification nat-inf add-assoc: ⊦ (n∞ + n∞1) + n∞2 = n∞ + n∞1 + n∞2; from specification nat-inf ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ ⌜n⌝ < ⌜1⌝ + n∞ ↔ ¬ n∞ < ⌜n⌝ ; (s) ⊦ m ≤ n → (⌜(* m)⌝ + n∞2 < ⌜(* n)⌝ + n∞1 ↔ n∞2 < ⌜n - m⌝ + n∞1); (s) ⊦ ⌜(* n)⌝ + ⌜(* m)⌝ = ⌜n + m⌝ ; (s) ⊦ # a ' = 0 +1; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ #(σ + σ1) = # σ + # σ1; (s) ⊦ ⌜m + n⌝ = ⌜m⌝ + ⌜n⌝ ; (s) ⊦ dom(vs × es) = vs; (s) ⊦ ⌜n⌝ < ⌜m⌝ + ⌜n0⌝ ↔ n < m + n0; (s)
| (as1, n0) = (asn2 ' + x0).last, aINV(as0), aINV(as), aINV(as1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n0 + 1), as0), t(csf(0), as), t(csf(n0), as1), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → t(csf((asn2 ' + x0)[n]._2), (asn2 ' + x0)[n]._1) ∧ aINV((asn2 ' + x0)[n]._1), ¬ ( n < 2 + # x0 → t(csf((asn2 ' + x0 + (as0, n0 + 1) ')[n]._2), (asn2 ' + x0 + (as0, n0 + 1) ')[n]._1) ∧ aINV((asn2 ' + x0 + (as0, n0 + 1) ')[n]._1)) ∨ ¬ ( ¬ # x0 < n1 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0 + (as0, n0 + 1) ')[n1], (x0 + (as0, n0 + 1) ')[n1])) ⊦ |
(as1, n0) = (asn2 ' + x0).last, (asn2 ' + x0 + (as0, n0 + 1) ')[n] = (as2, n2), aINV(as1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n0), as1), t(csf(0), as), t(csf(n0 + 1), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. ¬ # x0 < n → t(csf((asn2 ' + x0)[n]._2), (asn2 ' + x0)[n]._1) ∧ aINV((asn2 ' + x0)[n]._1), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0)[n], x0[n]), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ¬(n < 2 + # x0 → t(csf(n2), as2) ∧ aINV(as2)) ∨ ¬ ( ¬ # x0 < n1 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0 + (as0, n0 + 1) ')[n1], (x0 + (as0, n0 + 1) ')[n1])) ⊦
Used terms: as2, n2
| (as1, n0) = (asn2 ' + x0).last, (asn2 ' + x0 + (as0, n0 + 1) ')[n] = (as2, n2), aINV(as1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n0), as1), t(csf(0), as), t(csf(n0 + 1), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. ¬ # x0 < n → t(csf((asn2 ' + x0)[n]._2), (asn2 ' + x0)[n]._1) ∧ aINV((asn2 ' + x0)[n]._1), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0)[n], x0[n]), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ¬(n < 2 + # x0 → t(csf(n2), as2) ∧ aINV(as2)) ∨ ¬ ( ¬ # x0 < n1 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0 + (as0, n0 + 1) ')[n1], (x0 + (as0, n0 + 1) ')[n1])) ⊦ |
(as1, n0) = (asn2 ' + x0).last, (asn2 ' + x0 + (as0, n0 + 1) ')[n] = (as2, n2), n < 2 + # x0, aINV(as0), aINV(as), aINV(as1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n0 + 1), as0), t(csf(0), as), t(csf(n0), as1), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → t(csf((asn2 ' + x0)[n]._2), (asn2 ' + x0)[n]._1) ∧ aINV((asn2 ' + x0)[n]._1) ⊦ t(csf(n2), as2) ∧ aINV(as2)
(as1, n0) = (asn2 ' + x0).last, (asn2 ' + x0 + (as0, n0 + 1) ')[n] = (as2, n2), aINV(as0), aINV(as), aINV(as1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n0 + 1), as0), t(csf(0), as), t(csf(n0), as1), ¬ # x0 < n1, ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0 + (as0, n0 + 1) ')[n1], (x0 + (as0, n0 + 1) ')[n1]), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → t(csf((asn2 ' + x0)[n]._2), (asn2 ' + x0)[n]._1) ∧ aINV((asn2 ' + x0)[n]._1) ⊦
| (as1, n0) = (asn2 ' + x0).last, (asn2 ' + x0 + (as0, n0 + 1) ')[n] = (as2, n2), n < 2 + # x0, aINV(as0), aINV(as), aINV(as1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n0 + 1), as0), t(csf(0), as), t(csf(n0), as1), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → t(csf((asn2 ' + x0)[n]._2), (asn2 ' + x0)[n]._1) ∧ aINV((asn2 ' + x0)[n]._1) ⊦ t(csf(n2), as2) ∧ aINV(as2) |
(as1, n0) = (asn2 ' + x0).last, (asn2 ' + x0 + (as0, n0 + 1) ')[n] = (as2, n2), n < 2 + # x0, aINV(as1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n0), as1), t(csf(0), as), t(csf(n0 + 1), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ¬ # x0 < n → t(csf((asn2 ' + x0)[n]._2), (asn2 ' + x0)[n]._1) ∧ aINV((asn2 ' + x0)[n]._1), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0)[n], x0[n]), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ t(csf(n2), as2) ∧ aINV(as2)
Used terms: n
| (as1, n0) = (asn2 ' + x0).last, (asn2 ' + x0 + (as0, n0 + 1) ')[n] = (as2, n2), n < 2 + # x0, aINV(as1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n0), as1), t(csf(0), as), t(csf(n0 + 1), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ¬ # x0 < n → t(csf((asn2 ' + x0)[n]._2), (asn2 ' + x0)[n]._1) ∧ aINV((asn2 ' + x0)[n]._1), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0)[n], x0[n]), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ t(csf(n2), as2) ∧ aINV(as2) |
(as1, n0) = (asn2 ' + x0).last, (asn2 ' + x0 + (as0, n0 + 1) ')[n] = (as2, n2), (asn2 ' + x0)[n] = (as3, n1), n < 2 + # x0, aINV(as0), aINV(as), aINV(as1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n0 + 1), as0), t(csf(0), as), t(csf(n0), as1), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ¬ # x0 < n → t(csf(n1), as3) ∧ aINV(as3), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0)[n], x0[n]) ⊦ t(csf(n2), as2) ∧ aINV(as2)
Used terms: as3, n1
| (as1, n0) = (asn2 ' + x0).last, (asn2 ' + x0 + (as0, n0 + 1) ')[n] = (as2, n2), (asn2 ' + x0)[n] = (as3, n1), n < 2 + # x0, aINV(as0), aINV(as), aINV(as1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n0 + 1), as0), t(csf(0), as), t(csf(n0), as1), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ¬ # x0 < n → t(csf(n1), as3) ∧ aINV(as3), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0)[n], x0[n]) ⊦ t(csf(n2), as2) ∧ aINV(as2) |
⊦ n < # x → (x + y)[n] = x[n]
(as1, n0) = (asn2 ' + x0).last, (asn2 ' + x0)[n] = (as3, n1), (asn2 ' + x0 + (as0, n0 + 1) ')[n] = (as2, n2), n < 2 + # x0, aINV(as1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n0), as1), t(csf(0), as), t(csf(n0 + 1), as0), ¬ n < # asn2 ', ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ¬ # x0 < n → t(csf(n1), as3) ∧ aINV(as3), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0)[n], x0[n]), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ t(csf(n2), as2) ∧ aINV(as2)
Used simplifier rules: ⊦ n < # x → (x + y)[n] = x[n]; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ # a ' = 0 +1; (s) ⊦ m < 1 ↔ m = 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic ⊦ a '[0] = a; (s) ⊦ 0 < m ↔ m ≠ 0; (s) n < n0 ⊦ (* n) ≠ m0 + (* n0); (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ ¬ n < 0; (s) Used terms: asn2 ', x0 + (as0, n0 + 1) ', n
| ⊦ n < # x → (x + y)[n] = x[n] |
| (as1, n0) = (asn2 ' + x0).last, (asn2 ' + x0)[n] = (as3, n1), (asn2 ' + x0 + (as0, n0 + 1) ')[n] = (as2, n2), n < 2 + # x0, aINV(as1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n0), as1), t(csf(0), as), t(csf(n0 + 1), as0), ¬ n < # asn2 ', ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ¬ # x0 < n → t(csf(n1), as3) ∧ aINV(as3), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0)[n], x0[n]), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ t(csf(n2), as2) ∧ aINV(as2) |
(as1, n0) = (asn2 ' + x0).last, x0[n - 1] = (as3, n1), (x0 + (as0, n0 + 1) ')[n - 1] = (as2, n2), n ≠ 0, n < 2 + # x0, aINV(as1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n0), as1), t(csf(0), as), t(csf(n0 + 1), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ¬ # x0 < n → t(csf(n1), as3) ∧ aINV(as3), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0)[n], x0[n]), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ t(csf(n2), as2) ∧ aINV(as2)
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic n < n0 ⊦ (* n) ≠ m0 + (* n0); (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ m < 1 ↔ m = 0; (s) ⊦ # a ' = 0 +1; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ¬ n < # x → (x + y)[n] = y[n - # x]; (s)
| (as1, n0) = (asn2 ' + x0).last, x0[n - 1] = (as3, n1), (x0 + (as0, n0 + 1) ')[n - 1] = (as2, n2), n ≠ 0, n < 2 + # x0, aINV(as1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n0), as1), t(csf(0), as), t(csf(n0 + 1), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ¬ # x0 < n → t(csf(n1), as3) ∧ aINV(as3), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0)[n], x0[n]), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ t(csf(n2), as2) ∧ aINV(as2) |
(as1, n0) = (asn2 ' + x0).last, (x0 + (as0, n0 + 1) ')[n3] = (as2, n2), x0[n3] = (as3, n1), n = n3 + 1, n ≠ 0, n < 2 + # x0, aINV(as0), aINV(as), aINV(as1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n0 + 1), as0), t(csf(0), as), t(csf(n0), as1), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ¬ # x0 < n → t(csf(n1), as3) ∧ aINV(as3), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0)[n], x0[n]) ⊦ t(csf(n2), as2) ∧ aINV(as2)
Used simplifier rules: n ≠ 0 ⊦ m = n - 1 ↔ n = m + 1; (elim) Used terms: n, n3
| (as1, n0) = (asn2 ' + x0).last, (x0 + (as0, n0 + 1) ')[n3] = (as2, n2), x0[n3] = (as3, n1), n = n3 + 1, n ≠ 0, n < 2 + # x0, aINV(as0), aINV(as), aINV(as1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n0 + 1), as0), t(csf(0), as), t(csf(n0), as1), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ¬ # x0 < n → t(csf(n1), as3) ∧ aINV(as3), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0)[n], x0[n]) ⊦ t(csf(n2), as2) ∧ aINV(as2) |
(as1, n0) = (asn2 ' + x0).last, x0[n3] = (as3, n1), (x0 + (as0, n0 + 1) ')[n3] = (as2, n2), aINV(as1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n0), as1), t(csf(0), as), t(csf(n0 + 1), as0), n3 ≤ # x0, ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), n3 < # x0 → t(csf(n1), as3) ∧ aINV(as3), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0)[n], x0[n]), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ t(csf(n2), as2) ∧ aINV(as2)
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m < n + 1 ↔ ¬ n < m; (s) ⊦ m < n ↔ ¬ n ≤ m; (ss) n < n0 ⊦ m + (* n) < m0 + (* n0) ↔ m < m0 + (n0 - n); (s) ⊦ m + 1 ≠ 0; (s)
| (as1, n0) = (asn2 ' + x0).last, x0[n3] = (as3, n1), (x0 + (as0, n0 + 1) ')[n3] = (as2, n2), aINV(as1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n0), as1), t(csf(0), as), t(csf(n0 + 1), as0), n3 ≤ # x0, ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), n3 < # x0 → t(csf(n1), as3) ∧ aINV(as3), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0)[n], x0[n]), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ t(csf(n2), as2) ∧ aINV(as2) |
⊦ ¬ n < # x → (x + y)[n] = y[n - # x]
Used simplifier rules: ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ m ≤ n → (n ≤ m ↔ m = n); (s) ⊦ m - m = 0; (s) ⊦ a '[0] = a; (s) ⊦ m ≤ m; (s) ⊦ ¬ n < n; (s) ⊦ n < # x → (x + a ')[n] = x[n]; (s) ⊦ m < n → m ≤ n; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ # x = 0 ↔ x = []; (s) ⊦ x ≠ [] → (a ' + x).last = x.last; (s) a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: x0, (as0, n0 + 1) ', n3
| ⊦ ¬ n < # x → (x + y)[n] = y[n - # x] |
| (as1, n0) = (asn2 ' + x0).last, (asn2 ' + x0 + (as0, n0 + 1) ')[n] = (as2, n2), aINV(as0), aINV(as), aINV(as1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n0 + 1), as0), t(csf(0), as), t(csf(n0), as1), ¬ # x0 < n1, ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0 + (as0, n0 + 1) ')[n1], (x0 + (as0, n0 + 1) ')[n1]), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0)[n], x0[n]), ∀ n. ¬ # x0 < n → t(csf((asn2 ' + x0)[n]._2), (asn2 ' + x0)[n]._1) ∧ aINV((asn2 ' + x0)[n]._1) ⊦ |
(as1, n0) = (asn2 ' + x0).last, (asn2 ' + x0 + (as0, n0 + 1) ')[n] = (as2, n2), aINV(as1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n0), as1), t(csf(0), as), t(csf(n0 + 1), as0), n1 ≤ # x0, ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0 + (as0, n0 + 1) ')[n1], (x0 + (as0, n0 + 1) ')[n1]), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. ¬ # x0 < n → t(csf((asn2 ' + x0)[n]._2), (asn2 ' + x0)[n]._1) ∧ aINV((asn2 ' + x0)[n]._1), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0)[n], x0[n]), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ m < n ↔ ¬ n ≤ m; (ss)
| (as1, n0) = (asn2 ' + x0).last, (asn2 ' + x0 + (as0, n0 + 1) ')[n] = (as2, n2), aINV(as1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n0), as1), t(csf(0), as), t(csf(n0 + 1), as0), n1 ≤ # x0, ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0 + (as0, n0 + 1) ')[n1], (x0 + (as0, n0 + 1) ')[n1]), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. ¬ # x0 < n → t(csf((asn2 ' + x0)[n]._2), (asn2 ' + x0)[n]._1) ∧ aINV((asn2 ' + x0)[n]._1), ∀ n. n < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0)[n], x0[n]), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ |
(as1, n0) = (asn2 ' + x0).last, (asn2 ' + x0 + (as0, n0 + 1) ')[n] = (as2, n2), aINV(as0), aINV(as), aINV(as1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n0 + 1), as0), t(csf(0), as), t(csf(n0), as1), n1 ≤ # x0, ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0 + (as0, n0 + 1) ')[n1], (x0 + (as0, n0 + 1) ')[n1]), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), n1 < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0)[n1], x0[n1]), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ n. ¬ # x0 < n → t(csf((asn2 ' + x0)[n]._2), (asn2 ' + x0)[n]._1) ∧ aINV((asn2 ' + x0)[n]._1) ⊦
Used terms: n1
| (as1, n0) = (asn2 ' + x0).last, (asn2 ' + x0 + (as0, n0 + 1) ')[n] = (as2, n2), aINV(as0), aINV(as), aINV(as1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n0 + 1), as0), t(csf(0), as), t(csf(n0), as1), n1 ≤ # x0, ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0 + (as0, n0 + 1) ')[n1], (x0 + (as0, n0 + 1) ')[n1]), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), n1 < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0)[n1], x0[n1]), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ n. ¬ # x0 < n → t(csf((asn2 ' + x0)[n]._2), (asn2 ' + x0)[n]._1) ∧ aINV((asn2 ' + x0)[n]._1) ⊦ |
(as1, n0) = (asn2 ' + x0).last, (asn2 ' + x0 + (as0, n0 + 1) ')[n] = (as2, n2), n1 < # x0, aINV(as1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n0), as1), t(csf(0), as), t(csf(n0 + 1), as0), n1 ≤ # x0, ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0 + (as0, n0 + 1) ')[n1], (x0 + (as0, n0 + 1) ')[n1]), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), n1 < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0)[n1], x0[n1]), ∀ n. ¬ # x0 < n → t(csf((asn2 ' + x0)[n]._2), (asn2 ' + x0)[n]._1) ∧ aINV((asn2 ' + x0)[n]._1), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦
(as1, n0) = (asn2 ' + x0).last, (asn2 ' + x0 + (as0, n0 + 1) ')[n] = (as2, n2), aINV(as1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n0), as1), t(csf(0), as), t(csf(n0 + 1), as0), n1 ≤ # x0, ¬ n1 < # x0, ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0 + (as0, n0 + 1) ')[n1], (x0 + (as0, n0 + 1) ')[n1]), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), n1 < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0)[n1], x0[n1]), ∀ n. ¬ # x0 < n → t(csf((asn2 ' + x0)[n]._2), (asn2 ' + x0)[n]._1) ∧ aINV((asn2 ' + x0)[n]._1), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦
Used formulas: n1 < # x0
| (as1, n0) = (asn2 ' + x0).last, (asn2 ' + x0 + (as0, n0 + 1) ')[n] = (as2, n2), n1 < # x0, aINV(as1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n0), as1), t(csf(0), as), t(csf(n0 + 1), as0), n1 ≤ # x0, ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0 + (as0, n0 + 1) ')[n1], (x0 + (as0, n0 + 1) ')[n1]), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), n1 < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0)[n1], x0[n1]), ∀ n. ¬ # x0 < n → t(csf((asn2 ' + x0)[n]._2), (asn2 ' + x0)[n]._1) ∧ aINV((asn2 ' + x0)[n]._1), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ |
(as1, n0) = x0.last, x0[n1]._2 = (asn2 ' + x0)[n1]._2 + 1, (asn2 ' + x0 + (as0, n0 + 1) ')[n] = (as2, n2), x0 ≠ [], n1 < # x0, aINV(x0[n1]._1), aINV((asn2 ' + x0)[n1]._1), aINV(as1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))((asn2 ' + x0)[n1]._1, (cext(caf((asn2 ' + x0)[n1]._2)) = None ⊃ [];cext(caf((asn2 ' + x0)[n1]._2)).get '), x0[n1]._1), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(x0[n1]._2), x0[n1]._1), t(csf((asn2 ' + x0)[n1]._2), (asn2 ' + x0)[n1]._1), t(csf(n0), as1), t(csf(0), as), t(csf(n0 + 1), as0), ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0 + (as0, n0 + 1) ')[n1], x0[n1]), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. ¬ # x0 < n → t(csf((asn2 ' + x0)[n]._2), (asn2 ' + x0)[n]._1) ∧ aINV((asn2 ' + x0)[n]._1), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ x ≠ [] → (a ' + x).last = x.last; (s) ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ edge(vs × es)(a, b) ↔ es(a, b) ∧ vs(a) ∧ vs(b); (ws) ⊦ n < # x → (x + a ')[n] = x[n]; (s) ⊦ m < n → m ≤ n; (s)
| (as1, n0) = x0.last, x0[n1]._2 = (asn2 ' + x0)[n1]._2 + 1, (asn2 ' + x0 + (as0, n0 + 1) ')[n] = (as2, n2), x0 ≠ [], n1 < # x0, aINV(x0[n1]._1), aINV((asn2 ' + x0)[n1]._1), aINV(as1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))((asn2 ' + x0)[n1]._1, (cext(caf((asn2 ' + x0)[n1]._2)) = None ⊃ [];cext(caf((asn2 ' + x0)[n1]._2)).get '), x0[n1]._1), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(x0[n1]._2), x0[n1]._1), t(csf((asn2 ' + x0)[n1]._2), (asn2 ' + x0)[n1]._1), t(csf(n0), as1), t(csf(0), as), t(csf(n0 + 1), as0), ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0 + (as0, n0 + 1) ')[n1], x0[n1]), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. ¬ # x0 < n → t(csf((asn2 ' + x0)[n]._2), (asn2 ' + x0)[n]._1) ∧ aINV((asn2 ' + x0)[n]._1), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ |
(as1, n0) = x0.last, (asn2 ' + x0 + (as0, n0 + 1) ')[n] = (as2, n2), x0[n1] = (as3, n3), n3 = (asn2 ' + x0)[n1]._2 + 1, x0 ≠ [], n1 < # x0, aINV(as0), aINV(as), aINV(as1), aINV((asn2 ' + x0)[n1]._1), aINV(as3), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), move(IOAut(astart, astep, aext))((asn2 ' + x0)[n1]._1, (cext(caf((asn2 ' + x0)[n1]._2)) = None ⊃ [];cext(caf((asn2 ' + x0)[n1]._2)).get '), as3), t(csf(n0 + 1), as0), t(csf(0), as), t(csf(n0), as1), t(csf((asn2 ' + x0)[n1]._2), (asn2 ' + x0)[n1]._1), t(csf(n3), as3), ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0 + (as0, n0 + 1) ')[n1], x0[n1]), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ n. ¬ # x0 < n → t(csf((asn2 ' + x0)[n]._2), (asn2 ' + x0)[n]._1) ∧ aINV((asn2 ' + x0)[n]._1) ⊦
Used terms: as3, n3
| (as1, n0) = x0.last, (asn2 ' + x0 + (as0, n0 + 1) ')[n] = (as2, n2), x0[n1] = (as3, n3), n3 = (asn2 ' + x0)[n1]._2 + 1, x0 ≠ [], n1 < # x0, aINV(as0), aINV(as), aINV(as1), aINV((asn2 ' + x0)[n1]._1), aINV(as3), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), move(IOAut(astart, astep, aext))((asn2 ' + x0)[n1]._1, (cext(caf((asn2 ' + x0)[n1]._2)) = None ⊃ [];cext(caf((asn2 ' + x0)[n1]._2)).get '), as3), t(csf(n0 + 1), as0), t(csf(0), as), t(csf(n0), as1), t(csf((asn2 ' + x0)[n1]._2), (asn2 ' + x0)[n1]._1), t(csf(n3), as3), ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0 + (as0, n0 + 1) ')[n1], x0[n1]), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ n. ¬ # x0 < n → t(csf((asn2 ' + x0)[n]._2), (asn2 ' + x0)[n]._1) ∧ aINV((asn2 ' + x0)[n]._1) ⊦ |
(as1, n0) = x0.last, x0[n1] = (as3, (asn2 ' + x0)[n1]._2 + 1), (asn2 ' + x0 + (as0, n0 + 1) ')[n] = (as2, n2), x0 ≠ [], n1 < # x0, aINV(as3), aINV((asn2 ' + x0)[n1]._1), aINV(as1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))((asn2 ' + x0)[n1]._1, (cext(caf((asn2 ' + x0)[n1]._2)) = None ⊃ [];cext(caf((asn2 ' + x0)[n1]._2)).get '), as3), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf((asn2 ' + x0)[n1]._2 + 1), as3), t(csf((asn2 ' + x0)[n1]._2), (asn2 ' + x0)[n1]._1), t(csf(n0), as1), t(csf(0), as), t(csf(n0 + 1), as0), ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0 + (as0, n0 + 1) ')[n1], x0[n1]), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. ¬ # x0 < n → t(csf((asn2 ' + x0)[n]._2), (asn2 ' + x0)[n]._1) ∧ aINV((asn2 ' + x0)[n]._1), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list
| (as1, n0) = x0.last, x0[n1] = (as3, (asn2 ' + x0)[n1]._2 + 1), (asn2 ' + x0 + (as0, n0 + 1) ')[n] = (as2, n2), x0 ≠ [], n1 < # x0, aINV(as3), aINV((asn2 ' + x0)[n1]._1), aINV(as1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))((asn2 ' + x0)[n1]._1, (cext(caf((asn2 ' + x0)[n1]._2)) = None ⊃ [];cext(caf((asn2 ' + x0)[n1]._2)).get '), as3), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf((asn2 ' + x0)[n1]._2 + 1), as3), t(csf((asn2 ' + x0)[n1]._2), (asn2 ' + x0)[n1]._1), t(csf(n0), as1), t(csf(0), as), t(csf(n0 + 1), as0), ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0 + (as0, n0 + 1) ')[n1], x0[n1]), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. ¬ # x0 < n → t(csf((asn2 ' + x0)[n]._2), (asn2 ' + x0)[n]._1) ∧ aINV((asn2 ' + x0)[n]._1), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ |
(as1, n0) = x0.last, (asn2 ' + x0 + (as0, n0 + 1) ')[n] = (as2, n2), x0[n1] = (as3, n3 + 1), (asn2 ' + x0)[n1] = (as4, n3), x0 ≠ [], n1 < # x0, aINV(as0), aINV(as), aINV(as1), aINV(as4), aINV(as3), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), move(IOAut(astart, astep, aext))(as4, (cext(caf(n3)) = None ⊃ [];cext(caf(n3)).get '), as3), t(csf(n0 + 1), as0), t(csf(0), as), t(csf(n0), as1), t(csf(n3), as4), t(csf(n3 + 1), as3), ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0 + (as0, n0 + 1) ')[n1], x0[n1]), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ n. ¬ # x0 < n → t(csf((asn2 ' + x0)[n]._2), (asn2 ' + x0)[n]._1) ∧ aINV((asn2 ' + x0)[n]._1) ⊦
Used terms: as4, n3
| (as1, n0) = x0.last, (asn2 ' + x0 + (as0, n0 + 1) ')[n] = (as2, n2), x0[n1] = (as3, n3 + 1), (asn2 ' + x0)[n1] = (as4, n3), x0 ≠ [], n1 < # x0, aINV(as0), aINV(as), aINV(as1), aINV(as4), aINV(as3), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), move(IOAut(astart, astep, aext))(as4, (cext(caf(n3)) = None ⊃ [];cext(caf(n3)).get '), as3), t(csf(n0 + 1), as0), t(csf(0), as), t(csf(n0), as1), t(csf(n3), as4), t(csf(n3 + 1), as3), ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0 + (as0, n0 + 1) ')[n1], x0[n1]), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ n. ¬ # x0 < n → t(csf((asn2 ' + x0)[n]._2), (asn2 ' + x0)[n]._1) ∧ aINV((asn2 ' + x0)[n]._1) ⊦ |
⊦ edge(vs × es)(a, b) ↔ es(a, b) ∧ vs(a) ∧ vs(b)
(as1, n0) = x0.last, (asn2 ' + x0)[n1] = (as4, n3), x0[n1] = (as3, n3 + 1), (asn2 ' + x0 + (as0, n0 + 1) ')[n] = (as2, n2), x0 ≠ [], n1 < # x0, aINV(as3), aINV(as4), aINV(as1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as4, (cext(caf(n3)) = None ⊃ [];cext(caf(n3)).get '), as3), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n3 + 1), as3), t(csf(n3), as4), t(csf(n0), as1), t(csf(0), as), t(csf(n0 + 1), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. ¬ # x0 < n → t(csf((asn2 ' + x0)[n]._2), (asn2 ' + x0)[n]._1) ∧ aINV((asn2 ' + x0)[n]._1), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ( ¬ aINV((asn2 ' + x0 + (as0, n0 + 1) ')[n1]._1) ∨ ¬ aINV(x0[n1]._1) ∨ x0[n1]._2 ≠ (asn2 ' + x0 + (as0, n0 + 1) ')[n1]._2 + 1 ∨ ¬ move(IOAut(astart, astep, aext)) ((asn2 ' + x0 + (as0, n0 + 1) ')[n1]._1, (cext(caf((asn2 ' + x0 + (as0, n0 + 1) ')[n1]._2)) = None ⊃ [];cext(caf((asn2 ' + x0 + (as0, n0 + 1) ')[n1]._2)).get '), x0[n1]._1)) ∨ (¬ t(csf((asn2 ' + x0 + (as0, n0 + 1) ')[n1]._2), (asn2 ' + x0 + (as0, n0 + 1) ')[n1]._1) ∨ ¬ aINV((asn2 ' + x0 + (as0, n0 + 1) ')[n1]._1)) ∨ ¬ t(csf(x0[n1]._2), x0[n1]._1) ∨ ¬ aINV(x0[n1]._1) ⊦
Used terms: λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1), λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext)) (asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1), (asn2 ' + x0 + (as0, n0 + 1) ')[n1], x0[n1]
| ⊦ edge(vs × es)(a, b) ↔ es(a, b) ∧ vs(a) ∧ vs(b) |
| (as1, n0) = x0.last, (asn2 ' + x0)[n1] = (as4, n3), x0[n1] = (as3, n3 + 1), (asn2 ' + x0 + (as0, n0 + 1) ')[n] = (as2, n2), x0 ≠ [], n1 < # x0, aINV(as3), aINV(as4), aINV(as1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as4, (cext(caf(n3)) = None ⊃ [];cext(caf(n3)).get '), as3), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n3 + 1), as3), t(csf(n3), as4), t(csf(n0), as1), t(csf(0), as), t(csf(n0 + 1), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. ¬ # x0 < n → t(csf((asn2 ' + x0)[n]._2), (asn2 ' + x0)[n]._1) ∧ aINV((asn2 ' + x0)[n]._1), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ( ¬ aINV((asn2 ' + x0 + (as0, n0 + 1) ')[n1]._1) ∨ ¬ aINV(x0[n1]._1) ∨ x0[n1]._2 ≠ (asn2 ' + x0 + (as0, n0 + 1) ')[n1]._2 + 1 ∨ ¬ move(IOAut(astart, astep, aext)) ((asn2 ' + x0 + (as0, n0 + 1) ')[n1]._1, (cext(caf((asn2 ' + x0 + (as0, n0 + 1) ')[n1]._2)) = None ⊃ [];cext(caf((asn2 ' + x0 + (as0, n0 + 1) ')[n1]._2)).get '), x0[n1]._1)) ∨ (¬ t(csf((asn2 ' + x0 + (as0, n0 + 1) ')[n1]._2), (asn2 ' + x0 + (as0, n0 + 1) ')[n1]._1) ∨ ¬ aINV((asn2 ' + x0 + (as0, n0 + 1) ')[n1]._1)) ∨ ¬ t(csf(x0[n1]._2), x0[n1]._1) ∨ ¬ aINV(x0[n1]._1) ⊦ |
(as1, n0) = x0.last, (asn2 ' + x0 + (as0, n0 + 1) ')[n] = (as2, n2), x0[n1] = (as3, n3 + 1), (asn2 ' + x0)[n1] = (as4, n3), x0 ≠ [], n1 < # x0, aINV(as0), aINV(as), aINV(as1), aINV(as4), aINV(as3), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), move(IOAut(astart, astep, aext))(as4, (cext(caf(n3)) = None ⊃ [];cext(caf(n3)).get '), as3), t(csf(n0 + 1), as0), t(csf(0), as), t(csf(n0), as1), t(csf(n3), as4), t(csf(n3 + 1), as3), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ n. ¬ # x0 < n → t(csf((asn2 ' + x0)[n]._2), (asn2 ' + x0)[n]._1) ∧ aINV((asn2 ' + x0)[n]._1), x0[n1]._2 ≠ (asn2 ' + x0 + (as0, n0 + 1) ')[n1]._2 + 1 ∨ ¬ move(IOAut(astart, astep, aext)) ((asn2 ' + x0 + (as0, n0 + 1) ')[n1]._1, (cext(caf((asn2 ' + x0 + (as0, n0 + 1) ')[n1]._2)) = None ⊃ [];cext(caf((asn2 ' + x0 + (as0, n0 + 1) ')[n1]._2)).get '), x0[n1]._1) ∨ ¬ t(csf((asn2 ' + x0 + (as0, n0 + 1) ')[n1]._2), (asn2 ' + x0 + (as0, n0 + 1) ')[n1]._1) ∨ ¬ aINV((asn2 ' + x0 + (as0, n0 + 1) ')[n1]._1) ∨ ¬ t(csf(x0[n1]._2), x0[n1]._1) ∨ ¬ aINV(x0[n1]._1) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list
| (as1, n0) = x0.last, (asn2 ' + x0 + (as0, n0 + 1) ')[n] = (as2, n2), x0[n1] = (as3, n3 + 1), (asn2 ' + x0)[n1] = (as4, n3), x0 ≠ [], n1 < # x0, aINV(as0), aINV(as), aINV(as1), aINV(as4), aINV(as3), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), move(IOAut(astart, astep, aext))(as4, (cext(caf(n3)) = None ⊃ [];cext(caf(n3)).get '), as3), t(csf(n0 + 1), as0), t(csf(0), as), t(csf(n0), as1), t(csf(n3), as4), t(csf(n3 + 1), as3), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ n. ¬ # x0 < n → t(csf((asn2 ' + x0)[n]._2), (asn2 ' + x0)[n]._1) ∧ aINV((asn2 ' + x0)[n]._1), x0[n1]._2 ≠ (asn2 ' + x0 + (as0, n0 + 1) ')[n1]._2 + 1 ∨ ¬ move(IOAut(astart, astep, aext)) ((asn2 ' + x0 + (as0, n0 + 1) ')[n1]._1, (cext(caf((asn2 ' + x0 + (as0, n0 + 1) ')[n1]._2)) = None ⊃ [];cext(caf((asn2 ' + x0 + (as0, n0 + 1) ')[n1]._2)).get '), x0[n1]._1) ∨ ¬ t(csf((asn2 ' + x0 + (as0, n0 + 1) ')[n1]._2), (asn2 ' + x0 + (as0, n0 + 1) ')[n1]._1) ∨ ¬ aINV((asn2 ' + x0 + (as0, n0 + 1) ')[n1]._1) ∨ ¬ t(csf(x0[n1]._2), x0[n1]._1) ∨ ¬ aINV(x0[n1]._1) ⊦ |
(as1, n0) = x0.last, (asn2 ' + x0)[n1] = (as4, n3), x0[n1] = (as3, n3 + 1), (asn2 ' + x0 + (as0, n0 + 1) ')[n] = (as2, n2), x0[n1] = (as5, n4), x0 ≠ [], n1 < # x0, aINV(as3), aINV(as4), aINV(as1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as4, (cext(caf(n3)) = None ⊃ [];cext(caf(n3)).get '), as3), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n3 + 1), as3), t(csf(n3), as4), t(csf(n0), as1), t(csf(0), as), t(csf(n0 + 1), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. ¬ # x0 < n → t(csf((asn2 ' + x0)[n]._2), (asn2 ' + x0)[n]._1) ∧ aINV((asn2 ' + x0)[n]._1), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), n4 ≠ (asn2 ' + x0 + (as0, n0 + 1) ')[n1]._2 + 1 ∨ ¬ move(IOAut(astart, astep, aext)) ((asn2 ' + x0 + (as0, n0 + 1) ')[n1]._1, (cext(caf((asn2 ' + x0 + (as0, n0 + 1) ')[n1]._2)) = None ⊃ [];cext(caf((asn2 ' + x0 + (as0, n0 + 1) ')[n1]._2)).get '), as5) ∨ ¬ t(csf((asn2 ' + x0 + (as0, n0 + 1) ')[n1]._2), (asn2 ' + x0 + (as0, n0 + 1) ')[n1]._1) ∨ ¬ aINV((asn2 ' + x0 + (as0, n0 + 1) ')[n1]._1) ∨ ¬ t(csf(n4), as5) ∨ ¬ aINV(as5) ⊦
Used terms: as5, n4
| (as1, n0) = x0.last, (asn2 ' + x0)[n1] = (as4, n3), x0[n1] = (as3, n3 + 1), (asn2 ' + x0 + (as0, n0 + 1) ')[n] = (as2, n2), x0[n1] = (as5, n4), x0 ≠ [], n1 < # x0, aINV(as3), aINV(as4), aINV(as1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as4, (cext(caf(n3)) = None ⊃ [];cext(caf(n3)).get '), as3), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n3 + 1), as3), t(csf(n3), as4), t(csf(n0), as1), t(csf(0), as), t(csf(n0 + 1), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. ¬ # x0 < n → t(csf((asn2 ' + x0)[n]._2), (asn2 ' + x0)[n]._1) ∧ aINV((asn2 ' + x0)[n]._1), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), n4 ≠ (asn2 ' + x0 + (as0, n0 + 1) ')[n1]._2 + 1 ∨ ¬ move(IOAut(astart, astep, aext)) ((asn2 ' + x0 + (as0, n0 + 1) ')[n1]._1, (cext(caf((asn2 ' + x0 + (as0, n0 + 1) ')[n1]._2)) = None ⊃ [];cext(caf((asn2 ' + x0 + (as0, n0 + 1) ')[n1]._2)).get '), as5) ∨ ¬ t(csf((asn2 ' + x0 + (as0, n0 + 1) ')[n1]._2), (asn2 ' + x0 + (as0, n0 + 1) ')[n1]._1) ∨ ¬ aINV((asn2 ' + x0 + (as0, n0 + 1) ')[n1]._1) ∨ ¬ t(csf(n4), as5) ∨ ¬ aINV(as5) ⊦ |
(as1, n0) = x0.last, (asn2 ' + x0)[n1] = (as4, n3), x0[n1] = (as3, n3 + 1), (asn2 ' + x0 + (as0, n0 + 1) ')[n] = (as2, n2), x0 ≠ [], n1 < # x0, aINV(as0), aINV(as), aINV(as1), aINV(as4), aINV(as3), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), move(IOAut(astart, astep, aext))(as4, (cext(caf(n3)) = None ⊃ [];cext(caf(n3)).get '), as3), t(csf(n0 + 1), as0), t(csf(0), as), t(csf(n0), as1), t(csf(n3), as4), t(csf(n3 + 1), as3), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ n. ¬ # x0 < n → t(csf((asn2 ' + x0)[n]._2), (asn2 ' + x0)[n]._1) ∧ aINV((asn2 ' + x0)[n]._1), n3 ≠ (asn2 ' + x0 + (as0, n0 + 1) ')[n1]._2 ∨ ¬ move(IOAut(astart, astep, aext)) ((asn2 ' + x0 + (as0, n0 + 1) ')[n1]._1, (cext(caf((asn2 ' + x0 + (as0, n0 + 1) ')[n1]._2)) = None ⊃ [];cext(caf((asn2 ' + x0 + (as0, n0 + 1) ')[n1]._2)).get '), as3) ∨ ¬ t(csf((asn2 ' + x0 + (as0, n0 + 1) ')[n1]._2), (asn2 ' + x0 + (as0, n0 + 1) ')[n1]._1) ∨ ¬ aINV((asn2 ' + x0 + (as0, n0 + 1) ')[n1]._1) ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m + n = m + n0 ↔ n = n0; (s) a: ⊦ (x + y) + z = x + y + z; from specification list
| (as1, n0) = x0.last, (asn2 ' + x0)[n1] = (as4, n3), x0[n1] = (as3, n3 + 1), (asn2 ' + x0 + (as0, n0 + 1) ')[n] = (as2, n2), x0 ≠ [], n1 < # x0, aINV(as0), aINV(as), aINV(as1), aINV(as4), aINV(as3), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), move(IOAut(astart, astep, aext))(as4, (cext(caf(n3)) = None ⊃ [];cext(caf(n3)).get '), as3), t(csf(n0 + 1), as0), t(csf(0), as), t(csf(n0), as1), t(csf(n3), as4), t(csf(n3 + 1), as3), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ n. ¬ # x0 < n → t(csf((asn2 ' + x0)[n]._2), (asn2 ' + x0)[n]._1) ∧ aINV((asn2 ' + x0)[n]._1), n3 ≠ (asn2 ' + x0 + (as0, n0 + 1) ')[n1]._2 ∨ ¬ move(IOAut(astart, astep, aext)) ((asn2 ' + x0 + (as0, n0 + 1) ')[n1]._1, (cext(caf((asn2 ' + x0 + (as0, n0 + 1) ')[n1]._2)) = None ⊃ [];cext(caf((asn2 ' + x0 + (as0, n0 + 1) ')[n1]._2)).get '), as3) ∨ ¬ t(csf((asn2 ' + x0 + (as0, n0 + 1) ')[n1]._2), (asn2 ' + x0 + (as0, n0 + 1) ')[n1]._1) ∨ ¬ aINV((asn2 ' + x0 + (as0, n0 + 1) ')[n1]._1) ⊦ |
(as1, n0) = x0.last, (asn2 ' + x0 + (as0, n0 + 1) ')[n] = (as2, n2), x0[n1] = (as3, n3 + 1), (asn2 ' + x0)[n1] = (as4, n3), (asn2 ' + x0 + (as0, n0 + 1) ')[n1] = (as5, n4), x0 ≠ [], n1 < # x0, aINV(as3), aINV(as4), aINV(as1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as4, (cext(caf(n3)) = None ⊃ [];cext(caf(n3)).get '), as3), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n3 + 1), as3), t(csf(n3), as4), t(csf(n0), as1), t(csf(0), as), t(csf(n0 + 1), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. ¬ # x0 < n → t(csf((asn2 ' + x0)[n]._2), (asn2 ' + x0)[n]._1) ∧ aINV((asn2 ' + x0)[n]._1), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), n3 ≠ n4 ∨ ¬ move(IOAut(astart, astep, aext))(as5, (cext(caf(n4)) = None ⊃ [];cext(caf(n4)).get '), as3) ∨ ¬ t(csf(n4), as5) ∨ ¬ aINV(as5) ⊦
Used terms: as5, n4
| (as1, n0) = x0.last, (asn2 ' + x0 + (as0, n0 + 1) ')[n] = (as2, n2), x0[n1] = (as3, n3 + 1), (asn2 ' + x0)[n1] = (as4, n3), (asn2 ' + x0 + (as0, n0 + 1) ')[n1] = (as5, n4), x0 ≠ [], n1 < # x0, aINV(as3), aINV(as4), aINV(as1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as4, (cext(caf(n3)) = None ⊃ [];cext(caf(n3)).get '), as3), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n3 + 1), as3), t(csf(n3), as4), t(csf(n0), as1), t(csf(0), as), t(csf(n0 + 1), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. ¬ # x0 < n → t(csf((asn2 ' + x0)[n]._2), (asn2 ' + x0)[n]._1) ∧ aINV((asn2 ' + x0)[n]._1), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), n3 ≠ n4 ∨ ¬ move(IOAut(astart, astep, aext))(as5, (cext(caf(n4)) = None ⊃ [];cext(caf(n4)).get '), as3) ∨ ¬ t(csf(n4), as5) ∨ ¬ aINV(as5) ⊦ |
⊦ n < # x → (x + y)[n] = x[n]
(as1, n0) = x0.last, (asn2 ' + x0 + (as0, n0 + 1) ')[n1] = (as5, n4), (asn2 ' + x0)[n1] = (as4, n3), x0[n1] = (as3, n3 + 1), (asn2 ' + x0 + (as0, n0 + 1) ')[n] = (as2, n2), x0 ≠ [], n1 < # x0, aINV(as0), aINV(as), aINV(as1), aINV(as4), aINV(as3), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), move(IOAut(astart, astep, aext))(as4, (cext(caf(n3)) = None ⊃ [];cext(caf(n3)).get '), as3), t(csf(n0 + 1), as0), t(csf(0), as), t(csf(n0), as1), t(csf(n3), as4), t(csf(n3 + 1), as3), ¬ n1 < # asn2 ', ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ n. ¬ # x0 < n → t(csf((asn2 ' + x0)[n]._2), (asn2 ' + x0)[n]._1) ∧ aINV((asn2 ' + x0)[n]._1), n3 ≠ n4 ∨ ¬ move(IOAut(astart, astep, aext))(as5, (cext(caf(n4)) = None ⊃ [];cext(caf(n4)).get '), as3) ∨ ¬ t(csf(n4), as5) ∨ ¬ aINV(as5) ⊦
Used simplifier rules: ⊦ n < # x → (x + y)[n] = x[n]; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ # a ' = 0 +1; (s) ⊦ m < 1 ↔ m = 0; (s) lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic ⊦ a '[0] = a; (s) ⊦ x ≠ [] → x[0] = x.head; (s) ⊦ 0 < m ↔ m ≠ 0; (s) ⊦ # x = 0 ↔ x = []; (s) Used terms: asn2 ', x0 + (as0, n0 + 1) ', n1
| ⊦ n < # x → (x + y)[n] = x[n] |
| (as1, n0) = x0.last, (asn2 ' + x0 + (as0, n0 + 1) ')[n1] = (as5, n4), (asn2 ' + x0)[n1] = (as4, n3), x0[n1] = (as3, n3 + 1), (asn2 ' + x0 + (as0, n0 + 1) ')[n] = (as2, n2), x0 ≠ [], n1 < # x0, aINV(as0), aINV(as), aINV(as1), aINV(as4), aINV(as3), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), move(IOAut(astart, astep, aext))(as4, (cext(caf(n3)) = None ⊃ [];cext(caf(n3)).get '), as3), t(csf(n0 + 1), as0), t(csf(0), as), t(csf(n0), as1), t(csf(n3), as4), t(csf(n3 + 1), as3), ¬ n1 < # asn2 ', ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ n. ¬ # x0 < n → t(csf((asn2 ' + x0)[n]._2), (asn2 ' + x0)[n]._1) ∧ aINV((asn2 ' + x0)[n]._1), n3 ≠ n4 ∨ ¬ move(IOAut(astart, astep, aext))(as5, (cext(caf(n4)) = None ⊃ [];cext(caf(n4)).get '), as3) ∨ ¬ t(csf(n4), as5) ∨ ¬ aINV(as5) ⊦ |
(as1, n0) = x0.last, (asn2 ' + x0 + (as0, n0 + 1) ')[n] = (as2, n2), x0[n1] = (as3, n3 + 1), x0[n1 - 1] = (as4, n3), (x0 + (as0, n0 + 1) ')[n1 - 1] = (as5, n4), n1 ≠ 0, x0 ≠ [], n1 < # x0, aINV(as3), aINV(as4), aINV(as1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as4, (cext(caf(n3)) = None ⊃ [];cext(caf(n3)).get '), as3), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n3 + 1), as3), t(csf(n3), as4), t(csf(n0), as1), t(csf(0), as), t(csf(n0 + 1), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. ¬ # x0 < n → t(csf((asn2 ' + x0)[n]._2), (asn2 ' + x0)[n]._1) ∧ aINV((asn2 ' + x0)[n]._1), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), n3 ≠ n4 ∨ ¬ move(IOAut(astart, astep, aext))(as5, (cext(caf(n4)) = None ⊃ [];cext(caf(n4)).get '), as3) ∨ ¬ t(csf(n4), as5) ∨ ¬ aINV(as5) ⊦
Used simplifier rules: ⊦ m < 1 ↔ m = 0; (s) ⊦ # a ' = 0 +1; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ¬ n < # x → (x + y)[n] = y[n - # x]; (s)
| (as1, n0) = x0.last, (asn2 ' + x0 + (as0, n0 + 1) ')[n] = (as2, n2), x0[n1] = (as3, n3 + 1), x0[n1 - 1] = (as4, n3), (x0 + (as0, n0 + 1) ')[n1 - 1] = (as5, n4), n1 ≠ 0, x0 ≠ [], n1 < # x0, aINV(as3), aINV(as4), aINV(as1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as4, (cext(caf(n3)) = None ⊃ [];cext(caf(n3)).get '), as3), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n3 + 1), as3), t(csf(n3), as4), t(csf(n0), as1), t(csf(0), as), t(csf(n0 + 1), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. ¬ # x0 < n → t(csf((asn2 ' + x0)[n]._2), (asn2 ' + x0)[n]._1) ∧ aINV((asn2 ' + x0)[n]._1), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), n3 ≠ n4 ∨ ¬ move(IOAut(astart, astep, aext))(as5, (cext(caf(n4)) = None ⊃ [];cext(caf(n4)).get '), as3) ∨ ¬ t(csf(n4), as5) ∨ ¬ aINV(as5) ⊦ |
(as1, n0) = x0.last, (x0 + (as0, n0 + 1) ')[n5] = (as5, n4), x0[n5] = (as4, n3), x0[n1] = (as3, n3 + 1), (asn2 ' + x0 + (as0, n0 + 1) ')[n] = (as2, n2), n1 = n5 + 1, n1 ≠ 0, x0 ≠ [], n1 < # x0, aINV(as0), aINV(as), aINV(as1), aINV(as4), aINV(as3), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), move(IOAut(astart, astep, aext))(as4, (cext(caf(n3)) = None ⊃ [];cext(caf(n3)).get '), as3), t(csf(n0 + 1), as0), t(csf(0), as), t(csf(n0), as1), t(csf(n3), as4), t(csf(n3 + 1), as3), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ n. ¬ # x0 < n → t(csf((asn2 ' + x0)[n]._2), (asn2 ' + x0)[n]._1) ∧ aINV((asn2 ' + x0)[n]._1), n3 ≠ n4 ∨ ¬ move(IOAut(astart, astep, aext))(as5, (cext(caf(n4)) = None ⊃ [];cext(caf(n4)).get '), as3) ∨ ¬ t(csf(n4), as5) ∨ ¬ aINV(as5) ⊦
Used simplifier rules: n ≠ 0 ⊦ m = n - 1 ↔ n = m + 1; (elim) Used terms: n1, n5
| (as1, n0) = x0.last, (x0 + (as0, n0 + 1) ')[n5] = (as5, n4), x0[n5] = (as4, n3), x0[n1] = (as3, n3 + 1), (asn2 ' + x0 + (as0, n0 + 1) ')[n] = (as2, n2), n1 = n5 + 1, n1 ≠ 0, x0 ≠ [], n1 < # x0, aINV(as0), aINV(as), aINV(as1), aINV(as4), aINV(as3), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), move(IOAut(astart, astep, aext))(as4, (cext(caf(n3)) = None ⊃ [];cext(caf(n3)).get '), as3), t(csf(n0 + 1), as0), t(csf(0), as), t(csf(n0), as1), t(csf(n3), as4), t(csf(n3 + 1), as3), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ n. ¬ # x0 < n → t(csf((asn2 ' + x0)[n]._2), (asn2 ' + x0)[n]._1) ∧ aINV((asn2 ' + x0)[n]._1), n3 ≠ n4 ∨ ¬ move(IOAut(astart, astep, aext))(as5, (cext(caf(n4)) = None ⊃ [];cext(caf(n4)).get '), as3) ∨ ¬ t(csf(n4), as5) ∨ ¬ aINV(as5) ⊦ |
(as1, n0) = x0.last, (asn2 ' + x0 + (as0, n0 + 1) ')[n] = (as2, n2), x0[n5 + 1] = (as3, n3 + 1), x0[n5] = (as4, n3), (x0 + (as0, n0 + 1) ')[n5] = (as5, n4), x0 ≠ [], n5 + 1 < # x0, aINV(as3), aINV(as4), aINV(as1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as4, (cext(caf(n3)) = None ⊃ [];cext(caf(n3)).get '), as3), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n3 + 1), as3), t(csf(n3), as4), t(csf(n0), as1), t(csf(0), as), t(csf(n0 + 1), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. ¬ # x0 < n → t(csf((asn2 ' + x0)[n]._2), (asn2 ' + x0)[n]._1) ∧ aINV((asn2 ' + x0)[n]._1), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), n3 ≠ n4 ∨ ¬ move(IOAut(astart, astep, aext))(as5, (cext(caf(n4)) = None ⊃ [];cext(caf(n4)).get '), as3) ∨ ¬ t(csf(n4), as5) ∨ ¬ aINV(as5) ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m + 1 ≠ 0; (s)
| (as1, n0) = x0.last, (asn2 ' + x0 + (as0, n0 + 1) ')[n] = (as2, n2), x0[n5 + 1] = (as3, n3 + 1), x0[n5] = (as4, n3), (x0 + (as0, n0 + 1) ')[n5] = (as5, n4), x0 ≠ [], n5 + 1 < # x0, aINV(as3), aINV(as4), aINV(as1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as4, (cext(caf(n3)) = None ⊃ [];cext(caf(n3)).get '), as3), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n3 + 1), as3), t(csf(n3), as4), t(csf(n0), as1), t(csf(0), as), t(csf(n0 + 1), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. ¬ # x0 < n → t(csf((asn2 ' + x0)[n]._2), (asn2 ' + x0)[n]._1) ∧ aINV((asn2 ' + x0)[n]._1), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), n3 ≠ n4 ∨ ¬ move(IOAut(astart, astep, aext))(as5, (cext(caf(n4)) = None ⊃ [];cext(caf(n4)).get '), as3) ∨ ¬ t(csf(n4), as5) ∨ ¬ aINV(as5) ⊦ |
⊦ ¬ n < # x → (x + y)[n] = y[n - # x]
Used simplifier rules: ⊦ ¬ m < n → ¬ m + m0 < n; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ n < # x → (x + a ')[n] = x[n]; (s) a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: x0, (as0, n0 + 1) ', n5
| ⊦ ¬ n < # x → (x + y)[n] = y[n - # x] |
| (as1, n0) = (asn2 ' + x0).last, (asn2 ' + x0 + (as0, n0 + 1) ')[n] = (as2, n2), aINV(as1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n0), as1), t(csf(0), as), t(csf(n0 + 1), as0), n1 ≤ # x0, ¬ n1 < # x0, ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0 + (as0, n0 + 1) ')[n1], (x0 + (as0, n0 + 1) ')[n1]), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), n1 < # x0 → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((asn2 ' + x0)[n1], x0[n1]), ∀ n. ¬ # x0 < n → t(csf((asn2 ' + x0)[n]._2), (asn2 ' + x0)[n]._1) ∧ aINV((asn2 ' + x0)[n]._1), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ |
(as1, n0) = (asn2 ' + x0).last, (asn2 ' + x0 + (as0, n0 + 1) ')[n] = (as2, n2), aINV(as1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n0), as1), t(csf(0), as), t(csf(n0 + 1), as0), ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((as1, n0), (as0, n0 + 1)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. ¬ # x0 < n → t(csf((asn2 ' + x0)[n]._2), (asn2 ' + x0)[n]._1) ∧ aINV((asn2 ' + x0)[n]._1), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦
Used simplifier rules: ⊦ ¬ n < n; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ (a ' + x + y)[# x] = (a ' + x).last; (s) ⊦ m ≤ m; (s) ⊦ n = # x → (x + a ')[n] = a; (s) ⊦ m ≤ n → (n ≤ m ↔ m = n); (s) ⊦ m < n ↔ ¬ n ≤ m; (ss)
| (as1, n0) = (asn2 ' + x0).last, (asn2 ' + x0 + (as0, n0 + 1) ')[n] = (as2, n2), aINV(as1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) (asn2), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as0), t(csf(n0), as1), t(csf(0), as), t(csf(n0 + 1), as0), ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1))) ((as1, n0), (as0, n0 + 1)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. ¬ # x0 < n → t(csf((asn2 ' + x0)[n]._2), (asn2 ' + x0)[n]._1) ∧ aINV((asn2 ' + x0)[n]._1), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ |
⊦ edge(vs × es)(a, b) ↔ es(a, b) ∧ vs(a) ∧ vs(b)
Used simplifier rules: ⊦ m + n = m + n0 ↔ n = n0; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1), λ asn0, asn1. aINV(asn0._1) ∧ aINV(asn1._1) ∧ asn1._2 = asn0._2 + 1 ∧ move(IOAut(astart, astep, aext)) (asn0._1, (cext(caf(asn0._2)) = None ⊃ [];cext(caf(asn0._2)).get '), asn1._1), (as1, n0), (as0, n0 + 1)
| ⊦ edge(vs × es)(a, b) ↔ es(a, b) ∧ vs(a) ∧ vs(b) |
| aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∃ nf. isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (nf(0)) ∧ pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, cext !(caf(asn._2) '), asn0._1))) (⌜nf⌝ ) ⊦ |
aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(0)), pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (⌜asnf⌝ ), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦
Used simplifier rules: ⊦ ext !(a ') = (ext(a) = None ⊃ [];ext(a).get '); (s)
| aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), isroot ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(0)), pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (⌜asnf⌝ ), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ |
⊦ isroot(g)(b) ↔ dom(g)(b) ∧ (∀ a. ¬ edge(g)(a, b))
aINV(as), cINV(csf(0)), cstart(csf(0)), dom ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (⌜asnf⌝ ), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, asnf(0)) ⊦
Used terms: (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext)) (asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1)), asnf(0)
| ⊦ isroot(g)(b) ↔ dom(g)(b) ∧ (∀ a. ¬ edge(g)(a, b)) |
| aINV(as), cINV(csf(0)), cstart(csf(0)), dom ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (⌜asnf⌝ ), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, asnf(0)) ⊦ |
aINV(as), aINV(asnf(0)._1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (⌜asnf⌝ ), t(csf(0), as), t(csf(asnf(0)._2), asnf(0)._1), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, asnf(0)), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦
Used simplifier rules: ⊦ dom(vs × es) = vs; (s)
| aINV(as), aINV(asnf(0)._1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (⌜asnf⌝ ), t(csf(0), as), t(csf(asnf(0)._2), asnf(0)._1), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, asnf(0)), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ |
asnf(0) = (as0, n), aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (⌜asnf⌝ ), t(csf(n), as0), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, asnf(0)) ⊦
Used terms: as0, n
| asnf(0) = (as0, n), aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (⌜asnf⌝ ), t(csf(n), as0), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, asnf(0)) ⊦ |
asnf(0) = (as0, n), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (⌜asnf⌝ ), t(csf(0), as), t(csf(n), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, n)), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦
| asnf(0) = (as0, n), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), pathp ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (⌜asnf⌝ ), t(csf(0), as), t(csf(n), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, n)), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)) ⊦ |
⊦ pathp(g)(σ) ↔ (∀ n. ⌜n⌝ < # σ → dom(g)(σ[n])) ∧ (∀ n. ⌜n + 1⌝ < # σ → edge(g)(σ[n], σ[n + 1]))
asnf(0) = (as0, n), aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n), as0), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, n)), ∀ n. ⌜n⌝ < # ⌜asnf⌝ → dom ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (⌜asnf⌝ [n]), ∀ n. ⌜n + 1⌝ < # ⌜asnf⌝ → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (⌜asnf⌝ [n], ⌜asnf⌝ [n + 1]) ⊦
Used terms: (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext)) (asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1)), ⌜asnf⌝
| ⊦ pathp(g)(σ) ↔ (∀ n. ⌜n⌝ < # σ → dom(g)(σ[n])) ∧ (∀ n. ⌜n + 1⌝ < # σ → edge(g)(σ[n], σ[n + 1])) |
| asnf(0) = (as0, n), aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n), as0), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, n)), ∀ n. ⌜n⌝ < # ⌜asnf⌝ → dom ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (⌜asnf⌝ [n]), ∀ n. ⌜n + 1⌝ < # ⌜asnf⌝ → edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (⌜asnf⌝ [n], ⌜asnf⌝ [n + 1]) ⊦ |
asnf(0) = (as0, n), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(n), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, n)), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1) ⊦
Used simplifier rules: ⊦ dom(vs × es) = vs; (s) ⊦ ⌜nf⌝ [n] = nf(n); (s) ⊦ ⌜m⌝ < ∞; (s) ⊦ # ⌜nf⌝ = ∞; (s) add-comm: ⊦ n∞1 + n∞2 = n∞2 + n∞1; from specification nat-inf add-assoc: ⊦ (n∞ + n∞1) + n∞2 = n∞ + n∞1 + n∞2; from specification nat-inf ⊦ ⌜n⌝ ≠ ∞; (s) ⊦ ⌜m⌝ + n∞ = ∞ ↔ n∞ = ∞; (s) ⊦ n∞ < ∞ ↔ n∞ ≠ ∞; (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ ⌜m + n⌝ = ⌜m⌝ + ⌜n⌝ ; (s)
| asnf(0) = (as0, n), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(n), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, n)), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1) ⊦ |
asnf(0) = (as0, n), n = 0, aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n), as0), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, n)) ⊦
asnf(0) = (as0, n), n ≠ 0, aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n), as0), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, n)) ⊦
Used formulas: n = 0
| asnf(0) = (as0, n), n = 0, aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n), as0), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, n)) ⊦ |
asnf(0) = (as0, 0), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(0), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, 0)), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1) ⊦
| asnf(0) = (as0, 0), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(0), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, 0)), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1) ⊦ |
asnf(0) = (as0, 0), aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as0), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, 0)), ∀ n. asnf(n)._2 = n ⊦
asnf(0) = (as0, 0), aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as0), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, 0)) ⊦ ∀ n. asnf(n)._2 = n
Used formulas: ∀ n. asnf(n)._2 = n
| asnf(0) = (as0, 0), aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as0), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, 0)), ∀ n. asnf(n)._2 = n ⊦ |
asnf(0) = (as0, 0), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(0), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. asnf(n)._2 = n, ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, 0)), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1) ⊦
| asnf(0) = (as0, 0), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(0), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. asnf(n)._2 = n, ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, 0)), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1) ⊦ |
asnf(0) = (as0, 0), aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as0), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, 0)), ∀ n. asnf(n)._2 = n, ∀ n. move(IOAut(astart, astep, aext))(asnf(n)._1, cext !(caf(n) '), asnf(n + 1)._1) ⊦
asnf(0) = (as0, 0), aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as0), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, 0)), ∀ n. asnf(n)._2 = n ⊦ ∀ n. move(IOAut(astart, astep, aext))(asnf(n)._1, cext !(caf(n) '), asnf(n + 1)._1)
Used formulas: ∀ n. move(IOAut(astart, astep, aext))(asnf(n)._1, cext !(caf(n) '), asnf(n + 1)._1)
| asnf(0) = (as0, 0), aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as0), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, 0)), ∀ n. asnf(n)._2 = n, ∀ n. move(IOAut(astart, astep, aext))(asnf(n)._1, cext !(caf(n) '), asnf(n + 1)._1) ⊦ |
start(sf(0)), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)) ⊦ trace(IOAut(start, step, ext))(cext !(⌜caf⌝ ))
asnf(0) = (as0, 0), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(0), as0), ¬ astart(asnf(0)._1), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. move(IOAut(astart, astep, aext))(asnf(n)._1, cext !(caf(n) '), asnf(n + 1)._1), ∀ n. asnf(n)._2 = n, ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, 0)), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1) ⊦
Used terms: cext, aext, astart, caf, λ n. asnf(n)._1, astep
| start(sf(0)), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)) ⊦ trace(IOAut(start, step, ext))(cext !(⌜caf⌝ )) |
| asnf(0) = (as0, 0), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(0), as0), ¬ astart(asnf(0)._1), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. move(IOAut(astart, astep, aext))(asnf(n)._1, cext !(caf(n) '), asnf(n + 1)._1), ∀ n. asnf(n)._2 = n, ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, 0)), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1) ⊦ |
asnf(0) = (as0, 0), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(0), as0), ¬ astart(as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. move(IOAut(astart, astep, aext))(asnf(n)._1, (cext(caf(n)) = None ⊃ [];cext(caf(n)).get '), asnf(n + 1)._1), ∀ n. asnf(n)._2 = n, ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, 0)), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1) ⊦
Used simplifier rules: ⊦ ext !(a ') = (ext(a) = None ⊃ [];ext(a).get '); (s)
| asnf(0) = (as0, 0), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(0), as0), ¬ astart(as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. move(IOAut(astart, astep, aext))(asnf(n)._1, (cext(caf(n)) = None ⊃ [];cext(caf(n)).get '), asnf(n + 1)._1), ∀ n. asnf(n)._2 = n, ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, 0)), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1) ⊦ |
Used terms: csf(0), as0
| asnf(0) = (as0, 0), aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as0), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, 0)), ∀ n. asnf(n)._2 = n ⊦ ∀ n. move(IOAut(astart, astep, aext))(asnf(n)._1, cext !(caf(n) '), asnf(n + 1)._1) |
asnf(0) = (as0, 0), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(0), as0), ¬ move(IOAut(astart, astep, aext))(asnf(n)._1, (cext(caf(n)) = None ⊃ [];cext(caf(n)).get '), asnf(n + 1)._1), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. asnf(n)._2 = n, ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, 0)), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1) ⊦
Used simplifier rules: ⊦ ext !(a ') = (ext(a) = None ⊃ [];ext(a).get '); (s)
| asnf(0) = (as0, 0), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(0), as0), ¬ move(IOAut(astart, astep, aext))(asnf(n)._1, (cext(caf(n)) = None ⊃ [];cext(caf(n)).get '), asnf(n + 1)._1), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. asnf(n)._2 = n, ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, 0)), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1) ⊦ |
asnf(0) = (as0, 0), asnf(n) = (as1, n0), aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as0), t(csf(0), as), ¬ move(IOAut(astart, astep, aext))(as1, (cext(caf(n)) = None ⊃ [];cext(caf(n)).get '), asnf(n + 1)._1), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, 0)), ∀ n. asnf(n)._2 = n ⊦
Used terms: as1, n0
| asnf(0) = (as0, 0), asnf(n) = (as1, n0), aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as0), t(csf(0), as), ¬ move(IOAut(astart, astep, aext))(as1, (cext(caf(n)) = None ⊃ [];cext(caf(n)).get '), asnf(n + 1)._1), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, 0)), ∀ n. asnf(n)._2 = n ⊦ |
asnf(n) = (as1, n0), asnf(0) = (as0, 0), asnf(n + 1) = (as2, n1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(0), as0), ¬ move(IOAut(astart, astep, aext))(as1, (cext(caf(n)) = None ⊃ [];cext(caf(n)).get '), as2), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. asnf(n)._2 = n, ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, 0)), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1) ⊦
Used terms: as2, n1
| asnf(n) = (as1, n0), asnf(0) = (as0, 0), asnf(n + 1) = (as2, n1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(0), as0), ¬ move(IOAut(astart, astep, aext))(as1, (cext(caf(n)) = None ⊃ [];cext(caf(n)).get '), as2), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. asnf(n)._2 = n, ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, 0)), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1) ⊦ |
asnf(n + 1) = (as2, n1), asnf(0) = (as0, 0), asnf(n) = (as1, n0), aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n), asnf(n + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as0), t(csf(0), as), ¬ move(IOAut(astart, astep, aext))(as1, (cext(caf(n)) = None ⊃ [];cext(caf(n)).get '), as2), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, 0)), ∀ n. asnf(n)._2 = n ⊦
Used terms: n
| asnf(n + 1) = (as2, n1), asnf(0) = (as0, 0), asnf(n) = (as1, n0), aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n), asnf(n + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as0), t(csf(0), as), ¬ move(IOAut(astart, astep, aext))(as1, (cext(caf(n)) = None ⊃ [];cext(caf(n)).get '), as2), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, 0)), ∀ n. asnf(n)._2 = n ⊦ |
asnf(n) = (as1, n0), asnf(0) = (as0, 0), asnf(n + 1) = (as2, n0 + 1), aINV(as1), aINV(as2), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2), t(csf(n0), as1), t(csf(n0 + 1), as2), t(csf(0), as), t(csf(0), as0), ¬ move(IOAut(astart, astep, aext))(as1, (cext(caf(n)) = None ⊃ [];cext(caf(n)).get '), as2), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. asnf(n)._2 = n, ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, 0)), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1) ⊦
Used simplifier rules: ⊦ edge(vs × es)(a, b) ↔ es(a, b) ∧ vs(a) ∧ vs(b); (ws)
| asnf(n) = (as1, n0), asnf(0) = (as0, 0), asnf(n + 1) = (as2, n0 + 1), aINV(as1), aINV(as2), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(as1, (cext(caf(n0)) = None ⊃ [];cext(caf(n0)).get '), as2), t(csf(n0), as1), t(csf(n0 + 1), as2), t(csf(0), as), t(csf(0), as0), ¬ move(IOAut(astart, astep, aext))(as1, (cext(caf(n)) = None ⊃ [];cext(caf(n)).get '), as2), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n. asnf(n)._2 = n, ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, 0)), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1) ⊦ |
Used terms: n
| asnf(0) = (as0, 0), aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as0), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, 0)) ⊦ ∀ n. asnf(n)._2 = n |
asnf(0) = (as0, 0), asnf(n)._2 ≠ n, aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(0), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, 0)), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1) ⊦
| asnf(0) = (as0, 0), asnf(n)._2 ≠ n, aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(0), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, 0)), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1) ⊦ |
asnf(0) = (as0, 0), asnf(n) = (as1, n0), n0 ≠ n, aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as0), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, 0)) ⊦
Used terms: as1, n0
| asnf(0) = (as0, 0), asnf(n) = (as1, n0), n0 ≠ n, aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as0), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, 0)) ⊦ |
asnf(n) = (as1, n0), asnf(0) = (as0, 0), n0 ≠ n, aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(0), as0), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, 0)), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1) ⊦
| asnf(n) = (as1, n0), asnf(0) = (as0, 0), n0 ≠ n, aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(0), as0), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, 0)), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1) ⊦ |
asnf(0) = (as0, 0), asnf(n1 +1) = (as1, n0), n0 ≠ n1 +1, aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as0), t(csf(0), as), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, 0)), ∀ asnf, as1, n0, as0, aINV, as, cINV, csf, cstart, cstep, cext, caf, t, astart, astep, aext. ¬ ( asnf(n1) = (as1, n0) ∧ asnf(0) = (as0, 0) ∧ n0 ≠ n1 ∧ aINV(as) ∧ aINV(as0) ∧ cINV(csf(0)) ∧ cstart(csf(0)) ∧ fragω(IOAut(cstart, cstep, cext))(csf, caf) ∧ t(csf(0), as) ∧ t(csf(0), as0) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, 0))) ∧ (∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass)) ∧ (∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as))) ∧ (∀ n. cINV(csf(n))) ∧ (∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1))) ∧ (∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1))) ⊦
Used simplifier rules: Nat freely generated by 0, +1;;
| asnf(0) = (as0, 0), asnf(n1 +1) = (as1, n0), n0 ≠ n1 +1, aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as0), t(csf(0), as), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, 0)), ∀ asnf, as1, n0, as0, aINV, as, cINV, csf, cstart, cstep, cext, caf, t, astart, astep, aext. ¬ ( asnf(n1) = (as1, n0) ∧ asnf(0) = (as0, 0) ∧ n0 ≠ n1 ∧ aINV(as) ∧ aINV(as0) ∧ cINV(csf(0)) ∧ cstart(csf(0)) ∧ fragω(IOAut(cstart, cstep, cext))(csf, caf) ∧ t(csf(0), as) ∧ t(csf(0), as0) ∧ (∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, 0))) ∧ (∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass)) ∧ (∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as))) ∧ (∀ n. cINV(csf(n))) ∧ (∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1))) ∧ (∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1))) ⊦ |
asnf(0) = (as0, 0), asnf(n1 + 1) = (as1, n0), n0 ≠ n1 + 1, aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(0), as0), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, 0)), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1), ∀ asnf0, as2, n, as3, aINV0, as4, cINV0, csf0, cstart0, cstep0, cext0, caf0, t0, astart0, astep0, aext0. asnf0(n1) ≠ (as2, n) ∨ asnf0(0) ≠ (as3, 0) ∨ n = n1 ∨ ¬ aINV0(as4) ∨ ¬ aINV0(as3) ∨ ¬ cINV0(csf0(0)) ∨ ¬ cstart0(csf0(0)) ∨ ¬ fragω(IOAut(cstart0, cstep0, cext0))(csf0, caf0) ∨ ¬ t0(csf0(0), as4) ∨ ¬ t0(csf0(0), as3) ∨ ¬ (∀ a. ¬ edge ( (λ asn. t0(csf0(asn._2), asn._1) ∧ aINV0(asn._1)) × (λ asn, asn0. aINV0(asn._1) ∧ aINV0(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart0, astep0, aext0))(asn._1, (cext0(caf0(asn._2)) = None ⊃ [];cext0(caf0(asn._2)).get '), asn0._1))) (a, (as3, 0))) ∨ ¬(∀ cs, as. cstart0(cs) ∧ t0(cs, as) ∧ aINV0(as) → astart0(as)) ∨ ¬(∀ as, aa, as0. aINV0(as) ∧ astep0(as, aa, as0) → aINV0(as0)) ∨ ¬(∀ cs, ca, cs0. cINV0(cs) ∧ cstep0(cs, ca, cs0) → cINV0(cs0)) ∨ ¬(∀ as. astart0(as) → aINV0(as)) ∨ ¬(∀ cs. cINV0(cs) → (∃ ass. ∀ as. t0(cs, as) ∧ aINV0(as) ↔ as ∈ ass)) ∨ ¬ (∀ cs, ca, cs0, as0. cINV0(cs) ∧ cstep0(cs, ca, cs0) ∧ t0(cs0, as0) ∧ aINV0(as0) → (∃ as. aINV0(as) ∧ move(IOAut(astart0, astep0, aext0))(as, (cext0(ca) = None ⊃ [];cext0(ca).get '), as0) ∧ t0(cs, as))) ∨ ¬(∀ n. cINV0(csf0(n))) ∨ ¬ (∀ n0. edge ( (λ asn. t0(csf0(asn._2), asn._1) ∧ aINV0(asn._1)) × (λ asn, asn0. aINV0(asn._1) ∧ aINV0(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart0, astep0, aext0))(asn._1, (cext0(caf0(asn._2)) = None ⊃ [];cext0(caf0(asn._2)).get '), asn0._1))) (asnf0(n0), asnf0(n0 + 1))) ∨ ¬(∀ n0. t0(csf0(asnf0(n0)._2), asnf0(n0)._1) ∧ aINV0(asnf0(n0)._1)) ⊦
Used simplifier rules: ⊦ m +1 = m + 1; (s)
| asnf(0) = (as0, 0), asnf(n1 + 1) = (as1, n0), n0 ≠ n1 + 1, aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(0), as0), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, 0)), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1), ∀ asnf0, as2, n, as3, aINV0, as4, cINV0, csf0, cstart0, cstep0, cext0, caf0, t0, astart0, astep0, aext0. asnf0(n1) ≠ (as2, n) ∨ asnf0(0) ≠ (as3, 0) ∨ n = n1 ∨ ¬ aINV0(as4) ∨ ¬ aINV0(as3) ∨ ¬ cINV0(csf0(0)) ∨ ¬ cstart0(csf0(0)) ∨ ¬ fragω(IOAut(cstart0, cstep0, cext0))(csf0, caf0) ∨ ¬ t0(csf0(0), as4) ∨ ¬ t0(csf0(0), as3) ∨ ¬ (∀ a. ¬ edge ( (λ asn. t0(csf0(asn._2), asn._1) ∧ aINV0(asn._1)) × (λ asn, asn0. aINV0(asn._1) ∧ aINV0(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart0, astep0, aext0))(asn._1, (cext0(caf0(asn._2)) = None ⊃ [];cext0(caf0(asn._2)).get '), asn0._1))) (a, (as3, 0))) ∨ ¬(∀ cs, as. cstart0(cs) ∧ t0(cs, as) ∧ aINV0(as) → astart0(as)) ∨ ¬(∀ as, aa, as0. aINV0(as) ∧ astep0(as, aa, as0) → aINV0(as0)) ∨ ¬(∀ cs, ca, cs0. cINV0(cs) ∧ cstep0(cs, ca, cs0) → cINV0(cs0)) ∨ ¬(∀ as. astart0(as) → aINV0(as)) ∨ ¬(∀ cs. cINV0(cs) → (∃ ass. ∀ as. t0(cs, as) ∧ aINV0(as) ↔ as ∈ ass)) ∨ ¬ (∀ cs, ca, cs0, as0. cINV0(cs) ∧ cstep0(cs, ca, cs0) ∧ t0(cs0, as0) ∧ aINV0(as0) → (∃ as. aINV0(as) ∧ move(IOAut(astart0, astep0, aext0))(as, (cext0(ca) = None ⊃ [];cext0(ca).get '), as0) ∧ t0(cs, as))) ∨ ¬(∀ n. cINV0(csf0(n))) ∨ ¬ (∀ n0. edge ( (λ asn. t0(csf0(asn._2), asn._1) ∧ aINV0(asn._1)) × (λ asn, asn0. aINV0(asn._1) ∧ aINV0(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart0, astep0, aext0))(asn._1, (cext0(caf0(asn._2)) = None ⊃ [];cext0(caf0(asn._2)).get '), asn0._1))) (asnf0(n0), asnf0(n0 + 1))) ∨ ¬(∀ n0. t0(csf0(asnf0(n0)._2), asnf0(n0)._1) ∧ aINV0(asnf0(n0)._1)) ⊦ |
asnf(n1 + 1) = (as1, n0), asnf(0) = (as0, 0), n0 ≠ n1 + 1, aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n1), asnf(n1 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as0), t(csf(0), as), ∀ asnf0, as2, n, as3, aINV0, as4, cINV0, csf0, cstart0, cstep0, cext0, caf0, t0, astart0, astep0, aext0. asnf0(n1) ≠ (as2, n) ∨ asnf0(0) ≠ (as3, 0) ∨ n = n1 ∨ ¬ aINV0(as4) ∨ ¬ aINV0(as3) ∨ ¬ cINV0(csf0(0)) ∨ ¬ cstart0(csf0(0)) ∨ ¬ fragω(IOAut(cstart0, cstep0, cext0))(csf0, caf0) ∨ ¬ t0(csf0(0), as4) ∨ ¬ t0(csf0(0), as3) ∨ ¬ (∀ a. ¬ edge ( (λ asn. t0(csf0(asn._2), asn._1) ∧ aINV0(asn._1)) × (λ asn, asn0. aINV0(asn._1) ∧ aINV0(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart0, astep0, aext0))(asn._1, (cext0(caf0(asn._2)) = None ⊃ [];cext0(caf0(asn._2)).get '), asn0._1))) (a, (as3, 0))) ∨ ¬(∀ cs, as. cstart0(cs) ∧ t0(cs, as) ∧ aINV0(as) → astart0(as)) ∨ ¬(∀ as, aa, as0. aINV0(as) ∧ astep0(as, aa, as0) → aINV0(as0)) ∨ ¬(∀ cs, ca, cs0. cINV0(cs) ∧ cstep0(cs, ca, cs0) → cINV0(cs0)) ∨ ¬(∀ as. astart0(as) → aINV0(as)) ∨ ¬(∀ cs. cINV0(cs) → (∃ ass. ∀ as. t0(cs, as) ∧ aINV0(as) ↔ as ∈ ass)) ∨ ¬ (∀ cs, ca, cs0, as0. cINV0(cs) ∧ cstep0(cs, ca, cs0) ∧ t0(cs0, as0) ∧ aINV0(as0) → (∃ as. aINV0(as) ∧ move(IOAut(astart0, astep0, aext0))(as, (cext0(ca) = None ⊃ [];cext0(ca).get '), as0) ∧ t0(cs, as))) ∨ ¬(∀ n. cINV0(csf0(n))) ∨ ¬ (∀ n0. edge ( (λ asn. t0(csf0(asn._2), asn._1) ∧ aINV0(asn._1)) × (λ asn, asn0. aINV0(asn._1) ∧ aINV0(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart0, astep0, aext0))(asn._1, (cext0(caf0(asn._2)) = None ⊃ [];cext0(caf0(asn._2)).get '), asn0._1))) (asnf0(n0), asnf0(n0 + 1))) ∨ ¬(∀ n0. t0(csf0(asnf0(n0)._2), asnf0(n0)._1) ∧ aINV0(asnf0(n0)._1)), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, 0)) ⊦
Used terms: n1
| asnf(n1 + 1) = (as1, n0), asnf(0) = (as0, 0), n0 ≠ n1 + 1, aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n1), asnf(n1 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as0), t(csf(0), as), ∀ asnf0, as2, n, as3, aINV0, as4, cINV0, csf0, cstart0, cstep0, cext0, caf0, t0, astart0, astep0, aext0. asnf0(n1) ≠ (as2, n) ∨ asnf0(0) ≠ (as3, 0) ∨ n = n1 ∨ ¬ aINV0(as4) ∨ ¬ aINV0(as3) ∨ ¬ cINV0(csf0(0)) ∨ ¬ cstart0(csf0(0)) ∨ ¬ fragω(IOAut(cstart0, cstep0, cext0))(csf0, caf0) ∨ ¬ t0(csf0(0), as4) ∨ ¬ t0(csf0(0), as3) ∨ ¬ (∀ a. ¬ edge ( (λ asn. t0(csf0(asn._2), asn._1) ∧ aINV0(asn._1)) × (λ asn, asn0. aINV0(asn._1) ∧ aINV0(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart0, astep0, aext0))(asn._1, (cext0(caf0(asn._2)) = None ⊃ [];cext0(caf0(asn._2)).get '), asn0._1))) (a, (as3, 0))) ∨ ¬(∀ cs, as. cstart0(cs) ∧ t0(cs, as) ∧ aINV0(as) → astart0(as)) ∨ ¬(∀ as, aa, as0. aINV0(as) ∧ astep0(as, aa, as0) → aINV0(as0)) ∨ ¬(∀ cs, ca, cs0. cINV0(cs) ∧ cstep0(cs, ca, cs0) → cINV0(cs0)) ∨ ¬(∀ as. astart0(as) → aINV0(as)) ∨ ¬(∀ cs. cINV0(cs) → (∃ ass. ∀ as. t0(cs, as) ∧ aINV0(as) ↔ as ∈ ass)) ∨ ¬ (∀ cs, ca, cs0, as0. cINV0(cs) ∧ cstep0(cs, ca, cs0) ∧ t0(cs0, as0) ∧ aINV0(as0) → (∃ as. aINV0(as) ∧ move(IOAut(astart0, astep0, aext0))(as, (cext0(ca) = None ⊃ [];cext0(ca).get '), as0) ∧ t0(cs, as))) ∨ ¬(∀ n. cINV0(csf0(n))) ∨ ¬ (∀ n0. edge ( (λ asn. t0(csf0(asn._2), asn._1) ∧ aINV0(asn._1)) × (λ asn, asn0. aINV0(asn._1) ∧ aINV0(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart0, astep0, aext0))(asn._1, (cext0(caf0(asn._2)) = None ⊃ [];cext0(caf0(asn._2)).get '), asn0._1))) (asnf0(n0), asnf0(n0 + 1))) ∨ ¬(∀ n0. t0(csf0(asnf0(n0)._2), asnf0(n0)._1) ∧ aINV0(asnf0(n0)._1)), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, 0)) ⊦ |
asnf(0) = (as0, 0), asnf(n1 + 1) = (as1, asnf(n1)._2 + 1), asnf(n1)._2 ≠ n1, aINV(asnf(n1)._1), aINV(as1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(asnf(n1)._1, (cext(caf(asnf(n1)._2)) = None ⊃ [];cext(caf(asnf(n1)._2)).get '), as1), t(csf(asnf(n1)._2), asnf(n1)._1), t(csf(asnf(n1)._2 + 1), as1), t(csf(0), as), t(csf(0), as0), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, 0)), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1), ∀ asnf0, as2, n, as3, aINV0, as4, cINV0, csf0, cstart0, cstep0, cext0, caf0, t0, astart0, astep0, aext0. asnf0(n1) ≠ (as2, n) ∨ asnf0(0) ≠ (as3, 0) ∨ n = n1 ∨ ¬ aINV0(as4) ∨ ¬ aINV0(as3) ∨ ¬ cINV0(csf0(0)) ∨ ¬ cstart0(csf0(0)) ∨ ¬ fragω(IOAut(cstart0, cstep0, cext0))(csf0, caf0) ∨ ¬ t0(csf0(0), as4) ∨ ¬ t0(csf0(0), as3) ∨ ¬ (∀ a. ¬ edge ( (λ asn. t0(csf0(asn._2), asn._1) ∧ aINV0(asn._1)) × (λ asn, asn0. aINV0(asn._1) ∧ aINV0(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart0, astep0, aext0))(asn._1, (cext0(caf0(asn._2)) = None ⊃ [];cext0(caf0(asn._2)).get '), asn0._1))) (a, (as3, 0))) ∨ ¬(∀ cs, as. cstart0(cs) ∧ t0(cs, as) ∧ aINV0(as) → astart0(as)) ∨ ¬(∀ as, aa, as0. aINV0(as) ∧ astep0(as, aa, as0) → aINV0(as0)) ∨ ¬(∀ cs, ca, cs0. cINV0(cs) ∧ cstep0(cs, ca, cs0) → cINV0(cs0)) ∨ ¬(∀ as. astart0(as) → aINV0(as)) ∨ ¬(∀ cs. cINV0(cs) → (∃ ass. ∀ as. t0(cs, as) ∧ aINV0(as) ↔ as ∈ ass)) ∨ ¬ (∀ cs, ca, cs0, as0. cINV0(cs) ∧ cstep0(cs, ca, cs0) ∧ t0(cs0, as0) ∧ aINV0(as0) → (∃ as. aINV0(as) ∧ move(IOAut(astart0, astep0, aext0))(as, (cext0(ca) = None ⊃ [];cext0(ca).get '), as0) ∧ t0(cs, as))) ∨ ¬(∀ n. cINV0(csf0(n))) ∨ ¬ (∀ n0. edge ( (λ asn. t0(csf0(asn._2), asn._1) ∧ aINV0(asn._1)) × (λ asn, asn0. aINV0(asn._1) ∧ aINV0(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart0, astep0, aext0))(asn._1, (cext0(caf0(asn._2)) = None ⊃ [];cext0(caf0(asn._2)).get '), asn0._1))) (asnf0(n0), asnf0(n0 + 1))) ∨ ¬(∀ n0. t0(csf0(asnf0(n0)._2), asnf0(n0)._1) ∧ aINV0(asnf0(n0)._1)) ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m + n = m + n0 ↔ n = n0; (s) ⊦ edge(vs × es)(a, b) ↔ es(a, b) ∧ vs(a) ∧ vs(b); (ws)
| asnf(0) = (as0, 0), asnf(n1 + 1) = (as1, asnf(n1)._2 + 1), asnf(n1)._2 ≠ n1, aINV(asnf(n1)._1), aINV(as1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(asnf(n1)._1, (cext(caf(asnf(n1)._2)) = None ⊃ [];cext(caf(asnf(n1)._2)).get '), as1), t(csf(asnf(n1)._2), asnf(n1)._1), t(csf(asnf(n1)._2 + 1), as1), t(csf(0), as), t(csf(0), as0), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, 0)), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. cINV(csf(n)), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1), ∀ asnf0, as2, n, as3, aINV0, as4, cINV0, csf0, cstart0, cstep0, cext0, caf0, t0, astart0, astep0, aext0. asnf0(n1) ≠ (as2, n) ∨ asnf0(0) ≠ (as3, 0) ∨ n = n1 ∨ ¬ aINV0(as4) ∨ ¬ aINV0(as3) ∨ ¬ cINV0(csf0(0)) ∨ ¬ cstart0(csf0(0)) ∨ ¬ fragω(IOAut(cstart0, cstep0, cext0))(csf0, caf0) ∨ ¬ t0(csf0(0), as4) ∨ ¬ t0(csf0(0), as3) ∨ ¬ (∀ a. ¬ edge ( (λ asn. t0(csf0(asn._2), asn._1) ∧ aINV0(asn._1)) × (λ asn, asn0. aINV0(asn._1) ∧ aINV0(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart0, astep0, aext0))(asn._1, (cext0(caf0(asn._2)) = None ⊃ [];cext0(caf0(asn._2)).get '), asn0._1))) (a, (as3, 0))) ∨ ¬(∀ cs, as. cstart0(cs) ∧ t0(cs, as) ∧ aINV0(as) → astart0(as)) ∨ ¬(∀ as, aa, as0. aINV0(as) ∧ astep0(as, aa, as0) → aINV0(as0)) ∨ ¬(∀ cs, ca, cs0. cINV0(cs) ∧ cstep0(cs, ca, cs0) → cINV0(cs0)) ∨ ¬(∀ as. astart0(as) → aINV0(as)) ∨ ¬(∀ cs. cINV0(cs) → (∃ ass. ∀ as. t0(cs, as) ∧ aINV0(as) ↔ as ∈ ass)) ∨ ¬ (∀ cs, ca, cs0, as0. cINV0(cs) ∧ cstep0(cs, ca, cs0) ∧ t0(cs0, as0) ∧ aINV0(as0) → (∃ as. aINV0(as) ∧ move(IOAut(astart0, astep0, aext0))(as, (cext0(ca) = None ⊃ [];cext0(ca).get '), as0) ∧ t0(cs, as))) ∨ ¬(∀ n. cINV0(csf0(n))) ∨ ¬ (∀ n0. edge ( (λ asn. t0(csf0(asn._2), asn._1) ∧ aINV0(asn._1)) × (λ asn, asn0. aINV0(asn._1) ∧ aINV0(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart0, astep0, aext0))(asn._1, (cext0(caf0(asn._2)) = None ⊃ [];cext0(caf0(asn._2)).get '), asn0._1))) (asnf0(n0), asnf0(n0 + 1))) ∨ ¬(∀ n0. t0(csf0(asnf0(n0)._2), asnf0(n0)._1) ∧ aINV0(asnf0(n0)._1)) ⊦ |
asnf(n1 + 1) = (as1, n + 1), asnf(0) = (as0, 0), asnf(n1) = (as2, n), n ≠ n1, aINV(as0), aINV(as), aINV(as1), aINV(as2), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(as2, (cext(caf(n)) = None ⊃ [];cext(caf(n)).get '), as1), t(csf(0), as0), t(csf(0), as), t(csf(n + 1), as1), t(csf(n), as2), ∀ asnf0, as2, n, as3, aINV0, as4, cINV0, csf0, cstart0, cstep0, cext0, caf0, t0, astart0, astep0, aext0. asnf0(n1) ≠ (as2, n) ∨ asnf0(0) ≠ (as3, 0) ∨ n = n1 ∨ ¬ aINV0(as4) ∨ ¬ aINV0(as3) ∨ ¬ cINV0(csf0(0)) ∨ ¬ cstart0(csf0(0)) ∨ ¬ fragω(IOAut(cstart0, cstep0, cext0))(csf0, caf0) ∨ ¬ t0(csf0(0), as4) ∨ ¬ t0(csf0(0), as3) ∨ ¬ (∀ a. ¬ edge ( (λ asn. t0(csf0(asn._2), asn._1) ∧ aINV0(asn._1)) × (λ asn, asn0. aINV0(asn._1) ∧ aINV0(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart0, astep0, aext0))(asn._1, (cext0(caf0(asn._2)) = None ⊃ [];cext0(caf0(asn._2)).get '), asn0._1))) (a, (as3, 0))) ∨ ¬(∀ cs, as. cstart0(cs) ∧ t0(cs, as) ∧ aINV0(as) → astart0(as)) ∨ ¬(∀ as, aa, as0. aINV0(as) ∧ astep0(as, aa, as0) → aINV0(as0)) ∨ ¬(∀ cs, ca, cs0. cINV0(cs) ∧ cstep0(cs, ca, cs0) → cINV0(cs0)) ∨ ¬(∀ as. astart0(as) → aINV0(as)) ∨ ¬(∀ cs. cINV0(cs) → (∃ ass. ∀ as. t0(cs, as) ∧ aINV0(as) ↔ as ∈ ass)) ∨ ¬ (∀ cs, ca, cs0, as0. cINV0(cs) ∧ cstep0(cs, ca, cs0) ∧ t0(cs0, as0) ∧ aINV0(as0) → (∃ as. aINV0(as) ∧ move(IOAut(astart0, astep0, aext0))(as, (cext0(ca) = None ⊃ [];cext0(ca).get '), as0) ∧ t0(cs, as))) ∨ ¬(∀ n. cINV0(csf0(n))) ∨ ¬ (∀ n0. edge ( (λ asn. t0(csf0(asn._2), asn._1) ∧ aINV0(asn._1)) × (λ asn, asn0. aINV0(asn._1) ∧ aINV0(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart0, astep0, aext0))(asn._1, (cext0(caf0(asn._2)) = None ⊃ [];cext0(caf0(asn._2)).get '), asn0._1))) (asnf0(n0), asnf0(n0 + 1))) ∨ ¬(∀ n0. t0(csf0(asnf0(n0)._2), asnf0(n0)._1) ∧ aINV0(asnf0(n0)._1)), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, 0)) ⊦
Used terms: as2, n
| asnf(n1 + 1) = (as1, n + 1), asnf(0) = (as0, 0), asnf(n1) = (as2, n), n ≠ n1, aINV(as0), aINV(as), aINV(as1), aINV(as2), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(as2, (cext(caf(n)) = None ⊃ [];cext(caf(n)).get '), as1), t(csf(0), as0), t(csf(0), as), t(csf(n + 1), as1), t(csf(n), as2), ∀ asnf0, as2, n, as3, aINV0, as4, cINV0, csf0, cstart0, cstep0, cext0, caf0, t0, astart0, astep0, aext0. asnf0(n1) ≠ (as2, n) ∨ asnf0(0) ≠ (as3, 0) ∨ n = n1 ∨ ¬ aINV0(as4) ∨ ¬ aINV0(as3) ∨ ¬ cINV0(csf0(0)) ∨ ¬ cstart0(csf0(0)) ∨ ¬ fragω(IOAut(cstart0, cstep0, cext0))(csf0, caf0) ∨ ¬ t0(csf0(0), as4) ∨ ¬ t0(csf0(0), as3) ∨ ¬ (∀ a. ¬ edge ( (λ asn. t0(csf0(asn._2), asn._1) ∧ aINV0(asn._1)) × (λ asn, asn0. aINV0(asn._1) ∧ aINV0(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart0, astep0, aext0))(asn._1, (cext0(caf0(asn._2)) = None ⊃ [];cext0(caf0(asn._2)).get '), asn0._1))) (a, (as3, 0))) ∨ ¬(∀ cs, as. cstart0(cs) ∧ t0(cs, as) ∧ aINV0(as) → astart0(as)) ∨ ¬(∀ as, aa, as0. aINV0(as) ∧ astep0(as, aa, as0) → aINV0(as0)) ∨ ¬(∀ cs, ca, cs0. cINV0(cs) ∧ cstep0(cs, ca, cs0) → cINV0(cs0)) ∨ ¬(∀ as. astart0(as) → aINV0(as)) ∨ ¬(∀ cs. cINV0(cs) → (∃ ass. ∀ as. t0(cs, as) ∧ aINV0(as) ↔ as ∈ ass)) ∨ ¬ (∀ cs, ca, cs0, as0. cINV0(cs) ∧ cstep0(cs, ca, cs0) ∧ t0(cs0, as0) ∧ aINV0(as0) → (∃ as. aINV0(as) ∧ move(IOAut(astart0, astep0, aext0))(as, (cext0(ca) = None ⊃ [];cext0(ca).get '), as0) ∧ t0(cs, as))) ∨ ¬(∀ n. cINV0(csf0(n))) ∨ ¬ (∀ n0. edge ( (λ asn. t0(csf0(asn._2), asn._1) ∧ aINV0(asn._1)) × (λ asn, asn0. aINV0(asn._1) ∧ aINV0(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart0, astep0, aext0))(asn._1, (cext0(caf0(asn._2)) = None ⊃ [];cext0(caf0(asn._2)).get '), asn0._1))) (asnf0(n0), asnf0(n0 + 1))) ∨ ¬(∀ n0. t0(csf0(asnf0(n0)._2), asnf0(n0)._1) ∧ aINV0(asnf0(n0)._1)), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, 0)) ⊦ |
Used terms: asnf, as2, n, as0, aINV, as, cINV, csf, cstart, cstep, cext, caf, t, astart, astep, aext
| asnf(0) = (as0, n), n ≠ 0, aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n), as0), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n. cINV(csf(n)), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, n)) ⊦ |
asnf(0) = (as0, n), n ≠ 0, aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(n), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), cINV(csf(n - 1)) ∧ cstep(csf(n - 1), caf(n - 1), csf(n)) ∧ t(csf(n), as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, (cext(caf(n - 1)) = None ⊃ [];cext(caf(n - 1)).get '), as0) ∧ t(csf(n - 1), as)), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, n)), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ n. cINV(csf(n)), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1) ⊦
Used terms: csf(n - 1), caf(n - 1), csf(n), as0
| asnf(0) = (as0, n), n ≠ 0, aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(n), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), cINV(csf(n - 1)) ∧ cstep(csf(n - 1), caf(n - 1), csf(n)) ∧ t(csf(n), as0) ∧ aINV(as0) → (∃ as. aINV(as) ∧ move(IOAut(astart, astep, aext))(as, (cext(caf(n - 1)) = None ⊃ [];cext(caf(n - 1)).get '), as0) ∧ t(csf(n - 1), as)), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, n)), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ n. cINV(csf(n)), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1) ⊦ |
asnf(0) = (as0, n), n ≠ 0, aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n), as0), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), cINV(csf(n - 1)) ∧ cstep(csf(n - 1), caf(n - 1), csf(n)) → aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n - 1)) = None ⊃ [];cext(caf(n - 1)).get '), as0) ∧ t(csf(n - 1), as1), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n. cINV(csf(n)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, n)) ⊦
| asnf(0) = (as0, n), n ≠ 0, aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n), as0), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), cINV(csf(n - 1)) ∧ cstep(csf(n - 1), caf(n - 1), csf(n)) → aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n - 1)) = None ⊃ [];cext(caf(n - 1)).get '), as0) ∧ t(csf(n - 1), as1), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n. cINV(csf(n)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, n)) ⊦ |
asnf(0) = (as0, n), n = n1 + 1, n ≠ 0, aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(n), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), cINV(csf(n1)) ∧ cstep(csf(n1), caf(n1), csf(n)) → aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n1)) = None ⊃ [];cext(caf(n1)).get '), as0) ∧ t(csf(n1), as1), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, n)), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ n. cINV(csf(n)), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1) ⊦
Used simplifier rules: n ≠ 0 ⊦ m = n - 1 ↔ n = m + 1; (elim) Used terms: n, n1
| asnf(0) = (as0, n), n = n1 + 1, n ≠ 0, aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(n), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), cINV(csf(n1)) ∧ cstep(csf(n1), caf(n1), csf(n)) → aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n1)) = None ⊃ [];cext(caf(n1)).get '), as0) ∧ t(csf(n1), as1), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, (as0, n)), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ n. cINV(csf(n)), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1) ⊦ |
asnf(0) = (as0, n1 + 1), aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n1 + 1), as0), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), cINV(csf(n1)) ∧ cstep(csf(n1), caf(n1), csf(n1 + 1)) → aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n1)) = None ⊃ [];cext(caf(n1)).get '), as0) ∧ t(csf(n1), as1), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n. cINV(csf(n)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, asnf(0)) ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m + 1 ≠ 0; (s)
| asnf(0) = (as0, n1 + 1), aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(n1 + 1), as0), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), cINV(csf(n1)) ∧ cstep(csf(n1), caf(n1), csf(n1 + 1)) → aINV(as1) ∧ move(IOAut(astart, astep, aext))(as1, (cext(caf(n1)) = None ⊃ [];cext(caf(n1)).get '), as0) ∧ t(csf(n1), as1), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n. cINV(csf(n)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, asnf(0)) ⊦ |
asnf(0) = (as0, n1 + 1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(n1 + 1), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, asnf(0)), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ n. cINV(csf(n)), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1) ⊦ cINV(csf(n1)) ∧ cstep(csf(n1), caf(n1), csf(n1 + 1))
asnf(0) = (as0, n1 + 1), aINV(as), aINV(as0), aINV(as1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(as1, (cext(caf(n1)) = None ⊃ [];cext(caf(n1)).get '), as0), t(csf(0), as), t(csf(n1 + 1), as0), t(csf(n1), as1), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, asnf(0)), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ n. cINV(csf(n)), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1) ⊦
| asnf(0) = (as0, n1 + 1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(n1 + 1), as0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, asnf(0)), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ n. cINV(csf(n)), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1) ⊦ cINV(csf(n1)) ∧ cstep(csf(n1), caf(n1), csf(n1 + 1)) |
asnf(0) = (as0, n1 + 1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), cstep(csf(n1), caf(n1), csf(n1 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(n1 + 1), as0), ¬ cINV(csf(n1)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, asnf(0)), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ n. cINV(csf(n)), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1) ⊦
Used simplifier rules: ⊦ ¬ step(sf(n), af(n), sf(n + 1)) → (fragω(IOAut(start, step, ext))(sf, af) ↔ false); (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic
| asnf(0) = (as0, n1 + 1), aINV(as), aINV(as0), cINV(csf(0)), cstart(csf(0)), cstep(csf(n1), caf(n1), csf(n1 + 1)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), t(csf(n1 + 1), as0), ¬ cINV(csf(n1)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, asnf(0)), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ n. cINV(csf(n)), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1) ⊦ |
Used terms: n1
| asnf(0) = (as0, n1 + 1), aINV(as), aINV(as0), aINV(as1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(as1, (cext(caf(n1)) = None ⊃ [];cext(caf(n1)).get '), as0), t(csf(0), as), t(csf(n1 + 1), as0), t(csf(n1), as1), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ a. ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (a, asnf(0)), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ n. cINV(csf(n)), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1) ⊦ |
asnf(0) = (as0, n1 + 1), aINV(as1), aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(as1, (cext(caf(n1)) = None ⊃ [];cext(caf(n1)).get '), as0), t(csf(n1), as1), t(csf(n1 + 1), as0), t(csf(0), as), ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) ((as1, n1), asnf(0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n. cINV(csf(n)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) ⊦
Used terms: (as1, n1)
| asnf(0) = (as0, n1 + 1), aINV(as1), aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(as1, (cext(caf(n1)) = None ⊃ [];cext(caf(n1)).get '), as0), t(csf(n1), as1), t(csf(n1 + 1), as0), t(csf(0), as), ¬ edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) ((as1, n1), asnf(0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n. cINV(csf(n)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) ⊦ |
⊦ edge(vs × es)(a, b) ↔ es(a, b) ∧ vs(a) ∧ vs(b)
asnf(0) = (as0, n1 + 1), aINV(as), aINV(as0), aINV(as1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(as1, (cext(caf(n1)) = None ⊃ [];cext(caf(n1)).get '), as0), t(csf(0), as), t(csf(n1 + 1), as0), t(csf(n1), as1), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ n. cINV(csf(n)), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1), ( ¬ aINV((as1, n1)._1) ∨ ¬ aINV(asnf(0)._1) ∨ asnf(0)._2 ≠ (as1, n1)._2 + 1 ∨ ¬ move(IOAut(astart, astep, aext))((as1, n1)._1, (cext(caf((as1, n1)._2)) = None ⊃ [];cext(caf((as1, n1)._2)).get '), asnf(0)._1)) ∨ (¬ t(csf((as1, n1)._2), (as1, n1)._1) ∨ ¬ aINV((as1, n1)._1)) ∨ ¬ t(csf(asnf(0)._2), asnf(0)._1) ∨ ¬ aINV(asnf(0)._1) ⊦
Used terms: λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1), λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext)) (asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1), (as1, n1), asnf(0)
| ⊦ edge(vs × es)(a, b) ↔ es(a, b) ∧ vs(a) ∧ vs(b) |
| asnf(0) = (as0, n1 + 1), aINV(as), aINV(as0), aINV(as1), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(as1, (cext(caf(n1)) = None ⊃ [];cext(caf(n1)).get '), as0), t(csf(0), as), t(csf(n1 + 1), as0), t(csf(n1), as1), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ n. cINV(csf(n)), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1), ( ¬ aINV((as1, n1)._1) ∨ ¬ aINV(asnf(0)._1) ∨ asnf(0)._2 ≠ (as1, n1)._2 + 1 ∨ ¬ move(IOAut(astart, astep, aext))((as1, n1)._1, (cext(caf((as1, n1)._2)) = None ⊃ [];cext(caf((as1, n1)._2)).get '), asnf(0)._1)) ∨ (¬ t(csf((as1, n1)._2), (as1, n1)._1) ∨ ¬ aINV((as1, n1)._1)) ∨ ¬ t(csf(asnf(0)._2), asnf(0)._1) ∨ ¬ aINV(asnf(0)._1) ⊦ |
asnf(0) = (as0, n1 + 1), aINV(as1), aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(as1, (cext(caf(n1)) = None ⊃ [];cext(caf(n1)).get '), as0), t(csf(n1), as1), t(csf(n1 + 1), as0), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n. cINV(csf(n)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), asnf(0)._2 ≠ n1 + 1 ∨ ¬ move(IOAut(astart, astep, aext))(as1, (cext(caf(n1)) = None ⊃ [];cext(caf(n1)).get '), asnf(0)._1) ∨ ¬ t(csf(asnf(0)._2), asnf(0)._1) ∨ ¬ aINV(asnf(0)._1) ⊦
| asnf(0) = (as0, n1 + 1), aINV(as1), aINV(as0), aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), move(IOAut(astart, astep, aext))(as1, (cext(caf(n1)) = None ⊃ [];cext(caf(n1)).get '), as0), t(csf(n1), as1), t(csf(n1 + 1), as0), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ n0. t(csf(asnf(n0)._2), asnf(n0)._1) ∧ aINV(asnf(n0)._1), ∀ n0. edge ( (λ asn. t(csf(asn._2), asn._1) ∧ aINV(asn._1)) × (λ asn, asn0. aINV(asn._1) ∧ aINV(asn0._1) ∧ asn0._2 = asn._2 + 1 ∧ move(IOAut(astart, astep, aext))(asn._1, (cext(caf(asn._2)) = None ⊃ [];cext(caf(asn._2)).get '), asn0._1))) (asnf(n0), asnf(n0 + 1)), ∀ n. cINV(csf(n)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), asnf(0)._2 ≠ n1 + 1 ∨ ¬ move(IOAut(astart, astep, aext))(as1, (cext(caf(n1)) = None ⊃ [];cext(caf(n1)).get '), asnf(0)._1) ∨ ¬ t(csf(asnf(0)._2), asnf(0)._1) ∨ ¬ aINV(asnf(0)._1) ⊦ |
Used terms: as2, n
| aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)) ⊦ ∀ n. cINV(csf(n)) |
aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ cINV(csf(n)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) ⊦
| aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ cINV(csf(n)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) ⊦ |
frag(IOAut(start, step, ext))(σ, α), iNV(σ[0]), ∀ s, a, s0. iNV(s) ∧ step(s, a, s0) → iNV(s0) ⊦ ∀ n. ⌜n⌝ < # σ → iNV(σ[n])
aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ cINV(csf(n)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)) ⊦ frag(IOAut(cstart, cstep, cext))(⌜csf⌝ , ⌜caf⌝ ) ∧ cINV(⌜csf⌝ [0]) ∧ (∀ s, a, s0. cINV(s) ∧ cstep(s, a, s0) → cINV(s0))
aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ cINV(csf(n)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. ⌜n⌝ < # ⌜csf⌝ → cINV(⌜csf⌝ [n]) ⊦
Used terms: cext, ⌜caf⌝ , cstart, ⌜csf⌝ , cINV, cstep
| frag(IOAut(start, step, ext))(σ, α), iNV(σ[0]), ∀ s, a, s0. iNV(s) ∧ step(s, a, s0) → iNV(s0) ⊦ ∀ n. ⌜n⌝ < # σ → iNV(σ[n]) |
| aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ cINV(csf(n)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)) ⊦ frag(IOAut(cstart, cstep, cext))(⌜csf⌝ , ⌜caf⌝ ) ∧ cINV(⌜csf⌝ [0]) ∧ (∀ s, a, s0. cINV(s) ∧ cstep(s, a, s0) → cINV(s0)) |
aINV(as), cINV(csf(0)), cINV(cs), cstart(csf(0)), cstep(cs, ca, cs0), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ cINV(csf(n)), ¬ cINV(cs0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) ⊦
Used simplifier rules: ⊦ ⌜nf⌝ [n] = nf(n); (s) ⊦ frag(ioa)(⌜sf⌝ , ⌜af⌝ ) ↔ fragω(ioa)(sf, af); (s)
| aINV(as), cINV(csf(0)), cINV(cs), cstart(csf(0)), cstep(cs, ca, cs0), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ cINV(csf(n)), ¬ cINV(cs0), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) ⊦ |
Used terms: cs, ca, cs0
| aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ cINV(csf(n)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ n. ⌜n⌝ < # ⌜csf⌝ → cINV(⌜csf⌝ [n]) ⊦ |
aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ cINV(csf(n)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ n0. cINV(csf(n0)) ⊦
Used simplifier rules: ⊦ ⌜nf⌝ [n] = nf(n); (s) ⊦ ⌜m⌝ < ∞; (s) ⊦ # ⌜nf⌝ = ∞; (s)
| aINV(as), cINV(csf(0)), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, caf), t(csf(0), as), ¬ cINV(csf(n)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜caf⌝ )), ∀ 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) = None ⊃ [];cext(ca).get '), as0) ∧ t(cs, as)), ∀ cs. cINV(cs) → (∃ ass. ∀ as. t(cs, as) ∧ aINV(as) ↔ as ∈ ass), ∀ 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), ∀ n0. cINV(csf(n0)) ⊦ |
Used terms: n
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.