| ≤F(cioaut, aioaut) ⊦ C_≤T_A(cioaut, aioaut) |
≤F(cioaut, aioaut), ¬ C_≤T_A(cioaut, aioaut) ⊦
| ≤F(cioaut, aioaut), ¬ C_≤T_A(cioaut, aioaut) ⊦ |
cioaut = IOAut(cstart, cstep, cext), ≤F(cioaut, aioaut), ¬ C_≤T_A(cioaut, aioaut) ⊦
Used simplifier rules: IOAutomaton('s, 'a, 'e) freely generated by IOAut;;
| cioaut = IOAut(cstart, cstep, cext), ≤F(cioaut, aioaut), ¬ C_≤T_A(cioaut, aioaut) ⊦ |
≤F(IOAut(cstart, cstep, cext), aioaut), ¬ C_≤T_A(IOAut(cstart, cstep, cext), aioaut) ⊦
| ≤F(IOAut(cstart, cstep, cext), aioaut), ¬ C_≤T_A(IOAut(cstart, cstep, cext), aioaut) ⊦ |
aioaut = IOAut(astart, astep, aext), ≤F(IOAut(cstart, cstep, cext), aioaut), ¬ C_≤T_A(IOAut(cstart, cstep, cext), aioaut) ⊦
Used simplifier rules: IOAutomaton('s, 'a, 'e) freely generated by IOAut;;
| aioaut = IOAut(astart, astep, aext), ≤F(IOAut(cstart, cstep, cext), aioaut), ¬ C_≤T_A(IOAut(cstart, cstep, cext), aioaut) ⊦ |
≤F(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)), ¬ C_≤T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)) ⊦
| ≤F(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)), ¬ C_≤T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)) ⊦ |
⊦ ≤F(cioaut, aioaut) ↔ (∃ r. fwsim(cioaut, aioaut, r))
¬ C_≤T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)), ∃ r. fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r) ⊦
Used terms: IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)
| ⊦ ≤F(cioaut, aioaut) ↔ (∃ r. fwsim(cioaut, aioaut, r)) |
| ¬ C_≤T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)), ∃ r. fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r) ⊦ |
fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), ¬ C_≤T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)) ⊦
| fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), ¬ C_≤T_A(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext)) ⊦ |
⊦ C_≤T_A(cioaut, aioaut) ↔ (∀ β. trace(cioaut)(β) → trace(aioaut)(β))
fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), ∃ β. ¬(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)(β)) |
| fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), ∃ β. ¬(trace(IOAut(cstart, cstep, cext))(β) → trace(IOAut(astart, astep, aext))(β)) ⊦ |
fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), trace(IOAut(cstart, cstep, cext))(β), ¬ trace(IOAut(astart, astep, aext))(β) ⊦
| fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), trace(IOAut(cstart, cstep, cext))(β), ¬ trace(IOAut(astart, astep, aext))(β) ⊦ |
⊦ trace(IOAut(start, step, ext))(β) ↔ (∃ σ, α. β = ext !(α) ∧ exec(IOAut(start, step, ext))(σ, α))
fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), ¬ 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))(σ, α)) |
| fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), ¬ trace(IOAut(astart, astep, aext))(β), ∃ σ, α. β = cext !(α) ∧ exec(IOAut(cstart, cstep, cext))(σ, α) ⊦ |
cstart(cσ[0]), frag(IOAut(cstart, cstep, cext))(cσ, α), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), ¬ 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σ, α), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), ¬ trace(IOAut(astart, astep, aext))(cext !(α)) ⊦ |
cstart(cσ[0]), frag(IOAut(cstart, cstep, cext))(cσ, α), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), ¬ trace(IOAut(astart, astep, aext))(cext !(α)), ∀ n, as. ∃ asl. cstep(cσ[n], α[n], cσ[n + 1]) ∧ r(as, cσ[n]) → (∃ aal. frag*(IOAut(astart, astep, aext))(asl, aal) ∧ # aal + 1 = # asl ∧ aext !(⌜aal⌝ ) = cext !(⌜α[n] '⌝ ) ∧ r(asl.last, cσ[n + 1]) ∧ asl.head = as) ⊦
cstart(cσ[0]), frag(IOAut(cstart, cstep, cext))(cσ, α), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), ¬ trace(IOAut(astart, astep, aext))(cext !(α)) ⊦ ∀ n, as. ∃ asl. cstep(cσ[n], α[n], cσ[n + 1]) ∧ r(as, cσ[n]) → (∃ aal. frag*(IOAut(astart, astep, aext))(asl, aal) ∧ # aal + 1 = # asl ∧ aext !(⌜aal⌝ ) = cext !(⌜α[n] '⌝ ) ∧ r(asl.last, cσ[n + 1]) ∧ asl.head = as)
Used formulas: ∀ n, as. ∃ asl. cstep(cσ[n], α[n], cσ[n + 1]) ∧ r(as, cσ[n]) → (∃ aal. frag*(IOAut(astart, astep, aext))(asl, aal) ∧ # aal + 1 = # asl ∧ aext !(⌜aal⌝ ) = cext !(⌜α[n] '⌝ ) ∧ r(asl.last, cσ[n + 1]) ∧ asl.head = as)
| cstart(cσ[0]), frag(IOAut(cstart, cstep, cext))(cσ, α), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), ¬ trace(IOAut(astart, astep, aext))(cext !(α)), ∀ n, as. ∃ asl. cstep(cσ[n], α[n], cσ[n + 1]) ∧ r(as, cσ[n]) → (∃ aal. frag*(IOAut(astart, astep, aext))(asl, aal) ∧ # aal + 1 = # asl ∧ aext !(⌜aal⌝ ) = cext !(⌜α[n] '⌝ ) ∧ r(asl.last, cσ[n + 1]) ∧ asl.head = as) ⊦ |
cstart(cσ[0]), frag(IOAut(cstart, cstep, cext))(cσ, α), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), ¬ trace(IOAut(astart, astep, aext))(cext !(α)), ∀ n0, as0. cstep(cσ[n0], α[n0], cσ[n0 + 1]) ∧ r(as0, cσ[n0]) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(⌜aal⌝ ) = cext !(⌜α[n0] '⌝ ) ∧ r(f_Nat_'as->List<'as>(n0, as0).last, cσ[n0 + 1]) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0) ⊦
| cstart(cσ[0]), frag(IOAut(cstart, cstep, cext))(cσ, α), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), ¬ trace(IOAut(astart, astep, aext))(cext !(α)), ∀ n0, as0. cstep(cσ[n0], α[n0], cσ[n0 + 1]) ∧ r(as0, cσ[n0]) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(⌜aal⌝ ) = cext !(⌜α[n0] '⌝ ) ∧ r(f_Nat_'as->List<'as>(n0, as0).last, cσ[n0 + 1]) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0) ⊦ |
cstart(cσ[0]), frag(IOAut(cstart, cstep, cext))(cσ, α), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), ¬ trace(IOAut(astart, astep, aext))(cext !(α)), ∀ n0, as0. cstep(cσ[n0], α[n0], cσ[n0 + 1]) ∧ r(as0, cσ[n0]) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(⌜aal⌝ ) = cext !(⌜α[n0] '⌝ ) ∧ r(f_Nat_'as->List<'as>(n0, as0).last, cσ[n0 + 1]) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∃ as. r(as, cσ[0]) ∧ astart(as) ⊦
cstart(cσ[0]), frag(IOAut(cstart, cstep, cext))(cσ, α), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), ¬ trace(IOAut(astart, astep, aext))(cext !(α)), ∀ n0, as0. cstep(cσ[n0], α[n0], cσ[n0 + 1]) ∧ r(as0, cσ[n0]) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(⌜aal⌝ ) = cext !(⌜α[n0] '⌝ ) ∧ r(f_Nat_'as->List<'as>(n0, as0).last, cσ[n0 + 1]) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0) ⊦ ∃ as. r(as, cσ[0]) ∧ astart(as)
Used formulas: ∃ as. r(as, cσ[0]) ∧ astart(as)
| cstart(cσ[0]), frag(IOAut(cstart, cstep, cext))(cσ, α), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), ¬ trace(IOAut(astart, astep, aext))(cext !(α)), ∀ n0, as0. cstep(cσ[n0], α[n0], cσ[n0 + 1]) ∧ r(as0, cσ[n0]) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(⌜aal⌝ ) = cext !(⌜α[n0] '⌝ ) ∧ r(f_Nat_'as->List<'as>(n0, as0).last, cσ[n0 + 1]) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∃ as. r(as, cσ[0]) ∧ astart(as) ⊦ |
astart(as), cstart(cσ[0]), frag(IOAut(cstart, cstep, cext))(cσ, α), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, cσ[0]), ¬ trace(IOAut(astart, astep, aext))(cext !(α)), ∀ n0, as0. cstep(cσ[n0], α[n0], cσ[n0 + 1]) ∧ r(as0, cσ[n0]) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(α[n0]) = None ⊃ [];cext(α[n0]).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, cσ[n0 + 1]) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0) ⊦
Used simplifier rules: ⊦ ⌜x⌝ = ⌜x0⌝ ↔ x = x0; (s) ⊦ ext !(a ') = (ext(a) = None ⊃ [];ext(a).get '); (s) ⊦ ext !(⌜al⌝ ) = ⌜ext !(al)⌝ ; (s)
| astart(as), cstart(cσ[0]), frag(IOAut(cstart, cstep, cext))(cσ, α), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, cσ[0]), ¬ trace(IOAut(astart, astep, aext))(cext !(α)), ∀ n0, as0. cstep(cσ[n0], α[n0], cσ[n0 + 1]) ∧ r(as0, cσ[n0]) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(α[n0]) = None ⊃ [];cext(α[n0]).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, cσ[n0 + 1]) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0) ⊦ |
⊦ ∃ lf. lf(0) = a ' ∧ (∀ n. lf(n + 1) = nextl(n, lf(n).last))
astart(as), cstart(cσ[0]), frag(IOAut(cstart, cstep, cext))(cσ, α), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, cσ[0]), ¬ trace(IOAut(astart, astep, aext))(cext !(α)), ∀ n0, as0. cstep(cσ[n0], α[n0], cσ[n0 + 1]) ∧ r(as0, cσ[n0]) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(α[n0]) = None ⊃ [];cext(α[n0]).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, cσ[n0 + 1]) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∃ lf. lf(0) = as ' ∧ (∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last)) ⊦
Used terms: as, f_Nat_'as->List<'as>
| ⊦ ∃ lf. lf(0) = a ' ∧ (∀ n. lf(n + 1) = nextl(n, lf(n).last)) |
| astart(as), cstart(cσ[0]), frag(IOAut(cstart, cstep, cext))(cσ, α), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, cσ[0]), ¬ trace(IOAut(astart, astep, aext))(cext !(α)), ∀ n0, as0. cstep(cσ[n0], α[n0], cσ[n0 + 1]) ∧ r(as0, cσ[n0]) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(α[n0]) = None ⊃ [];cext(α[n0]).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, cσ[n0 + 1]) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∃ lf. lf(0) = as ' ∧ (∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last)) ⊦ |
lf(0) = as ', astart(as), cstart(cσ[0]), frag(IOAut(cstart, cstep, cext))(cσ, α), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, cσ[0]), ¬ trace(IOAut(astart, astep, aext))(cext !(α)), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n0, as0. cstep(cσ[n0], α[n0], cσ[n0 + 1]) ∧ r(as0, cσ[n0]) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(α[n0]) = None ⊃ [];cext(α[n0]).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, cσ[n0 + 1]) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0) ⊦
| lf(0) = as ', astart(as), cstart(cσ[0]), frag(IOAut(cstart, cstep, cext))(cσ, α), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, cσ[0]), ¬ trace(IOAut(astart, astep, aext))(cext !(α)), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n0, as0. cstep(cσ[n0], α[n0], cσ[n0 + 1]) ∧ r(as0, cσ[n0]) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(α[n0]) = None ⊃ [];cext(α[n0]).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, cσ[n0 + 1]) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0) ⊦ |
cσ = ⌜csl⌝ , lf(0) = as ', astart(as), cstart(cσ[0]), frag(IOAut(cstart, cstep, cext))(cσ, α), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, cσ[0]), ¬ trace(IOAut(astart, astep, aext))(cext !(α)), ∀ n0, as0. cstep(cσ[n0], α[n0], cσ[n0 + 1]) ∧ r(as0, cσ[n0]) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(α[n0]) = None ⊃ [];cext(α[n0]).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, cσ[n0 + 1]) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last) ⊦
cσ = ⌜csf⌝ , lf(0) = as ', astart(as), cstart(cσ[0]), frag(IOAut(cstart, cstep, cext))(cσ, α), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, cσ[0]), ¬ trace(IOAut(astart, astep, aext))(cext !(α)), ∀ n0, as0. cstep(cσ[n0], α[n0], cσ[n0 + 1]) ∧ r(as0, cσ[n0]) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(α[n0]) = None ⊃ [];cext(α[n0]).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, cσ[n0 + 1]) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last) ⊦
Used simplifier rules: Stream('a) freely generated by ⌜ ⌝, ⌜ ⌝;;
| cσ = ⌜csl⌝ , lf(0) = as ', astart(as), cstart(cσ[0]), frag(IOAut(cstart, cstep, cext))(cσ, α), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, cσ[0]), ¬ trace(IOAut(astart, astep, aext))(cext !(α)), ∀ n0, as0. cstep(cσ[n0], α[n0], cσ[n0 + 1]) ∧ r(as0, cσ[n0]) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(α[n0]) = None ⊃ [];cext(α[n0]).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, cσ[n0 + 1]) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last) ⊦ |
lf(0) = as ', astart(as), cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csl[0]), ¬ trace*(IOAut(astart, astep, aext))(cext !(cal)), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n0, as0. cstep(csl[n0], cal[n0], csl[n0 + 1]) ∧ r(as0, csl[n0]) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(cal[n0]) = None ⊃ [];cext(cal[n0]).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csl[n0 + 1]) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0) ⊦
Used simplifier rules: ⊦ ⌜x⌝ [n] = x[n]; (s) ⊦ trace(ioa)(⌜el⌝ ) ↔ trace*(ioa)(el); (s) ⊦ ext !(⌜al⌝ ) = ⌜ext !(al)⌝ ; (s) ⊦ ⌜x⌝ .l = x; (s) ⊦ finp(σ) ↔ (∃ x. ⌜x⌝ = σ); (as) ⊦ frag(ioa)(⌜sl⌝ , α) ↔ frag*(ioa)(sl, α.l) ∧ finp(α); (s)
| lf(0) = as ', astart(as), cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csl[0]), ¬ trace*(IOAut(astart, astep, aext))(cext !(cal)), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n0, as0. cstep(csl[n0], cal[n0], csl[n0 + 1]) ∧ r(as0, csl[n0]) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(cal[n0]) = None ⊃ [];cext(cal[n0]).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csl[n0 + 1]) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0) ⊦ |
fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), exec*(IOAut(cstart, cstep, cext))(csl, cal) ⊦ ∃ asl, aal. r(asl.last, csl.last) ∧ exec*(IOAut(astart, astep, aext))(asl, aal) ∧ aext !(aal) = cext !(cal)
lf(0) = as ', astart(as), cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csl[0]), ¬ trace*(IOAut(astart, astep, aext))(cext !(cal)), ∀ n0, as0. cstep(csl[n0], cal[n0], csl[n0 + 1]) ∧ r(as0, csl[n0]) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(cal[n0]) = None ⊃ [];cext(cal[n0]).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csl[n0 + 1]) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∃ asl, aal. r(asl.last, csl.last) ∧ exec*(IOAut(astart, astep, aext))(asl, aal) ∧ aext !(aal) = cext !(cal) ⊦
Used simplifier rules: ⊦ exec*(ioa)(sl, al) ↔ frag*(ioa)(sl, al) ∧ ioa.start(sl[0]); (s) ⊦ IOAut(start, step, ext).start = start; (s) Used terms: cstep, cext, aext, r, astart, cstart, cal, astep, csl
| fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), exec*(IOAut(cstart, cstep, cext))(csl, cal) ⊦ ∃ asl, aal. r(asl.last, csl.last) ∧ exec*(IOAut(astart, astep, aext))(asl, aal) ∧ aext !(aal) = cext !(cal) |
| lf(0) = as ', astart(as), cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csl[0]), ¬ trace*(IOAut(astart, astep, aext))(cext !(cal)), ∀ n0, as0. cstep(csl[n0], cal[n0], csl[n0 + 1]) ∧ r(as0, csl[n0]) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(cal[n0]) = None ⊃ [];cext(cal[n0]).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csl[n0 + 1]) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∃ asl, aal. r(asl.last, csl.last) ∧ exec*(IOAut(astart, astep, aext))(asl, aal) ∧ aext !(aal) = cext !(cal) ⊦ |
aext !(aal) = cext !(cal), lf(0) = as ', astart(as), astart(asl[0]), cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), frag*(IOAut(astart, astep, aext))(asl, aal), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csl[0]), r(asl.last, csl.last), ¬ trace*(IOAut(astart, astep, aext))(cext !(cal)), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n0, as0. cstep(csl[n0], cal[n0], csl[n0 + 1]) ∧ r(as0, csl[n0]) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(cal[n0]) = None ⊃ [];cext(cal[n0]).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csl[n0 + 1]) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0) ⊦
Used simplifier rules: ⊦ IOAut(start, step, ext).start = start; (s) ⊦ exec*(ioa)(sl, al) ↔ frag*(ioa)(sl, al) ∧ ioa.start(sl[0]); (s)
| aext !(aal) = cext !(cal), lf(0) = as ', astart(as), astart(asl[0]), cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), frag*(IOAut(astart, astep, aext))(asl, aal), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csl[0]), r(asl.last, csl.last), ¬ trace*(IOAut(astart, astep, aext))(cext !(cal)), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n0, as0. cstep(csl[n0], cal[n0], csl[n0 + 1]) ∧ r(as0, csl[n0]) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(cal[n0]) = None ⊃ [];cext(cal[n0]).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csl[n0 + 1]) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0) ⊦ |
⊦ trace*(IOAut(start, step, ext))(el) ↔ (∃ sl, al. el = ext !(al) ∧ exec*(IOAut(start, step, ext))(sl, al))
aext !(aal) = cext !(cal), lf(0) = as ', astart(asl[0]), astart(as), cstart(csl[0]), frag*(IOAut(astart, astep, aext))(asl, aal), frag*(IOAut(cstart, cstep, cext))(csl, cal), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(asl.last, csl.last), r(as, csl[0]), ∀ n0, as0. cstep(csl[n0], cal[n0], csl[n0 + 1]) ∧ r(as0, csl[n0]) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(cal[n0]) = None ⊃ [];cext(cal[n0]).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csl[n0 + 1]) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ sl, al. ¬(cext !(cal) = aext !(al) ∧ exec*(IOAut(astart, astep, aext))(sl, al)) ⊦
Used terms: astart, astep, aext, cext !(cal)
| ⊦ trace*(IOAut(start, step, ext))(el) ↔ (∃ sl, al. el = ext !(al) ∧ exec*(IOAut(start, step, ext))(sl, al)) |
| aext !(aal) = cext !(cal), lf(0) = as ', astart(asl[0]), astart(as), cstart(csl[0]), frag*(IOAut(astart, astep, aext))(asl, aal), frag*(IOAut(cstart, cstep, cext))(csl, cal), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(asl.last, csl.last), r(as, csl[0]), ∀ n0, as0. cstep(csl[n0], cal[n0], csl[n0 + 1]) ∧ r(as0, csl[n0]) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(cal[n0]) = None ⊃ [];cext(cal[n0]).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csl[n0 + 1]) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ sl, al. ¬(cext !(cal) = aext !(al) ∧ exec*(IOAut(astart, astep, aext))(sl, al)) ⊦ |
aext !(aal) = cext !(cal), lf(0) = as ', astart(as), astart(asl[0]), cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), frag*(IOAut(astart, astep, aext))(asl, aal), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csl[0]), r(asl.last, csl.last), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n0, as0. cstep(csl[n0], cal[n0], csl[n0 + 1]) ∧ r(as0, csl[n0]) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(cal[n0]) = None ⊃ [];cext(cal[n0]).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csl[n0 + 1]) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ sl, al. cext !(cal) ≠ aext !(al) ∨ ¬ frag*(IOAut(astart, astep, aext))(sl, al) ∨ ¬ astart(sl[0]) ⊦
Used simplifier rules: ⊦ IOAut(start, step, ext).start = start; (s) ⊦ exec*(ioa)(sl, al) ↔ frag*(ioa)(sl, al) ∧ ioa.start(sl[0]); (s)
| aext !(aal) = cext !(cal), lf(0) = as ', astart(as), astart(asl[0]), cstart(csl[0]), frag*(IOAut(cstart, cstep, cext))(csl, cal), frag*(IOAut(astart, astep, aext))(asl, aal), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csl[0]), r(asl.last, csl.last), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n0, as0. cstep(csl[n0], cal[n0], csl[n0 + 1]) ∧ r(as0, csl[n0]) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(cal[n0]) = None ⊃ [];cext(cal[n0]).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csl[n0 + 1]) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ sl, al. cext !(cal) ≠ aext !(al) ∨ ¬ frag*(IOAut(astart, astep, aext))(sl, al) ∨ ¬ astart(sl[0]) ⊦ |
Used terms: asl, aal
| cσ = ⌜csf⌝ , lf(0) = as ', astart(as), cstart(cσ[0]), frag(IOAut(cstart, cstep, cext))(cσ, α), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, cσ[0]), ¬ trace(IOAut(astart, astep, aext))(cext !(α)), ∀ n0, as0. cstep(cσ[n0], α[n0], cσ[n0 + 1]) ∧ r(as0, cσ[n0]) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(α[n0]) = None ⊃ [];cext(α[n0]).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, cσ[n0 + 1]) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last) ⊦ |
lf(0) = as ', astart(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0) ⊦
Used simplifier rules: ⊦ ⌜nf⌝ [n] = nf(n); (s) ⊦ ⌜nf⌝ .f = nf; (s) ⊦ finp(σ) ↔ ¬(∃ nf. ⌜nf⌝ = σ); (ss) ⊦ frag(ioa)(⌜sf⌝ , α) ↔ fragω(ioa)(sf, α.f) ∧ ¬ finp(α); (s)
| lf(0) = as ', astart(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0) ⊦ |
lf(0) = as ', astart(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [] ⊦
lf(0) = as ', astart(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last) ⊦ ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ []
Used formulas: ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ []
| lf(0) = as ', astart(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [] ⊦ |
lf(0) = as ', astart(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ n. ∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n, lf(n).last) ∧ aext !(⌜aal⌝ ) = cext !(⌜nf(n) '⌝ ) ∧ r(lf(n + 1).last, csf(n + 1)) ⊦
lf(0) = as ', astart(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0) ⊦ ∀ n. ∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n, lf(n).last) ∧ aext !(⌜aal⌝ ) = cext !(⌜nf(n) '⌝ ) ∧ r(lf(n + 1).last, csf(n + 1))
Used formulas: ∀ n. ∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n, lf(n).last) ∧ aext !(⌜aal⌝ ) = cext !(⌜nf(n) '⌝ ) ∧ r(lf(n + 1).last, csf(n + 1))
| lf(0) = as ', astart(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ n. ∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n, lf(n).last) ∧ aext !(⌜aal⌝ ) = cext !(⌜nf(n) '⌝ ) ∧ r(lf(n + 1).last, csf(n + 1)) ⊦ |
lf(0) = as ', astart(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n0. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, lf(n0).last), f_Nat->List<'aa>(n0)) ∧ # f_Nat->List<'aa>(n0) + 1 = # f_Nat_'as->List<'as>(n0, lf(n0).last) ∧ aext !(⌜f_Nat->List<'aa>(n0)⌝ ) = cext !(⌜nf(n0) '⌝ ) ∧ r(lf(n0 + 1).last, csf(n0 + 1)), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [] ⊦
| lf(0) = as ', astart(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n0. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, lf(n0).last), f_Nat->List<'aa>(n0)) ∧ # f_Nat->List<'aa>(n0) + 1 = # f_Nat_'as->List<'as>(n0, lf(n0).last) ∧ aext !(⌜f_Nat->List<'aa>(n0)⌝ ) = cext !(⌜nf(n0) '⌝ ) ∧ r(lf(n0 + 1).last, csf(n0 + 1)), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [] ⊦ |
start(sf(0)), ∀ n. move(IOAut(start, step, ext))(sf(n), cext !(caf(n) '), sf(n + 1)) ⊦ trace(IOAut(start, step, ext))(cext !(⌜caf⌝ ))
lf(0) = as ', astart(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ n0. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, lf(n0).last), f_Nat->List<'aa>(n0)) ∧ # f_Nat->List<'aa>(n0) + 1 = # f_Nat_'as->List<'as>(n0, lf(n0).last) ∧ aext !(⌜f_Nat->List<'aa>(n0)⌝ ) = cext !(⌜nf(n0) '⌝ ) ∧ r(lf(n0 + 1).last, csf(n0 + 1)) ⊦ astart(f_Nat_'as->List<'as>(0, lf(0).last).head) ∧ (∀ n. move(IOAut(astart, astep, aext)) (f_Nat_'as->List<'as>(n, lf(n).last).head, cext !(nf(n) '), f_Nat_'as->List<'as>(n + 1, lf(n + 1).last).head))
Used terms: cext, aext, astart, nf, λ n. f_Nat_'as->List<'as>(n, lf(n).last).head, 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⌝ )) |
| lf(0) = as ', astart(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ n0. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, lf(n0).last), f_Nat->List<'aa>(n0)) ∧ # f_Nat->List<'aa>(n0) + 1 = # f_Nat_'as->List<'as>(n0, lf(n0).last) ∧ aext !(⌜f_Nat->List<'aa>(n0)⌝ ) = cext !(⌜nf(n0) '⌝ ) ∧ r(lf(n0 + 1).last, csf(n0 + 1)) ⊦ astart(f_Nat_'as->List<'as>(0, lf(0).last).head) ∧ (∀ n. move(IOAut(astart, astep, aext)) (f_Nat_'as->List<'as>(n, lf(n).last).head, cext !(nf(n) '), f_Nat_'as->List<'as>(n + 1, lf(n + 1).last).head)) |
lf(0) = as ', astart(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n0. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, lf(n0).last), f_Nat->List<'aa>(n0)) ∧ # f_Nat->List<'aa>(n0) + 1 = # f_Nat_'as->List<'as>(n0, lf(n0).last) ∧ aext !(f_Nat->List<'aa>(n0)) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(lf(n0 + 1).last, csf(n0 + 1)), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0) ⊦ astart(f_Nat_'as->List<'as>(0, as).head) ∧ move(IOAut(astart, astep, aext)) (f_Nat_'as->List<'as>(n, lf(n).last).head, (cext(nf(n)) = None ⊃ [];cext(nf(n)).get '), f_Nat_'as->List<'as>(n + 1, lf(n + 1).last).head)
Used simplifier rules: ⊦ a '.last = a; (s) ⊦ ext !(a ') = (ext(a) = None ⊃ [];ext(a).get '); (s) ⊦ ⌜x⌝ = ⌜x0⌝ ↔ x = x0; (s) ⊦ ext !(⌜al⌝ ) = ⌜ext !(al)⌝ ; (s)
| lf(0) = as ', astart(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n0. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, lf(n0).last), f_Nat->List<'aa>(n0)) ∧ # f_Nat->List<'aa>(n0) + 1 = # f_Nat_'as->List<'as>(n0, lf(n0).last) ∧ aext !(f_Nat->List<'aa>(n0)) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(lf(n0 + 1).last, csf(n0 + 1)), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0) ⊦ astart(f_Nat_'as->List<'as>(0, as).head) ∧ move(IOAut(astart, astep, aext)) (f_Nat_'as->List<'as>(n, lf(n).last).head, (cext(nf(n)) = None ⊃ [];cext(nf(n)).get '), f_Nat_'as->List<'as>(n + 1, lf(n + 1).last).head) |
lf(0) = as ', astart(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), ¬ astart(f_Nat_'as->List<'as>(0, as).head), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ n0. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, lf(n0).last), f_Nat->List<'aa>(n0)) ∧ # f_Nat->List<'aa>(n0) + 1 = # f_Nat_'as->List<'as>(n0, lf(n0).last) ∧ aext !(f_Nat->List<'aa>(n0)) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(lf(n0 + 1).last, csf(n0 + 1)) ⊦
lf(0) = as ', astart(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), ¬ move(IOAut(astart, astep, aext)) (f_Nat_'as->List<'as>(n, lf(n).last).head, (cext(nf(n)) = None ⊃ [];cext(nf(n)).get '), f_Nat_'as->List<'as>(n + 1, lf(n + 1).last).head), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ n0. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, lf(n0).last), f_Nat->List<'aa>(n0)) ∧ # f_Nat->List<'aa>(n0) + 1 = # f_Nat_'as->List<'as>(n0, lf(n0).last) ∧ aext !(f_Nat->List<'aa>(n0)) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(lf(n0 + 1).last, csf(n0 + 1)) ⊦
| lf(0) = as ', astart(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), ¬ astart(f_Nat_'as->List<'as>(0, as).head), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ n0. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, lf(n0).last), f_Nat->List<'aa>(n0)) ∧ # f_Nat->List<'aa>(n0) + 1 = # f_Nat_'as->List<'as>(n0, lf(n0).last) ∧ aext !(f_Nat->List<'aa>(n0)) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(lf(n0 + 1).last, csf(n0 + 1)) ⊦ |
lf(0) = as ', astart(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), ¬ astart(f_Nat_'as->List<'as>(0, as).head), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), cstep(csf(0), nf(0), csf(0 + 1)) ∧ r(as, csf(0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(0, as), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(0, as) ∧ aext !(aal) = (cext(nf(0)) = None ⊃ [];cext(nf(0)).get ') ∧ r(f_Nat_'as->List<'as>(0, as).last, csf(0 + 1)) ∧ f_Nat_'as->List<'as>(0, as).head = as), ∀ n0. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, lf(n0).last), f_Nat->List<'aa>(n0)) ∧ # f_Nat->List<'aa>(n0) + 1 = # f_Nat_'as->List<'as>(n0, lf(n0).last) ∧ aext !(f_Nat->List<'aa>(n0)) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(lf(n0 + 1).last, csf(n0 + 1)), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0) ⊦
Used terms: 0, as
| lf(0) = as ', astart(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), ¬ astart(f_Nat_'as->List<'as>(0, as).head), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), cstep(csf(0), nf(0), csf(0 + 1)) ∧ r(as, csf(0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(0, as), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(0, as) ∧ aext !(aal) = (cext(nf(0)) = None ⊃ [];cext(nf(0)).get ') ∧ r(f_Nat_'as->List<'as>(0, as).last, csf(0 + 1)) ∧ f_Nat_'as->List<'as>(0, as).head = as), ∀ n0. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, lf(n0).last), f_Nat->List<'aa>(n0)) ∧ # f_Nat->List<'aa>(n0) + 1 = # f_Nat_'as->List<'as>(n0, lf(n0).last) ∧ aext !(f_Nat->List<'aa>(n0)) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(lf(n0 + 1).last, csf(n0 + 1)), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0) ⊦ |
lf(0) = as ', astart(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), ¬ astart(f_Nat_'as->List<'as>(0, as).head), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), cstep(csf(0), nf(0), csf(1)) → frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(0, as), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(0, as) ∧ aext !(aal) = (cext(nf(0)) = None ⊃ [];cext(nf(0)).get ') ∧ r(f_Nat_'as->List<'as>(0, as).last, csf(1)) ∧ f_Nat_'as->List<'as>(0, as).head = as, ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ n0. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, lf(n0).last), f_Nat->List<'aa>(n0)) ∧ # f_Nat->List<'aa>(n0) + 1 = # f_Nat_'as->List<'as>(n0, lf(n0).last) ∧ aext !(f_Nat->List<'aa>(n0)) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(lf(n0 + 1).last, csf(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
| lf(0) = as ', astart(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), ¬ astart(f_Nat_'as->List<'as>(0, as).head), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), cstep(csf(0), nf(0), csf(1)) → frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(0, as), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(0, as) ∧ aext !(aal) = (cext(nf(0)) = None ⊃ [];cext(nf(0)).get ') ∧ r(f_Nat_'as->List<'as>(0, as).last, csf(1)) ∧ f_Nat_'as->List<'as>(0, as).head = as, ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ n0. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, lf(n0).last), f_Nat->List<'aa>(n0)) ∧ # f_Nat->List<'aa>(n0) + 1 = # f_Nat_'as->List<'as>(n0, lf(n0).last) ∧ aext !(f_Nat->List<'aa>(n0)) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(lf(n0 + 1).last, csf(n0 + 1)) ⊦ |
lf(0) = as ', astart(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), ¬ astart(f_Nat_'as->List<'as>(0, as).head), ¬ cstep(csf(0), nf(0), csf(1)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n0. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, lf(n0).last), f_Nat->List<'aa>(n0)) ∧ # f_Nat->List<'aa>(n0) + 1 = # f_Nat_'as->List<'as>(n0, lf(n0).last) ∧ aext !(f_Nat->List<'aa>(n0)) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(lf(n0 + 1).last, csf(n0 + 1)), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0) ⊦
| lf(0) = as ', astart(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), ¬ astart(f_Nat_'as->List<'as>(0, as).head), ¬ cstep(csf(0), nf(0), csf(1)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n0. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, lf(n0).last), f_Nat->List<'aa>(n0)) ∧ # f_Nat->List<'aa>(n0) + 1 = # f_Nat_'as->List<'as>(n0, lf(n0).last) ∧ aext !(f_Nat->List<'aa>(n0)) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(lf(n0 + 1).last, csf(n0 + 1)), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0) ⊦ |
⊦ fragω(ioa)(sf, af) ↔ (∀ n. ioa.step(sf(n), af(n), sf(n +1)))
lf(0) = as ', astart(as), cstart(csf(0)), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), ¬ astart(f_Nat_'as->List<'as>(0, as).head), ¬ cstep(csf(0), nf(0), csf(1)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ n0. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, lf(n0).last), f_Nat->List<'aa>(n0)) ∧ # f_Nat->List<'aa>(n0) + 1 = # f_Nat_'as->List<'as>(n0, lf(n0).last) ∧ aext !(f_Nat->List<'aa>(n0)) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(lf(n0 + 1).last, csf(n0 + 1)), ∀ n. IOAut(cstart, cstep, cext).step(csf(n), nf(n), csf(n +1)) ⊦
Used terms: IOAut(cstart, cstep, cext), csf, nf
| ⊦ fragω(ioa)(sf, af) ↔ (∀ n. ioa.step(sf(n), af(n), sf(n +1))) |
| lf(0) = as ', astart(as), cstart(csf(0)), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), ¬ astart(f_Nat_'as->List<'as>(0, as).head), ¬ cstep(csf(0), nf(0), csf(1)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ n0. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, lf(n0).last), f_Nat->List<'aa>(n0)) ∧ # f_Nat->List<'aa>(n0) + 1 = # f_Nat_'as->List<'as>(n0, lf(n0).last) ∧ aext !(f_Nat->List<'aa>(n0)) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(lf(n0 + 1).last, csf(n0 + 1)), ∀ n. IOAut(cstart, cstep, cext).step(csf(n), nf(n), csf(n +1)) ⊦ |
lf(0) = as ', astart(as), cstart(csf(0)), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), ¬ astart(f_Nat_'as->List<'as>(0, as).head), ¬ cstep(csf(0), nf(0), csf(1)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n0. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, lf(n0).last), f_Nat->List<'aa>(n0)) ∧ # f_Nat->List<'aa>(n0) + 1 = # f_Nat_'as->List<'as>(n0, lf(n0).last) ∧ aext !(f_Nat->List<'aa>(n0)) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(lf(n0 + 1).last, csf(n0 + 1)), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ n. cstep(csf(n), nf(n), csf(n + 1)) ⊦
Used simplifier rules: ⊦ IOAut(start, step, ext).step = step; (s) ⊦ m +1 = m + 1; (s)
| lf(0) = as ', astart(as), cstart(csf(0)), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), ¬ astart(f_Nat_'as->List<'as>(0, as).head), ¬ cstep(csf(0), nf(0), csf(1)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n0. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, lf(n0).last), f_Nat->List<'aa>(n0)) ∧ # f_Nat->List<'aa>(n0) + 1 = # f_Nat_'as->List<'as>(n0, lf(n0).last) ∧ aext !(f_Nat->List<'aa>(n0)) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(lf(n0 + 1).last, csf(n0 + 1)), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ n. cstep(csf(n), nf(n), csf(n + 1)) ⊦ |
Used simplifier rules: a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: 0
| lf(0) = as ', astart(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), ¬ move(IOAut(astart, astep, aext)) (f_Nat_'as->List<'as>(n, lf(n).last).head, (cext(nf(n)) = None ⊃ [];cext(nf(n)).get '), f_Nat_'as->List<'as>(n + 1, lf(n + 1).last).head), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ n0. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, lf(n0).last), f_Nat->List<'aa>(n0)) ∧ # f_Nat->List<'aa>(n0) + 1 = # f_Nat_'as->List<'as>(n0, lf(n0).last) ∧ aext !(f_Nat->List<'aa>(n0)) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(lf(n0 + 1).last, csf(n0 + 1)) ⊦ |
⊦ move(ioa)(s1, el, s2) ↔ (∃ al, sl. frag*(ioa)(sl, al) ∧ s1 = sl[0] ∧ s2 = sl.last ∧ ioa.ext !(al) = el)
lf(0) = as ', astart(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n0. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, lf(n0).last), f_Nat->List<'aa>(n0)) ∧ # f_Nat->List<'aa>(n0) + 1 = # f_Nat_'as->List<'as>(n0, lf(n0).last) ∧ aext !(f_Nat->List<'aa>(n0)) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(lf(n0 + 1).last, csf(n0 + 1)), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ al, sl. ¬ ( frag*(IOAut(astart, astep, aext))(sl, al) ∧ f_Nat_'as->List<'as>(n, lf(n).last).head = sl[0] ∧ f_Nat_'as->List<'as>(n + 1, lf(n + 1).last).head = sl.last ∧ IOAut(astart, astep, aext).ext !(al) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get ')) ⊦
Used terms: IOAut(astart, astep, aext), f_Nat_'as->List<'as>(n, lf(n).last).head, (cext(nf(n)) = None ⊃ [];cext(nf(n)).get '), f_Nat_'as->List<'as>(n + 1, lf(n + 1).last).head
| ⊦ move(ioa)(s1, el, s2) ↔ (∃ al, sl. frag*(ioa)(sl, al) ∧ s1 = sl[0] ∧ s2 = sl.last ∧ ioa.ext !(al) = el) |
| lf(0) = as ', astart(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n0. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, lf(n0).last), f_Nat->List<'aa>(n0)) ∧ # f_Nat->List<'aa>(n0) + 1 = # f_Nat_'as->List<'as>(n0, lf(n0).last) ∧ aext !(f_Nat->List<'aa>(n0)) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(lf(n0 + 1).last, csf(n0 + 1)), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ al, sl. ¬ ( frag*(IOAut(astart, astep, aext))(sl, al) ∧ f_Nat_'as->List<'as>(n, lf(n).last).head = sl[0] ∧ f_Nat_'as->List<'as>(n + 1, lf(n + 1).last).head = sl.last ∧ IOAut(astart, astep, aext).ext !(al) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get ')) ⊦ |
lf(0) = as ', astart(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ n0. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, lf(n0).last), f_Nat->List<'aa>(n0)) ∧ # f_Nat->List<'aa>(n0) + 1 = # f_Nat_'as->List<'as>(n0, lf(n0).last) ∧ aext !(f_Nat->List<'aa>(n0)) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(lf(n0 + 1).last, csf(n0 + 1)), ∀ al, sl. ¬ frag*(IOAut(astart, astep, aext))(sl, al) ∨ f_Nat_'as->List<'as>(n, lf(n).last).head ≠ sl[0] ∨ f_Nat_'as->List<'as>(n + 1, lf(n + 1).last).head ≠ sl.last ∨ aext !(al) ≠ (cext(nf(n)) = None ⊃ [];cext(nf(n)).get ') ⊦
Used simplifier rules: ⊦ IOAut(start, step, ext).ext = ext; (s)
| lf(0) = as ', astart(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ n0. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, lf(n0).last), f_Nat->List<'aa>(n0)) ∧ # f_Nat->List<'aa>(n0) + 1 = # f_Nat_'as->List<'as>(n0, lf(n0).last) ∧ aext !(f_Nat->List<'aa>(n0)) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(lf(n0 + 1).last, csf(n0 + 1)), ∀ al, sl. ¬ frag*(IOAut(astart, astep, aext))(sl, al) ∨ f_Nat_'as->List<'as>(n, lf(n).last).head ≠ sl[0] ∨ f_Nat_'as->List<'as>(n + 1, lf(n + 1).last).head ≠ sl.last ∨ aext !(al) ≠ (cext(nf(n)) = None ⊃ [];cext(nf(n)).get ') ⊦ |
aext !(f_Nat->List<'aa>(n)) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get '), # f_Nat->List<'aa>(n) + 1 = # f_Nat_'as->List<'as>(n, lf(n).last), lf(0) = as ', astart(as), cstart(csf(0)), frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), f_Nat->List<'aa>(n)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), r(lf(n + 1).last, csf(n + 1)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ al, sl. ¬ frag*(IOAut(astart, astep, aext))(sl, al) ∨ f_Nat_'as->List<'as>(n, lf(n).last).head ≠ sl[0] ∨ f_Nat_'as->List<'as>(n + 1, lf(n + 1).last).head ≠ sl.last ∨ aext !(al) ≠ (cext(nf(n)) = None ⊃ [];cext(nf(n)).get '), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0) ⊦
Used terms: n
| aext !(f_Nat->List<'aa>(n)) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get '), # f_Nat->List<'aa>(n) + 1 = # f_Nat_'as->List<'as>(n, lf(n).last), lf(0) = as ', astart(as), cstart(csf(0)), frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), f_Nat->List<'aa>(n)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), r(lf(n + 1).last, csf(n + 1)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ al, sl. ¬ frag*(IOAut(astart, astep, aext))(sl, al) ∨ f_Nat_'as->List<'as>(n, lf(n).last).head ≠ sl[0] ∨ f_Nat_'as->List<'as>(n + 1, lf(n + 1).last).head ≠ sl.last ∨ aext !(al) ≠ (cext(nf(n)) = None ⊃ [];cext(nf(n)).get '), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0) ⊦ |
aext !(f_Nat->List<'aa>(n)) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get '), # f_Nat->List<'aa>(n) + 1 = # f_Nat_'as->List<'as>(n, lf(n).last), lf(0) = as ', astart(as), cstart(csf(0)), frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), f_Nat->List<'aa>(n)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(lf(n + 1).last, csf(n + 1)), r(as, csf(0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ al, sl. ¬ frag*(IOAut(astart, astep, aext))(sl, al) ∨ f_Nat_'as->List<'as>(n, lf(n).last).head ≠ sl[0] ∨ f_Nat_'as->List<'as>(n + 1, lf(n + 1).last).head ≠ sl.last ∨ aext !(al) ≠ aext !(f_Nat->List<'aa>(n)) ⊦
| aext !(f_Nat->List<'aa>(n)) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get '), # f_Nat->List<'aa>(n) + 1 = # f_Nat_'as->List<'as>(n, lf(n).last), lf(0) = as ', astart(as), cstart(csf(0)), frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), f_Nat->List<'aa>(n)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(lf(n + 1).last, csf(n + 1)), r(as, csf(0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ al, sl. ¬ frag*(IOAut(astart, astep, aext))(sl, al) ∨ f_Nat_'as->List<'as>(n, lf(n).last).head ≠ sl[0] ∨ f_Nat_'as->List<'as>(n + 1, lf(n + 1).last).head ≠ sl.last ∨ aext !(al) ≠ aext !(f_Nat->List<'aa>(n)) ⊦ |
aext !(f_Nat->List<'aa>(n)) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get '), # f_Nat->List<'aa>(n) + 1 = # f_Nat_'as->List<'as>(n, lf(n).last), lf(0) = as ', astart(as), cstart(csf(0)), frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), f_Nat->List<'aa>(n)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), r(lf(n + 1).last, csf(n + 1)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ¬ frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), f_Nat->List<'aa>(n)) ∨ f_Nat_'as->List<'as>(n, lf(n).last).head ≠ f_Nat_'as->List<'as>(n, lf(n).last)[0] ∨ f_Nat_'as->List<'as>(n + 1, lf(n + 1).last).head ≠ f_Nat_'as->List<'as>(n, lf(n).last).last ∨ aext !(f_Nat->List<'aa>(n)) ≠ aext !(f_Nat->List<'aa>(n)) ⊦
Used terms: f_Nat->List<'aa>(n), f_Nat_'as->List<'as>(n, lf(n).last)
| aext !(f_Nat->List<'aa>(n)) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get '), # f_Nat->List<'aa>(n) + 1 = # f_Nat_'as->List<'as>(n, lf(n).last), lf(0) = as ', astart(as), cstart(csf(0)), frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), f_Nat->List<'aa>(n)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), r(lf(n + 1).last, csf(n + 1)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ¬ frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), f_Nat->List<'aa>(n)) ∨ f_Nat_'as->List<'as>(n, lf(n).last).head ≠ f_Nat_'as->List<'as>(n, lf(n).last)[0] ∨ f_Nat_'as->List<'as>(n + 1, lf(n + 1).last).head ≠ f_Nat_'as->List<'as>(n, lf(n).last).last ∨ aext !(f_Nat->List<'aa>(n)) ≠ aext !(f_Nat->List<'aa>(n)) ⊦ |
aext !(f_Nat->List<'aa>(n)) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get '), # f_Nat->List<'aa>(n) + 1 = # f_Nat_'as->List<'as>(n, lf(n).last), lf(0) = as ', astart(as), cstart(csf(0)), frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), f_Nat->List<'aa>(n)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(lf(n + 1).last, csf(n + 1)), r(as, csf(0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], f_Nat_'as->List<'as>(n, lf(n).last).head ≠ f_Nat_'as->List<'as>(n, lf(n).last)[0] ∨ f_Nat_'as->List<'as>(n + 1, lf(n + 1).last).head ≠ f_Nat_'as->List<'as>(n, lf(n).last).last ⊦
| aext !(f_Nat->List<'aa>(n)) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get '), # f_Nat->List<'aa>(n) + 1 = # f_Nat_'as->List<'as>(n, lf(n).last), lf(0) = as ', astart(as), cstart(csf(0)), frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), f_Nat->List<'aa>(n)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(lf(n + 1).last, csf(n + 1)), r(as, csf(0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], f_Nat_'as->List<'as>(n, lf(n).last).head ≠ f_Nat_'as->List<'as>(n, lf(n).last)[0] ∨ f_Nat_'as->List<'as>(n + 1, lf(n + 1).last).head ≠ f_Nat_'as->List<'as>(n, lf(n).last).last ⊦ |
⊦ x ≠ [] → x[0] = x.head
aext !(f_Nat->List<'aa>(n)) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get '), # f_Nat->List<'aa>(n) + 1 = # f_Nat_'as->List<'as>(n, lf(n).last), lf(0) = as ', f_Nat_'as->List<'as>(n, lf(n).last) ≠ [], astart(as), cstart(csf(0)), frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), f_Nat->List<'aa>(n)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), r(lf(n + 1).last, csf(n + 1)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), f_Nat_'as->List<'as>(n, lf(n).last).head ≠ f_Nat_'as->List<'as>(n, lf(n).last).head ∨ f_Nat_'as->List<'as>(n + 1, lf(n + 1).last).head ≠ f_Nat_'as->List<'as>(n, lf(n).last).last ⊦
Used simplifier rules: ⊦ # [] = 0; (s) ⊦ m + n = 0 ↔ m = 0 ∧ n = 0; (ws) ⊦ # x = 0 ↔ x = []; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: f_Nat_'as->List<'as>(n, lf(n).last)
| ⊦ x ≠ [] → x[0] = x.head |
| aext !(f_Nat->List<'aa>(n)) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get '), # f_Nat->List<'aa>(n) + 1 = # f_Nat_'as->List<'as>(n, lf(n).last), lf(0) = as ', f_Nat_'as->List<'as>(n, lf(n).last) ≠ [], astart(as), cstart(csf(0)), frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), f_Nat->List<'aa>(n)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), r(lf(n + 1).last, csf(n + 1)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), f_Nat_'as->List<'as>(n, lf(n).last).head ≠ f_Nat_'as->List<'as>(n, lf(n).last).head ∨ f_Nat_'as->List<'as>(n + 1, lf(n + 1).last).head ≠ f_Nat_'as->List<'as>(n, lf(n).last).last ⊦ |
aext !(f_Nat->List<'aa>(n)) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get '), # f_Nat->List<'aa>(n) + 1 = # f_Nat_'as->List<'as>(n, lf(n).last), lf(0) = as ', f_Nat_'as->List<'as>(n + 1, lf(n + 1).last).head ≠ f_Nat_'as->List<'as>(n, lf(n).last).last, f_Nat_'as->List<'as>(n, lf(n).last) ≠ [], astart(as), cstart(csf(0)), frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), f_Nat->List<'aa>(n)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(lf(n + 1).last, csf(n + 1)), r(as, csf(0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [] ⊦
| aext !(f_Nat->List<'aa>(n)) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get '), # f_Nat->List<'aa>(n) + 1 = # f_Nat_'as->List<'as>(n, lf(n).last), lf(0) = as ', f_Nat_'as->List<'as>(n + 1, lf(n + 1).last).head ≠ f_Nat_'as->List<'as>(n, lf(n).last).last, f_Nat_'as->List<'as>(n, lf(n).last) ≠ [], astart(as), cstart(csf(0)), frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), f_Nat->List<'aa>(n)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(lf(n + 1).last, csf(n + 1)), r(as, csf(0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [] ⊦ |
aext !(f_Nat->List<'aa>(n)) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get '), # f_Nat->List<'aa>(n) + 1 = # f_Nat_'as->List<'as>(n, lf(n).last), lf(0) = as ', f_Nat_'as->List<'as>(n + 1, lf(n + 1).last).head ≠ f_Nat_'as->List<'as>(n, lf(n).last).last, f_Nat_'as->List<'as>(n, lf(n).last) ≠ [], astart(as), cstart(csf(0)), frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), f_Nat->List<'aa>(n)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), r(lf(n + 1).last, csf(n + 1)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), cstep(csf(n + 1), nf(n + 1), csf((n + 1) + 1)) ∧ r(lf(n + 1).last, csf(n + 1)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n + 1, lf(n + 1).last), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n + 1, lf(n + 1).last) ∧ aext !(aal) = (cext(nf(n + 1)) = None ⊃ [];cext(nf(n + 1)).get ') ∧ r(f_Nat_'as->List<'as>(n + 1, lf(n + 1).last).last, csf((n + 1) + 1)) ∧ f_Nat_'as->List<'as>(n + 1, lf(n + 1).last).head = lf(n + 1).last), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0) ⊦
Used terms: n + 1, lf(n + 1).last
| aext !(f_Nat->List<'aa>(n)) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get '), # f_Nat->List<'aa>(n) + 1 = # f_Nat_'as->List<'as>(n, lf(n).last), lf(0) = as ', f_Nat_'as->List<'as>(n + 1, lf(n + 1).last).head ≠ f_Nat_'as->List<'as>(n, lf(n).last).last, f_Nat_'as->List<'as>(n, lf(n).last) ≠ [], astart(as), cstart(csf(0)), frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), f_Nat->List<'aa>(n)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), r(lf(n + 1).last, csf(n + 1)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), cstep(csf(n + 1), nf(n + 1), csf((n + 1) + 1)) ∧ r(lf(n + 1).last, csf(n + 1)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n + 1, lf(n + 1).last), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n + 1, lf(n + 1).last) ∧ aext !(aal) = (cext(nf(n + 1)) = None ⊃ [];cext(nf(n + 1)).get ') ∧ r(f_Nat_'as->List<'as>(n + 1, lf(n + 1).last).last, csf((n + 1) + 1)) ∧ f_Nat_'as->List<'as>(n + 1, lf(n + 1).last).head = lf(n + 1).last), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0) ⊦ |
aext !(f_Nat->List<'aa>(n)) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get '), # f_Nat->List<'aa>(n) + 1 = # f_Nat_'as->List<'as>(n, lf(n).last), lf(0) = as ', f_Nat_'as->List<'as>(n + 1, lf(n + 1).last).head ≠ f_Nat_'as->List<'as>(n, lf(n).last).last, f_Nat_'as->List<'as>(n, lf(n).last) ≠ [], astart(as), cstart(csf(0)), frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), f_Nat->List<'aa>(n)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(lf(n + 1).last, csf(n + 1)), r(as, csf(0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), cstep(csf(n + 1), nf(n + 1), csf(2 + n)) → frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n + 1, lf(n + 1).last), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n + 1, lf(n + 1).last) ∧ aext !(aal) = (cext(nf(n + 1)) = None ⊃ [];cext(nf(n + 1)).get ') ∧ r(f_Nat_'as->List<'as>(n + 1, lf(n + 1).last).last, csf(2 + n)) ∧ f_Nat_'as->List<'as>(n + 1, lf(n + 1).last).head = lf(n + 1).last, ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [] ⊦
Used simplifier rules: a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic
| aext !(f_Nat->List<'aa>(n)) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get '), # f_Nat->List<'aa>(n) + 1 = # f_Nat_'as->List<'as>(n, lf(n).last), lf(0) = as ', f_Nat_'as->List<'as>(n + 1, lf(n + 1).last).head ≠ f_Nat_'as->List<'as>(n, lf(n).last).last, f_Nat_'as->List<'as>(n, lf(n).last) ≠ [], astart(as), cstart(csf(0)), frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), f_Nat->List<'aa>(n)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(lf(n + 1).last, csf(n + 1)), r(as, csf(0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), cstep(csf(n + 1), nf(n + 1), csf(2 + n)) → frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n + 1, lf(n + 1).last), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n + 1, lf(n + 1).last) ∧ aext !(aal) = (cext(nf(n + 1)) = None ⊃ [];cext(nf(n + 1)).get ') ∧ r(f_Nat_'as->List<'as>(n + 1, lf(n + 1).last).last, csf(2 + n)) ∧ f_Nat_'as->List<'as>(n + 1, lf(n + 1).last).head = lf(n + 1).last, ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [] ⊦ |
aext !(f_Nat->List<'aa>(n)) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get '), # f_Nat->List<'aa>(n) + 1 = # f_Nat_'as->List<'as>(n, lf(n).last), lf(0) = as ', f_Nat_'as->List<'as>(n + 1, lf(n + 1).last).head ≠ f_Nat_'as->List<'as>(n, lf(n).last).last, f_Nat_'as->List<'as>(n, lf(n).last) ≠ [], astart(as), cstart(csf(0)), frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), f_Nat->List<'aa>(n)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), r(lf(n + 1).last, csf(n + 1)), ¬ cstep(csf(n + 1), nf(n + 1), csf(2 + n)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0) ⊦
aext !(f_Nat->List<'aa>(n)) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get '), aext !(aal) = (cext(nf(n + 1)) = None ⊃ [];cext(nf(n + 1)).get '), # f_Nat->List<'aa>(n) + 1 = # f_Nat_'as->List<'as>(n, lf(n).last), # aal + 1 = # f_Nat_'as->List<'as>(n + 1, lf(n + 1).last), f_Nat_'as->List<'as>(n + 1, lf(n + 1).last).head = lf(n + 1).last, lf(0) = as ', f_Nat_'as->List<'as>(n + 1, lf(n + 1).last).head ≠ f_Nat_'as->List<'as>(n, lf(n).last).last, f_Nat_'as->List<'as>(n, lf(n).last) ≠ [], astart(as), cstart(csf(0)), frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), f_Nat->List<'aa>(n)), frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n + 1, lf(n + 1).last), aal), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), r(lf(n + 1).last, csf(n + 1)), r(f_Nat_'as->List<'as>(n + 1, lf(n + 1).last).last, csf(2 + n)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0) ⊦
| aext !(f_Nat->List<'aa>(n)) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get '), # f_Nat->List<'aa>(n) + 1 = # f_Nat_'as->List<'as>(n, lf(n).last), lf(0) = as ', f_Nat_'as->List<'as>(n + 1, lf(n + 1).last).head ≠ f_Nat_'as->List<'as>(n, lf(n).last).last, f_Nat_'as->List<'as>(n, lf(n).last) ≠ [], astart(as), cstart(csf(0)), frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), f_Nat->List<'aa>(n)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), r(lf(n + 1).last, csf(n + 1)), ¬ cstep(csf(n + 1), nf(n + 1), csf(2 + n)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0) ⊦ |
⊦ fragω(ioa)(sf, af) ↔ (∀ n. ioa.step(sf(n), af(n), sf(n +1)))
aext !(f_Nat->List<'aa>(n)) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get '), # f_Nat->List<'aa>(n) + 1 = # f_Nat_'as->List<'as>(n, lf(n).last), lf(0) = as ', f_Nat_'as->List<'as>(n + 1, lf(n + 1).last).head ≠ f_Nat_'as->List<'as>(n, lf(n).last).last, f_Nat_'as->List<'as>(n, lf(n).last) ≠ [], astart(as), cstart(csf(0)), frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), f_Nat->List<'aa>(n)), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(lf(n + 1).last, csf(n + 1)), r(as, csf(0)), ¬ cstep(csf(n + 1), nf(n + 1), csf(2 + n)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ n. IOAut(cstart, cstep, cext).step(csf(n), nf(n), csf(n +1)) ⊦
Used terms: IOAut(cstart, cstep, cext), csf, nf
| ⊦ fragω(ioa)(sf, af) ↔ (∀ n. ioa.step(sf(n), af(n), sf(n +1))) |
| aext !(f_Nat->List<'aa>(n)) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get '), # f_Nat->List<'aa>(n) + 1 = # f_Nat_'as->List<'as>(n, lf(n).last), lf(0) = as ', f_Nat_'as->List<'as>(n + 1, lf(n + 1).last).head ≠ f_Nat_'as->List<'as>(n, lf(n).last).last, f_Nat_'as->List<'as>(n, lf(n).last) ≠ [], astart(as), cstart(csf(0)), frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), f_Nat->List<'aa>(n)), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(lf(n + 1).last, csf(n + 1)), r(as, csf(0)), ¬ cstep(csf(n + 1), nf(n + 1), csf(2 + n)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ n. IOAut(cstart, cstep, cext).step(csf(n), nf(n), csf(n +1)) ⊦ |
aext !(f_Nat->List<'aa>(n)) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get '), # f_Nat->List<'aa>(n) + 1 = # f_Nat_'as->List<'as>(n, lf(n).last), lf(0) = as ', f_Nat_'as->List<'as>(n + 1, lf(n + 1).last).head ≠ f_Nat_'as->List<'as>(n, lf(n).last).last, f_Nat_'as->List<'as>(n, lf(n).last) ≠ [], astart(as), cstart(csf(0)), frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), f_Nat->List<'aa>(n)), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), r(lf(n + 1).last, csf(n + 1)), ¬ cstep(csf(n + 1), nf(n + 1), csf(2 + n)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ n0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ⊦
Used simplifier rules: ⊦ IOAut(start, step, ext).step = step; (s) ⊦ m +1 = m + 1; (s)
| aext !(f_Nat->List<'aa>(n)) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get '), # f_Nat->List<'aa>(n) + 1 = # f_Nat_'as->List<'as>(n, lf(n).last), lf(0) = as ', f_Nat_'as->List<'as>(n + 1, lf(n + 1).last).head ≠ f_Nat_'as->List<'as>(n, lf(n).last).last, f_Nat_'as->List<'as>(n, lf(n).last) ≠ [], astart(as), cstart(csf(0)), frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), f_Nat->List<'aa>(n)), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), r(lf(n + 1).last, csf(n + 1)), ¬ cstep(csf(n + 1), nf(n + 1), csf(2 + n)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ n0. cstep(csf(n0), nf(n0), csf(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 Used terms: n + 1
| aext !(f_Nat->List<'aa>(n)) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get '), aext !(aal) = (cext(nf(n + 1)) = None ⊃ [];cext(nf(n + 1)).get '), # f_Nat->List<'aa>(n) + 1 = # f_Nat_'as->List<'as>(n, lf(n).last), # aal + 1 = # f_Nat_'as->List<'as>(n + 1, lf(n + 1).last), f_Nat_'as->List<'as>(n + 1, lf(n + 1).last).head = lf(n + 1).last, lf(0) = as ', f_Nat_'as->List<'as>(n + 1, lf(n + 1).last).head ≠ f_Nat_'as->List<'as>(n, lf(n).last).last, f_Nat_'as->List<'as>(n, lf(n).last) ≠ [], astart(as), cstart(csf(0)), frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), f_Nat->List<'aa>(n)), frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n + 1, lf(n + 1).last), aal), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), r(lf(n + 1).last, csf(n + 1)), r(f_Nat_'as->List<'as>(n + 1, lf(n + 1).last).last, csf(2 + n)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0) ⊦ |
aext !(aal) = (cext(nf(n + 1)) = None ⊃ [];cext(nf(n + 1)).get '), aext !(f_Nat->List<'aa>(n)) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get '), # aal + 1 = # f_Nat_'as->List<'as>(n + 1, lf(n + 1).last), # f_Nat->List<'aa>(n) + 1 = # f_Nat_'as->List<'as>(n, lf(n).last), f_Nat_'as->List<'as>(n + 1, lf(n + 1).last).head = lf(n + 1).last, lf(0) = as ', lf(n + 1).last ≠ f_Nat_'as->List<'as>(n, lf(n).last).last, f_Nat_'as->List<'as>(n, lf(n).last) ≠ [], astart(as), cstart(csf(0)), frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n + 1, lf(n + 1).last), aal), frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), f_Nat->List<'aa>(n)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(f_Nat_'as->List<'as>(n + 1, lf(n + 1).last).last, csf(2 + n)), r(lf(n + 1).last, csf(n + 1)), r(as, csf(0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [] ⊦
| aext !(aal) = (cext(nf(n + 1)) = None ⊃ [];cext(nf(n + 1)).get '), aext !(f_Nat->List<'aa>(n)) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get '), # aal + 1 = # f_Nat_'as->List<'as>(n + 1, lf(n + 1).last), # f_Nat->List<'aa>(n) + 1 = # f_Nat_'as->List<'as>(n, lf(n).last), f_Nat_'as->List<'as>(n + 1, lf(n + 1).last).head = lf(n + 1).last, lf(0) = as ', lf(n + 1).last ≠ f_Nat_'as->List<'as>(n, lf(n).last).last, f_Nat_'as->List<'as>(n, lf(n).last) ≠ [], astart(as), cstart(csf(0)), frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n + 1, lf(n + 1).last), aal), frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), f_Nat->List<'aa>(n)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(f_Nat_'as->List<'as>(n + 1, lf(n + 1).last).last, csf(2 + n)), r(lf(n + 1).last, csf(n + 1)), r(as, csf(0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [] ⊦ |
Used terms: n
| lf(0) = as ', astart(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0) ⊦ ∀ n. ∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n, lf(n).last) ∧ aext !(⌜aal⌝ ) = cext !(⌜nf(n) '⌝ ) ∧ r(lf(n + 1).last, csf(n + 1)) |
lf(0) = as ', astart(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [] ⊦ ∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), aal) ∧ aext !(aal) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get ') ∧ r(lf(n + 1).last, csf(n + 1))
Used simplifier rules: ⊦ ⌜x⌝ = ⌜x0⌝ ↔ x = x0; (s) ⊦ ext !(a ') = (ext(a) = None ⊃ [];ext(a).get '); (s) ⊦ ext !(⌜al⌝ ) = ⌜ext !(al)⌝ ; (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ frag*(IOAut(start, step, ext))(sl, al) → (# sl = # al + 1 ↔ true); (ss)
| lf(0) = as ', astart(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [] ⊦ ∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), aal) ∧ aext !(aal) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get ') ∧ r(lf(n + 1).last, csf(n + 1)) |
lf(0) = as ', astart(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), cstep(csf(n), nf(n), csf(n + 1)) ∧ r(lf(n).last, csf(n)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n, lf(n).last) ∧ aext !(aal) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get ') ∧ r(f_Nat_'as->List<'as>(n, lf(n).last).last, csf(n + 1)) ∧ f_Nat_'as->List<'as>(n, lf(n).last).head = lf(n).last), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last) ⊦ ∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), aal) ∧ aext !(aal) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get ') ∧ r(lf(n + 1).last, csf(n + 1))
Used terms: n, lf(n).last
| lf(0) = as ', astart(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), cstep(csf(n), nf(n), csf(n + 1)) ∧ r(lf(n).last, csf(n)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n, lf(n).last) ∧ aext !(aal) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get ') ∧ r(f_Nat_'as->List<'as>(n, lf(n).last).last, csf(n + 1)) ∧ f_Nat_'as->List<'as>(n, lf(n).last).head = lf(n).last), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last) ⊦ ∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), aal) ∧ aext !(aal) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get ') ∧ r(lf(n + 1).last, csf(n + 1)) |
lf(0) = as ', astart(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), cstep(csf(n), nf(n), csf(n + 1)) ∧ r(lf(n).last, csf(n)) → frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n, lf(n).last) ∧ aext !(aal) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get ') ∧ r(f_Nat_'as->List<'as>(n, lf(n).last).last, csf(n + 1)) ∧ f_Nat_'as->List<'as>(n, lf(n).last).head = lf(n).last, ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [] ⊦ ∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), aal) ∧ aext !(aal) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get ') ∧ r(lf(n + 1).last, csf(n + 1))
| lf(0) = as ', astart(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), cstep(csf(n), nf(n), csf(n + 1)) ∧ r(lf(n).last, csf(n)) → frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n, lf(n).last) ∧ aext !(aal) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get ') ∧ r(f_Nat_'as->List<'as>(n, lf(n).last).last, csf(n + 1)) ∧ f_Nat_'as->List<'as>(n, lf(n).last).head = lf(n).last, ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [] ⊦ ∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), aal) ∧ aext !(aal) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get ') ∧ r(lf(n + 1).last, csf(n + 1)) |
lf(0) = as ', astart(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last) ⊦ ∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), aal) ∧ aext !(aal) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get ') ∧ r(lf(n + 1).last, csf(n + 1)), cstep(csf(n), nf(n), csf(n + 1)) ∧ r(lf(n).last, csf(n))
aext !(aal) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get '), # aal + 1 = # f_Nat_'as->List<'as>(n, lf(n).last), f_Nat_'as->List<'as>(n, lf(n).last).head = lf(n).last, lf(0) = as ', astart(as), cstart(csf(0)), frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), aal), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), r(f_Nat_'as->List<'as>(n, lf(n).last).last, csf(n + 1)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last) ⊦ ∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), aal) ∧ aext !(aal) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get ') ∧ r(lf(n + 1).last, csf(n + 1))
| lf(0) = as ', astart(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last) ⊦ ∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), aal) ∧ aext !(aal) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get ') ∧ r(lf(n + 1).last, csf(n + 1)), cstep(csf(n), nf(n), csf(n + 1)) ∧ r(lf(n).last, csf(n)) |
lf(0) = as ', astart(as), cstart(csf(0)), cstep(csf(n), nf(n), csf(n + 1)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), ¬ r(lf(n).last, csf(n)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last) ⊦ ∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), aal) ∧ aext !(aal) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get ') ∧ r(lf(n + 1).last, csf(n + 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
| lf(0) = as ', astart(as), cstart(csf(0)), cstep(csf(n), nf(n), csf(n + 1)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), ¬ r(lf(n).last, csf(n)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last) ⊦ ∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), aal) ∧ aext !(aal) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get ') ∧ r(lf(n + 1).last, csf(n + 1)) |
Used terms: n
| aext !(aal) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get '), # aal + 1 = # f_Nat_'as->List<'as>(n, lf(n).last), f_Nat_'as->List<'as>(n, lf(n).last).head = lf(n).last, lf(0) = as ', astart(as), cstart(csf(0)), frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), aal), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), r(f_Nat_'as->List<'as>(n, lf(n).last).last, csf(n + 1)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last) ⊦ ∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), aal) ∧ aext !(aal) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get ') ∧ r(lf(n + 1).last, csf(n + 1)) |
aext !(aal) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get '), # aal + 1 = # f_Nat_'as->List<'as>(n, lf(n).last), f_Nat_'as->List<'as>(n, lf(n).last).head = lf(n).last, lf(0) = as ', astart(as), cstart(csf(0)), frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), aal), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(f_Nat_'as->List<'as>(n, lf(n).last).last, csf(n + 1)), r(as, csf(0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [] ⊦ frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), aal) ∧ aext !(aal) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get ') ∧ r(lf(n + 1).last, csf(n + 1))
Used terms: aal
| aext !(aal) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get '), # aal + 1 = # f_Nat_'as->List<'as>(n, lf(n).last), f_Nat_'as->List<'as>(n, lf(n).last).head = lf(n).last, lf(0) = as ', astart(as), cstart(csf(0)), frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), aal), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(f_Nat_'as->List<'as>(n, lf(n).last).last, csf(n + 1)), r(as, csf(0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [] ⊦ frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), aal) ∧ aext !(aal) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get ') ∧ r(lf(n + 1).last, csf(n + 1)) |
aext !(aal) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get '), # aal + 1 = # f_Nat_'as->List<'as>(n, lf(n).last), f_Nat_'as->List<'as>(n, lf(n).last).head = lf(n).last, lf(0) = as ', astart(as), cstart(csf(0)), frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), aal), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), r(f_Nat_'as->List<'as>(n, lf(n).last).last, csf(n + 1)), ¬ r(lf(n + 1).last, csf(n + 1)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last) ⊦
| aext !(aal) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get '), # aal + 1 = # f_Nat_'as->List<'as>(n, lf(n).last), f_Nat_'as->List<'as>(n, lf(n).last).head = lf(n).last, lf(0) = as ', astart(as), cstart(csf(0)), frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, lf(n).last), aal), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), r(f_Nat_'as->List<'as>(n, lf(n).last).last, csf(n + 1)), ¬ r(lf(n + 1).last, csf(n + 1)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [], ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last) ⊦ |
Used terms: n + 1
| lf(0) = as ', astart(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last) ⊦ ∀ n. r(lf(n).last, csf(n)) ∧ lf(n) ≠ [] |
lf(0) = as ', astart(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0) ⊦ r(lf(n).last, csf(n)) ∧ lf(n) ≠ []
| lf(0) = as ', astart(as), cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, csf(0)), ¬ trace(IOAut(astart, astep, aext))(cext !(⌜nf⌝ )), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0) ⊦ r(lf(n).last, csf(n)) ∧ lf(n) ≠ [] |
lf(0) = as ', cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), r(as, csf(0)), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last) ⊦ r(lf(n).last, csf(n)) ∧ lf(n) ≠ []
| lf(0) = as ', cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), r(as, csf(0)), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last) ⊦ r(lf(n).last, csf(n)) ∧ lf(n) ≠ [] |
lf(0) = as ', cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), r(as, csf(0)), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ lf, as, cstart, csf, cstep, cext, nf, r, astart, astep, aext, f_Nat_'as->List<'as>. lf(0) = as ' ∧ cstart(csf(0)) ∧ fragω(IOAut(cstart, cstep, cext))(csf, nf) ∧ r(as, csf(0)) ∧ (∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0)) ∧ (∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last)) → r(lf(n0).last, csf(n0)) ∧ lf(n0) ≠ [] ⊦ r(lf(n0 +1).last, csf(n0 +1)) ∧ lf(n0 +1) ≠ []
Used simplifier rules: Nat freely generated by 0, +1;; ⊦ a '.last = a; (s) ⊦ a ' ≠ []; (s)
| lf(0) = as ', cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), r(as, csf(0)), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ lf, as, cstart, csf, cstep, cext, nf, r, astart, astep, aext, f_Nat_'as->List<'as>. lf(0) = as ' ∧ cstart(csf(0)) ∧ fragω(IOAut(cstart, cstep, cext))(csf, nf) ∧ r(as, csf(0)) ∧ (∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0)) ∧ (∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last)) → r(lf(n0).last, csf(n0)) ∧ lf(n0) ≠ [] ⊦ r(lf(n0 +1).last, csf(n0 +1)) ∧ lf(n0 +1) ≠ [] |
lf(0) = as ', cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), r(as, csf(0)), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ lf0, as0, cstart0, csf0, cstep0, cext0, nf0, r0, astart0, astep0, aext0, f_Nat_'as->List<'as>0. lf0(0) = as0 ' ∧ cstart0(csf0(0)) ∧ fragω(IOAut(cstart0, cstep0, cext0))(csf0, nf0) ∧ r0(as0, csf0(0)) ∧ (∀ n, as1. cstep0(csf0(n), nf0(n), csf0(n + 1)) ∧ r0(as1, csf0(n)) → (∃ aal. frag*(IOAut(astart0, astep0, aext0))(f_Nat_'as->List<'as>0(n, as1), aal) ∧ aext0 !(aal) = (cext0(nf0(n)) = None ⊃ [];cext0(nf0(n)).get ') ∧ r0(f_Nat_'as->List<'as>0(n, as1).last, csf0(n + 1)) ∧ f_Nat_'as->List<'as>0(n, as1).head = as1)) ∧ (∀ n. lf0(n + 1) = f_Nat_'as->List<'as>0(n, lf0(n).last)) → r0(lf0(n0).last, csf0(n0)) ∧ lf0(n0) ≠ [] ⊦ r(lf(n0 + 1).last, csf(n0 + 1)) ∧ lf(n0 + 1) ≠ []
Used simplifier rules: ⊦ m +1 = m + 1; (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ frag*(IOAut(start, step, ext))(sl, al) → (# sl = # al + 1 ↔ true); (ss)
| lf(0) = as ', cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), r(as, csf(0)), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ lf0, as0, cstart0, csf0, cstep0, cext0, nf0, r0, astart0, astep0, aext0, f_Nat_'as->List<'as>0. lf0(0) = as0 ' ∧ cstart0(csf0(0)) ∧ fragω(IOAut(cstart0, cstep0, cext0))(csf0, nf0) ∧ r0(as0, csf0(0)) ∧ (∀ n, as1. cstep0(csf0(n), nf0(n), csf0(n + 1)) ∧ r0(as1, csf0(n)) → (∃ aal. frag*(IOAut(astart0, astep0, aext0))(f_Nat_'as->List<'as>0(n, as1), aal) ∧ aext0 !(aal) = (cext0(nf0(n)) = None ⊃ [];cext0(nf0(n)).get ') ∧ r0(f_Nat_'as->List<'as>0(n, as1).last, csf0(n + 1)) ∧ f_Nat_'as->List<'as>0(n, as1).head = as1)) ∧ (∀ n. lf0(n + 1) = f_Nat_'as->List<'as>0(n, lf0(n).last)) → r0(lf0(n0).last, csf0(n0)) ∧ lf0(n0) ≠ [] ⊦ r(lf(n0 + 1).last, csf(n0 + 1)) ∧ lf(n0 + 1) ≠ [] |
lf(0) = as ', cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), r(as, csf(0)), lf(0) = as ' ∧ cstart(csf(0)) ∧ fragω(IOAut(cstart, cstep, cext))(csf, nf) ∧ r(as, csf(0)) ∧ (∀ n, as1. cstep(csf(n), nf(n), csf(n + 1)) ∧ r(as1, csf(n)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, as1), aal) ∧ aext !(aal) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get ') ∧ r(f_Nat_'as->List<'as>(n, as1).last, csf(n + 1)) ∧ f_Nat_'as->List<'as>(n, as1).head = as1)) ∧ (∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last)) → r(lf(n0).last, csf(n0)) ∧ lf(n0) ≠ [], ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0) ⊦ r(lf(n0 + 1).last, csf(n0 + 1)) ∧ lf(n0 + 1) ≠ []
Used terms: lf, as, cstart, csf, cstep, cext, nf, r, astart, astep, aext, f_Nat_'as->List<'as>
| lf(0) = as ', cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), r(as, csf(0)), lf(0) = as ' ∧ cstart(csf(0)) ∧ fragω(IOAut(cstart, cstep, cext))(csf, nf) ∧ r(as, csf(0)) ∧ (∀ n, as1. cstep(csf(n), nf(n), csf(n + 1)) ∧ r(as1, csf(n)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, as1), aal) ∧ aext !(aal) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get ') ∧ r(f_Nat_'as->List<'as>(n, as1).last, csf(n + 1)) ∧ f_Nat_'as->List<'as>(n, as1).head = as1)) ∧ (∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last)) → r(lf(n0).last, csf(n0)) ∧ lf(n0) ≠ [], ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0) ⊦ r(lf(n0 + 1).last, csf(n0 + 1)) ∧ lf(n0 + 1) ≠ [] |
lf(0) = as ', cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), r(as, csf(0)), ( cstep(csf(n), nf(n), csf(n + 1)) ∧ r(as1, csf(n)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, as1), aal) ∧ aext !(aal) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get ') ∧ r(f_Nat_'as->List<'as>(n, as1).last, csf(n + 1)) ∧ f_Nat_'as->List<'as>(n, as1).head = as1)) → r(lf(n0).last, csf(n0)) ∧ lf(n0) ≠ [], ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last) ⊦ r(lf(n0 + 1).last, csf(n0 + 1)) ∧ lf(n0 + 1) ≠ []
| lf(0) = as ', cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), r(as, csf(0)), ( cstep(csf(n), nf(n), csf(n + 1)) ∧ r(as1, csf(n)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, as1), aal) ∧ aext !(aal) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get ') ∧ r(f_Nat_'as->List<'as>(n, as1).last, csf(n + 1)) ∧ f_Nat_'as->List<'as>(n, as1).head = as1)) → r(lf(n0).last, csf(n0)) ∧ lf(n0) ≠ [], ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last) ⊦ r(lf(n0 + 1).last, csf(n0 + 1)) ∧ lf(n0 + 1) ≠ [] |
lf(0) = as ', cstart(csf(0)), cstep(csf(n), nf(n), csf(n + 1)), fragω(IOAut(cstart, cstep, cext))(csf, nf), r(as1, csf(n)), r(as, csf(0)), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0) ⊦ ∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, as1), aal) ∧ aext !(aal) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get ') ∧ r(f_Nat_'as->List<'as>(n, as1).last, csf(n + 1)) ∧ f_Nat_'as->List<'as>(n, as1).head = as1, r(lf(n0 + 1).last, csf(n0 + 1)) ∧ lf(n0 + 1) ≠ []
lf(0) = as ', lf(n0) ≠ [], cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), r(as, csf(0)), r(lf(n0).last, csf(n0)), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0) ⊦ r(lf(n0 + 1).last, csf(n0 + 1)) ∧ lf(n0 + 1) ≠ []
| lf(0) = as ', cstart(csf(0)), cstep(csf(n), nf(n), csf(n + 1)), fragω(IOAut(cstart, cstep, cext))(csf, nf), r(as1, csf(n)), r(as, csf(0)), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0) ⊦ ∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, as1), aal) ∧ aext !(aal) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get ') ∧ r(f_Nat_'as->List<'as>(n, as1).last, csf(n + 1)) ∧ f_Nat_'as->List<'as>(n, as1).head = as1, r(lf(n0 + 1).last, csf(n0 + 1)) ∧ lf(n0 + 1) ≠ [] |
lf(0) = as ', cstart(csf(0)), cstep(csf(n), nf(n), csf(n + 1)), fragω(IOAut(cstart, cstep, cext))(csf, nf), r(as, csf(0)), r(as1, csf(n)), cstep(csf(n), nf(n), csf(n + 1)) ∧ r(as1, csf(n)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, as1), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n, as1) ∧ aext !(aal) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get ') ∧ r(f_Nat_'as->List<'as>(n, as1).last, csf(n + 1)) ∧ f_Nat_'as->List<'as>(n, as1).head = as1), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last) ⊦ ∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, as1), aal) ∧ aext !(aal) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get ') ∧ r(f_Nat_'as->List<'as>(n, as1).last, csf(n + 1)) ∧ f_Nat_'as->List<'as>(n, as1).head = as1, r(lf(n0 + 1).last, csf(n0 + 1)) ∧ lf(n0 + 1) ≠ []
Used terms: n, as1
| lf(0) = as ', cstart(csf(0)), cstep(csf(n), nf(n), csf(n + 1)), fragω(IOAut(cstart, cstep, cext))(csf, nf), r(as, csf(0)), r(as1, csf(n)), cstep(csf(n), nf(n), csf(n + 1)) ∧ r(as1, csf(n)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, as1), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n, as1) ∧ aext !(aal) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get ') ∧ r(f_Nat_'as->List<'as>(n, as1).last, csf(n + 1)) ∧ f_Nat_'as->List<'as>(n, as1).head = as1), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last) ⊦ ∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, as1), aal) ∧ aext !(aal) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get ') ∧ r(f_Nat_'as->List<'as>(n, as1).last, csf(n + 1)) ∧ f_Nat_'as->List<'as>(n, as1).head = as1, r(lf(n0 + 1).last, csf(n0 + 1)) ∧ lf(n0 + 1) ≠ [] |
aext !(aal) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get '), # aal + 1 = # f_Nat_'as->List<'as>(n, as1), f_Nat_'as->List<'as>(n, as1).head = as1, lf(0) = as ', cstart(csf(0)), cstep(csf(n), nf(n), csf(n + 1)), frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, as1), aal), fragω(IOAut(cstart, cstep, cext))(csf, nf), r(as1, csf(n)), r(as, csf(0)), r(f_Nat_'as->List<'as>(n, as1).last, csf(n + 1)), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last) ⊦ ∃ aal0. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, as1), aal0) ∧ aext !(aal0) = aext !(aal), r(lf(n0 + 1).last, csf(n0 + 1)) ∧ lf(n0 + 1) ≠ []
| aext !(aal) = (cext(nf(n)) = None ⊃ [];cext(nf(n)).get '), # aal + 1 = # f_Nat_'as->List<'as>(n, as1), f_Nat_'as->List<'as>(n, as1).head = as1, lf(0) = as ', cstart(csf(0)), cstep(csf(n), nf(n), csf(n + 1)), frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, as1), aal), fragω(IOAut(cstart, cstep, cext))(csf, nf), r(as1, csf(n)), r(as, csf(0)), r(f_Nat_'as->List<'as>(n, as1).last, csf(n + 1)), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last) ⊦ ∃ aal0. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n, as1), aal0) ∧ aext !(aal0) = aext !(aal), r(lf(n0 + 1).last, csf(n0 + 1)) ∧ lf(n0 + 1) ≠ [] |
Used terms: aal
| lf(0) = as ', lf(n0) ≠ [], cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), r(as, csf(0)), r(lf(n0).last, csf(n0)), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last), ∀ n0, as0. cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(as0, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, as0).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0) ⊦ r(lf(n0 + 1).last, csf(n0 + 1)) ∧ lf(n0 + 1) ≠ [] |
lf(0) = as ', lf(n0) ≠ [], cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), r(lf(n0).last, csf(n0)), r(as, csf(0)), cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(lf(n0).last, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, lf(n0).last), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, lf(n0).last) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, lf(n0).last).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, lf(n0).last).head = lf(n0).last), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last) ⊦ r(lf(n0 + 1).last, csf(n0 + 1)) ∧ lf(n0 + 1) ≠ []
Used terms: n0, lf(n0).last
| lf(0) = as ', lf(n0) ≠ [], cstart(csf(0)), fragω(IOAut(cstart, cstep, cext))(csf, nf), r(lf(n0).last, csf(n0)), r(as, csf(0)), cstep(csf(n0), nf(n0), csf(n0 + 1)) ∧ r(lf(n0).last, csf(n0)) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, lf(n0).last), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, lf(n0).last) ∧ aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get ') ∧ r(f_Nat_'as->List<'as>(n0, lf(n0).last).last, csf(n0 + 1)) ∧ f_Nat_'as->List<'as>(n0, lf(n0).last).head = lf(n0).last), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last) ⊦ r(lf(n0 + 1).last, csf(n0 + 1)) ∧ lf(n0 + 1) ≠ [] |
aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get '), # aal + 1 = # f_Nat_'as->List<'as>(n0, lf(n0).last), f_Nat_'as->List<'as>(n0, lf(n0).last).head = lf(n0).last, lf(0) = as ', lf(n0) ≠ [], cstart(csf(0)), cstep(csf(n0), nf(n0), csf(n0 + 1)), frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, lf(n0).last), aal), fragω(IOAut(cstart, cstep, cext))(csf, nf), r(lf(n0).last, csf(n0)), r(as, csf(0)), r(f_Nat_'as->List<'as>(n0, lf(n0).last).last, csf(n0 + 1)), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last) ⊦ r(lf(n0 + 1).last, csf(n0 + 1)) ∧ lf(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
| aext !(aal) = (cext(nf(n0)) = None ⊃ [];cext(nf(n0)).get '), # aal + 1 = # f_Nat_'as->List<'as>(n0, lf(n0).last), f_Nat_'as->List<'as>(n0, lf(n0).last).head = lf(n0).last, lf(0) = as ', lf(n0) ≠ [], cstart(csf(0)), cstep(csf(n0), nf(n0), csf(n0 + 1)), frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, lf(n0).last), aal), fragω(IOAut(cstart, cstep, cext))(csf, nf), r(lf(n0).last, csf(n0)), r(as, csf(0)), r(f_Nat_'as->List<'as>(n0, lf(n0).last).last, csf(n0 + 1)), ∀ n. lf(n + 1) = f_Nat_'as->List<'as>(n, lf(n).last) ⊦ r(lf(n0 + 1).last, csf(n0 + 1)) ∧ lf(n0 + 1) ≠ [] |
Used simplifier rules: ⊦ # [] = 0; (s) ⊦ m + n = 0 ↔ m = 0 ∧ n = 0; (ws) ⊦ # x = 0 ↔ x = []; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: n0
| cstart(cσ[0]), frag(IOAut(cstart, cstep, cext))(cσ, α), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), ¬ trace(IOAut(astart, astep, aext))(cext !(α)), ∀ n0, as0. cstep(cσ[n0], α[n0], cσ[n0 + 1]) ∧ r(as0, cσ[n0]) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(⌜aal⌝ ) = cext !(⌜α[n0] '⌝ ) ∧ r(f_Nat_'as->List<'as>(n0, as0).last, cσ[n0 + 1]) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0) ⊦ ∃ as. r(as, cσ[0]) ∧ astart(as) |
⊦ fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r) ↔ (∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as))) ∧ (∀ cs, ca, cs0, as. r(as, cs) ∧ cstep(cs, ca, cs0) → (∃ as0. move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ r(as0, cs0)))
cstart(cσ[0]), frag(IOAut(cstart, cstep, cext))(cσ, α), ¬ trace(IOAut(astart, astep, aext))(cext !(α)), ∀ n0, as0. cstep(cσ[n0], α[n0], cσ[n0 + 1]) ∧ r(as0, cσ[n0]) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(⌜aal⌝ ) = cext !(⌜α[n0] '⌝ ) ∧ r(f_Nat_'as->List<'as>(n0, as0).last, cσ[n0 + 1]) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)), ∀ cs, ca, cs0, as. r(as, cs) ∧ cstep(cs, ca, cs0) → (∃ as0. move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ r(as0, cs0)) ⊦ ∃ as. r(as, cσ[0]) ∧ astart(as)
Used terms: cstep, cext, aext, r, astart, cstart, astep
| ⊦ fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r) ↔ (∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as))) ∧ (∀ cs, ca, cs0, as. r(as, cs) ∧ cstep(cs, ca, cs0) → (∃ as0. move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ r(as0, cs0))) |
| cstart(cσ[0]), frag(IOAut(cstart, cstep, cext))(cσ, α), ¬ trace(IOAut(astart, astep, aext))(cext !(α)), ∀ n0, as0. cstep(cσ[n0], α[n0], cσ[n0 + 1]) ∧ r(as0, cσ[n0]) → (∃ aal. frag*(IOAut(astart, astep, aext))(f_Nat_'as->List<'as>(n0, as0), aal) ∧ # aal + 1 = # f_Nat_'as->List<'as>(n0, as0) ∧ aext !(⌜aal⌝ ) = cext !(⌜α[n0] '⌝ ) ∧ r(f_Nat_'as->List<'as>(n0, as0).last, cσ[n0 + 1]) ∧ f_Nat_'as->List<'as>(n0, as0).head = as0), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)), ∀ cs, ca, cs0, as. r(as, cs) ∧ cstep(cs, ca, cs0) → (∃ as0. move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ r(as0, cs0)) ⊦ ∃ as. r(as, cσ[0]) ∧ astart(as) |
Used simplifier rules: ⊦ ext !(⌜al⌝ ) = ⌜ext !(al)⌝ ; (s) ⊦ ⌜x⌝ = ⌜x0⌝ ↔ x = x0; (s) ⊦ ext !(a ') = (ext(a) = None ⊃ [];ext(a).get '); (s) Used terms: cσ[0]
| cstart(cσ[0]), frag(IOAut(cstart, cstep, cext))(cσ, α), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), ¬ trace(IOAut(astart, astep, aext))(cext !(α)) ⊦ ∀ n, as. ∃ asl. cstep(cσ[n], α[n], cσ[n + 1]) ∧ r(as, cσ[n]) → (∃ aal. frag*(IOAut(astart, astep, aext))(asl, aal) ∧ # aal + 1 = # asl ∧ aext !(⌜aal⌝ ) = cext !(⌜α[n] '⌝ ) ∧ r(asl.last, cσ[n + 1]) ∧ asl.head = as) |
cstart(cσ[0]), cstep(cσ[n], α[n], cσ[n + 1]), frag(IOAut(cstart, cstep, cext))(cσ, α), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, cσ[n]), ¬ trace(IOAut(astart, astep, aext))(cext !(α)) ⊦ ∃ asl, aal. frag*(IOAut(astart, astep, aext))(asl, aal) ∧ aext !(aal) = (cext(α[n]) = None ⊃ [];cext(α[n]).get ') ∧ r(asl.last, cσ[n + 1]) ∧ asl.head = as
Used simplifier rules: ⊦ ⌜x⌝ = ⌜x0⌝ ↔ x = x0; (s) ⊦ ext !(a ') = (ext(a) = None ⊃ [];ext(a).get '); (s) ⊦ ext !(⌜al⌝ ) = ⌜ext !(al)⌝ ; (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ frag*(IOAut(start, step, ext))(sl, al) → (# sl = # al + 1 ↔ true); (ss)
| cstart(cσ[0]), cstep(cσ[n], α[n], cσ[n + 1]), frag(IOAut(cstart, cstep, cext))(cσ, α), fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r), r(as, cσ[n]), ¬ trace(IOAut(astart, astep, aext))(cext !(α)) ⊦ ∃ asl, aal. frag*(IOAut(astart, astep, aext))(asl, aal) ∧ aext !(aal) = (cext(α[n]) = None ⊃ [];cext(α[n]).get ') ∧ r(asl.last, cσ[n + 1]) ∧ asl.head = as |
⊦ fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r) ↔ (∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as))) ∧ (∀ cs, ca, cs0, as. r(as, cs) ∧ cstep(cs, ca, cs0) → (∃ as0. move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ r(as0, cs0)))
cstart(cσ[0]), cstep(cσ[n], α[n], cσ[n + 1]), frag(IOAut(cstart, cstep, cext))(cσ, α), r(as, cσ[n]), ¬ trace(IOAut(astart, astep, aext))(cext !(α)), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)), ∀ cs, ca, cs0, as. r(as, cs) ∧ cstep(cs, ca, cs0) → (∃ as0. move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ r(as0, cs0)) ⊦ ∃ asl, aal. frag*(IOAut(astart, astep, aext))(asl, aal) ∧ aext !(aal) = (cext(α[n]) = None ⊃ [];cext(α[n]).get ') ∧ r(asl.last, cσ[n + 1]) ∧ asl.head = as
Used terms: cstep, cext, aext, r, astart, cstart, astep
| ⊦ fwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r) ↔ (∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as))) ∧ (∀ cs, ca, cs0, as. r(as, cs) ∧ cstep(cs, ca, cs0) → (∃ as0. move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ r(as0, cs0))) |
| cstart(cσ[0]), cstep(cσ[n], α[n], cσ[n + 1]), frag(IOAut(cstart, cstep, cext))(cσ, α), r(as, cσ[n]), ¬ trace(IOAut(astart, astep, aext))(cext !(α)), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)), ∀ cs, ca, cs0, as. r(as, cs) ∧ cstep(cs, ca, cs0) → (∃ as0. move(IOAut(astart, astep, aext))(as, cext !(ca '), as0) ∧ r(as0, cs0)) ⊦ ∃ asl, aal. frag*(IOAut(astart, astep, aext))(asl, aal) ∧ aext !(aal) = (cext(α[n]) = None ⊃ [];cext(α[n]).get ') ∧ r(asl.last, cσ[n + 1]) ∧ asl.head = as |
cstart(cσ[0]), cstep(cσ[n], α[n], cσ[n + 1]), frag(IOAut(cstart, cstep, cext))(cσ, α), r(as, cσ[n]), ¬ trace(IOAut(astart, astep, aext))(cext !(α)), r(as, cσ[n]) ∧ cstep(cσ[n], α[n], cσ[n + 1]) → (∃ as0. move(IOAut(astart, astep, aext))(as, cext !(α[n] '), as0) ∧ r(as0, cσ[n + 1])), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)) ⊦ ∃ asl, aal. frag*(IOAut(astart, astep, aext))(asl, aal) ∧ aext !(aal) = (cext(α[n]) = None ⊃ [];cext(α[n]).get ') ∧ r(asl.last, cσ[n + 1]) ∧ asl.head = as
Used terms: cσ[n], α[n], cσ[n + 1], as
| cstart(cσ[0]), cstep(cσ[n], α[n], cσ[n + 1]), frag(IOAut(cstart, cstep, cext))(cσ, α), r(as, cσ[n]), ¬ trace(IOAut(astart, astep, aext))(cext !(α)), r(as, cσ[n]) ∧ cstep(cσ[n], α[n], cσ[n + 1]) → (∃ as0. move(IOAut(astart, astep, aext))(as, cext !(α[n] '), as0) ∧ r(as0, cσ[n + 1])), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)) ⊦ ∃ asl, aal. frag*(IOAut(astart, astep, aext))(asl, aal) ∧ aext !(aal) = (cext(α[n]) = None ⊃ [];cext(α[n]).get ') ∧ r(asl.last, cσ[n + 1]) ∧ asl.head = as |
cstart(cσ[0]), cstep(cσ[n], α[n], cσ[n + 1]), frag(IOAut(cstart, cstep, cext))(cσ, α), move(IOAut(astart, astep, aext))(as, (cext(α[n]) = None ⊃ [];cext(α[n]).get '), as0), r(as, cσ[n]), r(as0, cσ[n + 1]), ¬ trace(IOAut(astart, astep, aext))(cext !(α)), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)) ⊦ ∃ asl, aal. frag*(IOAut(astart, astep, aext))(asl, aal) ∧ aext !(aal) = (cext(α[n]) = None ⊃ [];cext(α[n]).get ') ∧ r(asl.last, cσ[n + 1]) ∧ asl.head = as
Used simplifier rules: ⊦ ext !(a ') = (ext(a) = None ⊃ [];ext(a).get '); (s)
| cstart(cσ[0]), cstep(cσ[n], α[n], cσ[n + 1]), frag(IOAut(cstart, cstep, cext))(cσ, α), move(IOAut(astart, astep, aext))(as, (cext(α[n]) = None ⊃ [];cext(α[n]).get '), as0), r(as, cσ[n]), r(as0, cσ[n + 1]), ¬ trace(IOAut(astart, astep, aext))(cext !(α)), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)) ⊦ ∃ asl, aal. frag*(IOAut(astart, astep, aext))(asl, aal) ∧ aext !(aal) = (cext(α[n]) = None ⊃ [];cext(α[n]).get ') ∧ r(asl.last, cσ[n + 1]) ∧ asl.head = as |
⊦ move(ioa)(s1, el, s2) ↔ (∃ al, sl. frag*(ioa)(sl, al) ∧ s1 = sl[0] ∧ s2 = sl.last ∧ ioa.ext !(al) = el)
cstart(cσ[0]), cstep(cσ[n], α[n], cσ[n + 1]), frag(IOAut(cstart, cstep, cext))(cσ, α), r(as0, cσ[n + 1]), r(as, cσ[n]), ¬ trace(IOAut(astart, astep, aext))(cext !(α)), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)), ∃ al, sl. frag*(IOAut(astart, astep, aext))(sl, al) ∧ as = sl[0] ∧ as0 = sl.last ∧ IOAut(astart, astep, aext).ext !(al) = (cext(α[n]) = None ⊃ [];cext(α[n]).get ') ⊦ ∃ asl, aal. frag*(IOAut(astart, astep, aext))(asl, aal) ∧ aext !(aal) = (cext(α[n]) = None ⊃ [];cext(α[n]).get ') ∧ r(asl.last, cσ[n + 1]) ∧ asl.head = as
Used terms: IOAut(astart, astep, aext), as, (cext(α[n]) = None ⊃ [];cext(α[n]).get '), as0
| ⊦ move(ioa)(s1, el, s2) ↔ (∃ al, sl. frag*(ioa)(sl, al) ∧ s1 = sl[0] ∧ s2 = sl.last ∧ ioa.ext !(al) = el) |
| cstart(cσ[0]), cstep(cσ[n], α[n], cσ[n + 1]), frag(IOAut(cstart, cstep, cext))(cσ, α), r(as0, cσ[n + 1]), r(as, cσ[n]), ¬ trace(IOAut(astart, astep, aext))(cext !(α)), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)), ∃ al, sl. frag*(IOAut(astart, astep, aext))(sl, al) ∧ as = sl[0] ∧ as0 = sl.last ∧ IOAut(astart, astep, aext).ext !(al) = (cext(α[n]) = None ⊃ [];cext(α[n]).get ') ⊦ ∃ asl, aal. frag*(IOAut(astart, astep, aext))(asl, aal) ∧ aext !(aal) = (cext(α[n]) = None ⊃ [];cext(α[n]).get ') ∧ r(asl.last, cσ[n + 1]) ∧ asl.head = as |
aext !(aal) = (cext(α[n]) = None ⊃ [];cext(α[n]).get '), cstart(cσ[0]), cstep(cσ[n], α[n], cσ[n + 1]), frag(IOAut(cstart, cstep, cext))(cσ, α), frag*(IOAut(astart, astep, aext))(asl, aal), r(asl[0], cσ[n]), r(asl.last, cσ[n + 1]), ¬ trace(IOAut(astart, astep, aext))(cext !(α)), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)) ⊦ ∃ asl0, aal. frag*(IOAut(astart, astep, aext))(asl0, aal) ∧ aext !(aal) = (cext(α[n]) = None ⊃ [];cext(α[n]).get ') ∧ r(asl0.last, cσ[n + 1]) ∧ asl0.head = asl[0]
Used simplifier rules: ⊦ IOAut(start, step, ext).ext = ext; (s)
| aext !(aal) = (cext(α[n]) = None ⊃ [];cext(α[n]).get '), cstart(cσ[0]), cstep(cσ[n], α[n], cσ[n + 1]), frag(IOAut(cstart, cstep, cext))(cσ, α), frag*(IOAut(astart, astep, aext))(asl, aal), r(asl[0], cσ[n]), r(asl.last, cσ[n + 1]), ¬ trace(IOAut(astart, astep, aext))(cext !(α)), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)) ⊦ ∃ asl0, aal. frag*(IOAut(astart, astep, aext))(asl0, aal) ∧ aext !(aal) = (cext(α[n]) = None ⊃ [];cext(α[n]).get ') ∧ r(asl0.last, cσ[n + 1]) ∧ asl0.head = asl[0] |
aext !(aal) = (cext(α[n]) = None ⊃ [];cext(α[n]).get '), cstart(cσ[0]), cstep(cσ[n], α[n], cσ[n + 1]), frag(IOAut(cstart, cstep, cext))(cσ, α), frag*(IOAut(astart, astep, aext))(asl, aal), r(asl.last, cσ[n + 1]), r(asl[0], cσ[n]), ¬ trace(IOAut(astart, astep, aext))(cext !(α)), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)) ⊦ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ aext !(aal) = (cext(α[n]) = None ⊃ [];cext(α[n]).get ') ∧ r(asl.last, cσ[n + 1]) ∧ asl.head = asl[0]
Used terms: asl, aal
| aext !(aal) = (cext(α[n]) = None ⊃ [];cext(α[n]).get '), cstart(cσ[0]), cstep(cσ[n], α[n], cσ[n + 1]), frag(IOAut(cstart, cstep, cext))(cσ, α), frag*(IOAut(astart, astep, aext))(asl, aal), r(asl.last, cσ[n + 1]), r(asl[0], cσ[n]), ¬ trace(IOAut(astart, astep, aext))(cext !(α)), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)) ⊦ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ aext !(aal) = (cext(α[n]) = None ⊃ [];cext(α[n]).get ') ∧ r(asl.last, cσ[n + 1]) ∧ asl.head = asl[0] |
aext !(aal) = (cext(α[n]) = None ⊃ [];cext(α[n]).get '), asl.head ≠ asl[0], cstart(cσ[0]), cstep(cσ[n], α[n], cσ[n + 1]), frag(IOAut(cstart, cstep, cext))(cσ, α), frag*(IOAut(astart, astep, aext))(asl, aal), r(asl[0], cσ[n]), r(asl.last, cσ[n + 1]), ¬ trace(IOAut(astart, astep, aext))(cext !(α)), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)) ⊦
| aext !(aal) = (cext(α[n]) = None ⊃ [];cext(α[n]).get '), asl.head ≠ asl[0], cstart(cσ[0]), cstep(cσ[n], α[n], cσ[n + 1]), frag(IOAut(cstart, cstep, cext))(cσ, α), frag*(IOAut(astart, astep, aext))(asl, aal), r(asl[0], cσ[n]), r(asl.last, cσ[n + 1]), ¬ trace(IOAut(astart, astep, aext))(cext !(α)), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)) ⊦ |
Used simplifier rules: ⊦ a + x = a ' + x; (s) ⊦ (a ' + x)[0] = a; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ¬ frag*(IOAut(start, step, ext))([], al); (s) x ≠ [] ⊦ a = x.head ∧ y = x.tail ↔ x = a + y; (elim) Used terms: asl, as0, asl0
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.