| nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f), cstep(cs, ca, cs'), r(as, cs) ⊦ ∃ asl, aal. asl.head = as ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca) ∧ r(as', cs')) ∨ cext(ca) = None ∧ r(asl.last, cs')) |
cstep(cs, ca, cs'), nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f), r(as, cs) ⊦ ∃ asl, aal. asl.head = as ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca) ∧ r(as', cs')) ∨ cext(ca) = None ∧ r(asl.last, cs'))
| cstep(cs, ca, cs'), nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f), r(as, cs) ⊦ ∃ asl, aal. asl.head = as ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca) ∧ r(as', cs')) ∨ cext(ca) = None ∧ r(asl.last, cs')) |
cstep(cs, ca, cs'), nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f), r(as, cs), ∀ size01f0, cs0, ca0, cs'0, as0, cstep, cstart, cext, astart, astep, aext, r. size01f0(cs0, ca0, cs'0, as0) < size01f(cs, ca, cs', as) → cstep(cs0, ca0, cs'0) ∧ nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f0) ∧ r(as0, cs0) → (∃ asl, aal. asl.head = as0 ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs0)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca0) ∧ r(as', cs'0)) ∨ cext(ca0) = None ∧ r(asl.last, cs'0))) ⊦ ∃ asl, aal. asl.head = as ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca) ∧ r(as', cs')) ∨ cext(ca) = None ∧ r(asl.last, cs'))
Used simplifier rules: <; (wellfounded) Used terms: size01f(cs, ca, cs', as)
| cstep(cs, ca, cs'), nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f), r(as, cs), ∀ size01f0, cs0, ca0, cs'0, as0, cstep, cstart, cext, astart, astep, aext, r. size01f0(cs0, ca0, cs'0, as0) < size01f(cs, ca, cs', as) → cstep(cs0, ca0, cs'0) ∧ nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f0) ∧ r(as0, cs0) → (∃ asl, aal. asl.head = as0 ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs0)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca0) ∧ r(as', cs'0)) ∨ cext(ca0) = None ∧ r(asl.last, cs'0))) ⊦ ∃ asl, aal. asl.head = as ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca) ∧ r(as', cs')) ∨ cext(ca) = None ∧ r(asl.last, cs')) |
⊦ nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f) ↔ (∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as))) ∧ (∀ cs, ca, cs', as. r(as, cs) ∧ cstep(cs, ca, cs') → r(as, cs') ∧ cext(ca) = None ∨ (∃ as', aa. aext(aa) = cext(ca) ∧ astep(as, aa, as') ∧ r(as', cs')) ∨ (∃ as', aa. astep(as, aa, as') ∧ aext(aa) = None ∧ r(as', cs) ∧ size01f(cs, ca, cs', as') < size01f(cs, ca, cs', as)))
cstep(cs, ca, cs'), nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f), r(as, cs), nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f) ↔ (∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as))) ∧ (∀ cs, ca, cs', as. r(as, cs) ∧ cstep(cs, ca, cs') → r(as, cs') ∧ cext(ca) = None ∨ (∃ as', aa. aext(aa) = cext(ca) ∧ astep(as, aa, as') ∧ r(as', cs')) ∨ (∃ as', aa. astep(as, aa, as') ∧ aext(aa) = None ∧ r(as', cs) ∧ size01f(cs, ca, cs', as') < size01f(cs, ca, cs', as))), ∀ size01f0, cs0, ca0, cs'0, as0, cstep, cstart, cext, astart, astep, aext, r. size01f0(cs0, ca0, cs'0, as0) < size01f(cs, ca, cs', as) → cstep(cs0, ca0, cs'0) ∧ nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f0) ∧ r(as0, cs0) → (∃ asl, aal. asl.head = as0 ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs0)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca0) ∧ r(as', cs'0)) ∨ cext(ca0) = None ∧ r(asl.last, cs'0))) ⊦ ∃ asl, aal. asl.head = as ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca) ∧ r(as', cs')) ∨ cext(ca) = None ∧ r(asl.last, cs'))
Used terms: cstep, cext, aext, r, astart, cstart, astep, size01f
| ⊦ nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f) ↔ (∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as))) ∧ (∀ cs, ca, cs', as. r(as, cs) ∧ cstep(cs, ca, cs') → r(as, cs') ∧ cext(ca) = None ∨ (∃ as', aa. aext(aa) = cext(ca) ∧ astep(as, aa, as') ∧ r(as', cs')) ∨ (∃ as', aa. astep(as, aa, as') ∧ aext(aa) = None ∧ r(as', cs) ∧ size01f(cs, ca, cs', as') < size01f(cs, ca, cs', as))) |
| cstep(cs, ca, cs'), nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f), r(as, cs), nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f) ↔ (∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as))) ∧ (∀ cs, ca, cs', as. r(as, cs) ∧ cstep(cs, ca, cs') → r(as, cs') ∧ cext(ca) = None ∨ (∃ as', aa. aext(aa) = cext(ca) ∧ astep(as, aa, as') ∧ r(as', cs')) ∨ (∃ as', aa. astep(as, aa, as') ∧ aext(aa) = None ∧ r(as', cs) ∧ size01f(cs, ca, cs', as') < size01f(cs, ca, cs', as))), ∀ size01f0, cs0, ca0, cs'0, as0, cstep, cstart, cext, astart, astep, aext, r. size01f0(cs0, ca0, cs'0, as0) < size01f(cs, ca, cs', as) → cstep(cs0, ca0, cs'0) ∧ nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f0) ∧ r(as0, cs0) → (∃ asl, aal. asl.head = as0 ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs0)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca0) ∧ r(as', cs'0)) ∨ cext(ca0) = None ∧ r(asl.last, cs'0))) ⊦ ∃ asl, aal. asl.head = as ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca) ∧ r(as', cs')) ∨ cext(ca) = None ∧ r(asl.last, cs')) |
cstep(cs, ca, cs'), nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f), r(as, cs), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)), ∀ cs, ca, cs', as. r(as, cs) ∧ cstep(cs, ca, cs') → r(as, cs') ∧ cext(ca) = None ∨ (∃ as', aa. aext(aa) = cext(ca) ∧ astep(as, aa, as') ∧ r(as', cs')) ∨ (∃ as', aa. astep(as, aa, as') ∧ aext(aa) = None ∧ r(as', cs) ∧ size01f(cs, ca, cs', as') < size01f(cs, ca, cs', as)), ∀ size01f0, cs0, ca0, cs'0, as0, cstep, cstart, cext, astart, astep, aext, r. size01f0(cs0, ca0, cs'0, as0) < size01f(cs, ca, cs', as) → cstep(cs0, ca0, cs'0) ∧ nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f0) ∧ r(as0, cs0) → (∃ asl, aal. asl.head = as0 ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs0)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca0) ∧ r(as', cs'0)) ∨ cext(ca0) = None ∧ r(asl.last, cs'0))) ⊦ ∃ asl, aal. asl.head = as ∧ aext !(aal) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca) ∧ r(as', cs')) ∨ cext(ca) = None ∧ r(asl.last, cs'))
Used simplifier rules: ⊦ ⌜x⌝ = [] ↔ x = []; (s) ⊦ ext !(⌜al⌝ ) = ⌜ext !(al)⌝ ; (s)
| cstep(cs, ca, cs'), nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f), r(as, cs), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)), ∀ cs, ca, cs', as. r(as, cs) ∧ cstep(cs, ca, cs') → r(as, cs') ∧ cext(ca) = None ∨ (∃ as', aa. aext(aa) = cext(ca) ∧ astep(as, aa, as') ∧ r(as', cs')) ∨ (∃ as', aa. astep(as, aa, as') ∧ aext(aa) = None ∧ r(as', cs) ∧ size01f(cs, ca, cs', as') < size01f(cs, ca, cs', as)), ∀ size01f0, cs0, ca0, cs'0, as0, cstep, cstart, cext, astart, astep, aext, r. size01f0(cs0, ca0, cs'0, as0) < size01f(cs, ca, cs', as) → cstep(cs0, ca0, cs'0) ∧ nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f0) ∧ r(as0, cs0) → (∃ asl, aal. asl.head = as0 ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs0)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca0) ∧ r(as', cs'0)) ∨ cext(ca0) = None ∧ r(asl.last, cs'0))) ⊦ ∃ asl, aal. asl.head = as ∧ aext !(aal) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca) ∧ r(as', cs')) ∨ cext(ca) = None ∧ r(asl.last, cs')) |
cstep(cs, ca, cs'), nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f), r(as, cs), r(as, cs) ∧ cstep(cs, ca, cs') → r(as, cs') ∧ cext(ca) = None ∨ (∃ as', aa. aext(aa) = cext(ca) ∧ astep(as, aa, as') ∧ r(as', cs')) ∨ (∃ as', aa. astep(as, aa, as') ∧ aext(aa) = None ∧ r(as', cs) ∧ size01f(cs, ca, cs', as') < size01f(cs, ca, cs', as)), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)), ∀ size01f0, cs0, ca0, cs'0, as0, cstep, cstart, cext, astart, astep, aext, r. size01f0(cs0, ca0, cs'0, as0) < size01f(cs, ca, cs', as) → cstep(cs0, ca0, cs'0) ∧ nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f0) ∧ r(as0, cs0) → (∃ asl, aal. asl.head = as0 ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs0)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca0) ∧ r(as', cs'0)) ∨ cext(ca0) = None ∧ r(asl.last, cs'0))) ⊦ ∃ asl, aal. asl.head = as ∧ aext !(aal) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca) ∧ r(as', cs')) ∨ cext(ca) = None ∧ r(asl.last, cs'))
Used terms: cs, ca, cs', as
| cstep(cs, ca, cs'), nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f), r(as, cs), r(as, cs) ∧ cstep(cs, ca, cs') → r(as, cs') ∧ cext(ca) = None ∨ (∃ as', aa. aext(aa) = cext(ca) ∧ astep(as, aa, as') ∧ r(as', cs')) ∨ (∃ as', aa. astep(as, aa, as') ∧ aext(aa) = None ∧ r(as', cs) ∧ size01f(cs, ca, cs', as') < size01f(cs, ca, cs', as)), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)), ∀ size01f0, cs0, ca0, cs'0, as0, cstep, cstart, cext, astart, astep, aext, r. size01f0(cs0, ca0, cs'0, as0) < size01f(cs, ca, cs', as) → cstep(cs0, ca0, cs'0) ∧ nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f0) ∧ r(as0, cs0) → (∃ asl, aal. asl.head = as0 ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs0)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca0) ∧ r(as', cs'0)) ∨ cext(ca0) = None ∧ r(asl.last, cs'0))) ⊦ ∃ asl, aal. asl.head = as ∧ aext !(aal) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca) ∧ r(as', cs')) ∨ cext(ca) = None ∧ r(asl.last, cs')) |
cstep(cs, ca, cs'), nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f), r(as, cs), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)), r(as, cs') ∧ cext(ca) = None ∨ aext(aa) = cext(ca) ∧ astep(as, aa, as') ∧ r(as', cs') ∨ astep(as, aa0, as'0) ∧ aext(aa0) = None ∧ r(as'0, cs) ∧ size01f(cs, ca, cs', as'0) < size01f(cs, ca, cs', as), ∀ size01f0, cs0, ca0, cs'0, as0, cstep, cstart, cext, astart, astep, aext, r. size01f0(cs0, ca0, cs'0, as0) < size01f(cs, ca, cs', as) → cstep(cs0, ca0, cs'0) ∧ nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f0) ∧ r(as0, cs0) → (∃ asl, aal. asl.head = as0 ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs0)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca0) ∧ r(as', cs'0)) ∨ cext(ca0) = None ∧ r(asl.last, cs'0))) ⊦ ∃ asl, aal. asl.head = as ∧ aext !(aal) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca) ∧ r(as', cs')) ∨ cext(ca) = None ∧ r(asl.last, cs'))
| cstep(cs, ca, cs'), nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f), r(as, cs), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)), r(as, cs') ∧ cext(ca) = None ∨ aext(aa) = cext(ca) ∧ astep(as, aa, as') ∧ r(as', cs') ∨ astep(as, aa0, as'0) ∧ aext(aa0) = None ∧ r(as'0, cs) ∧ size01f(cs, ca, cs', as'0) < size01f(cs, ca, cs', as), ∀ size01f0, cs0, ca0, cs'0, as0, cstep, cstart, cext, astart, astep, aext, r. size01f0(cs0, ca0, cs'0, as0) < size01f(cs, ca, cs', as) → cstep(cs0, ca0, cs'0) ∧ nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f0) ∧ r(as0, cs0) → (∃ asl, aal. asl.head = as0 ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs0)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca0) ∧ r(as', cs'0)) ∨ cext(ca0) = None ∧ r(asl.last, cs'0))) ⊦ ∃ asl, aal. asl.head = as ∧ aext !(aal) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca) ∧ r(as', cs')) ∨ cext(ca) = None ∧ r(asl.last, cs')) |
cext(ca) = None, cstep(cs, ca, cs'), nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f), r(as, cs), r(as, cs'), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)), ∀ size01f0, cs0, ca0, cs'0, as0, cstep, cstart, cext, astart, astep, aext, r. size01f0(cs0, ca0, cs'0, as0) < size01f(cs, ca, cs', as) → cstep(cs0, ca0, cs'0) ∧ nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f0) ∧ r(as0, cs0) → (∃ asl, aal. asl.head = as0 ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs0)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca0) ∧ r(as', cs'0)) ∨ cext(ca0) = None ∧ r(asl.last, cs'0))) ⊦ ∃ asl, aal. asl.head = as ∧ aext !(aal) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca) ∧ r(as', cs')) ∨ cext(ca) = None ∧ r(asl.last, cs'))
aext(aa) = cext(ca), astep(as, aa, as'), cstep(cs, ca, cs'), nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f), r(as, cs), r(as', cs'), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)), ∀ size01f0, cs0, ca0, cs'0, as0, cstep, cstart, cext, astart, astep, aext, r. size01f0(cs0, ca0, cs'0, as0) < size01f(cs, ca, cs', as) → cstep(cs0, ca0, cs'0) ∧ nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f0) ∧ r(as0, cs0) → (∃ asl, aal. asl.head = as0 ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs0)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca0) ∧ r(as', cs'0)) ∨ cext(ca0) = None ∧ r(asl.last, cs'0))) ⊦ ∃ asl, aal. asl.head = as ∧ aext !(aal) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca) ∧ r(as', cs')) ∨ cext(ca) = None ∧ r(asl.last, cs'))
aext(aa0) = None, size01f(cs, ca, cs', as'0) < size01f(cs, ca, cs', as), astep(as, aa0, as'0), cstep(cs, ca, cs'), nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f), r(as, cs), r(as'0, cs), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)), ∀ size01f0, cs0, ca0, cs'0, as0, cstep, cstart, cext, astart, astep, aext, r. size01f0(cs0, ca0, cs'0, as0) < size01f(cs, ca, cs', as) → cstep(cs0, ca0, cs'0) ∧ nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f0) ∧ r(as0, cs0) → (∃ asl, aal. asl.head = as0 ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs0)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca0) ∧ r(as', cs'0)) ∨ cext(ca0) = None ∧ r(asl.last, cs'0))) ⊦ ∃ asl, aal. asl.head = as ∧ aext !(aal) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca) ∧ r(as', cs')) ∨ cext(ca) = None ∧ r(asl.last, cs'))
| cext(ca) = None, cstep(cs, ca, cs'), nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f), r(as, cs), r(as, cs'), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)), ∀ size01f0, cs0, ca0, cs'0, as0, cstep, cstart, cext, astart, astep, aext, r. size01f0(cs0, ca0, cs'0, as0) < size01f(cs, ca, cs', as) → cstep(cs0, ca0, cs'0) ∧ nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f0) ∧ r(as0, cs0) → (∃ asl, aal. asl.head = as0 ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs0)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca0) ∧ r(as', cs'0)) ∨ cext(ca0) = None ∧ r(asl.last, cs'0))) ⊦ ∃ asl, aal. asl.head = as ∧ aext !(aal) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca) ∧ r(as', cs')) ∨ cext(ca) = None ∧ r(asl.last, cs')) |
cext(ca) = None, cstep(cs, ca, cs'), nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f), r(as, cs'), r(as, cs), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)), ∀ size01f0, cs0, ca0, cs'0, as0, cstep, cstart, cext, astart, astep, aext, r. size01f0(cs0, ca0, cs'0, as0) < size01f(cs, ca, cs', as) → cstep(cs0, ca0, cs'0) ∧ nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f0) ∧ r(as0, cs0) → (∃ asl, aal. asl.head = as0 ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs0)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca0) ∧ r(as', cs'0)) ∨ cext(ca0) = None ∧ r(asl.last, cs'0))) ⊦ ∃ asl, aal. asl.head = as ∧ aext !(aal) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = None ∧ r(as', cs')) ∨ r(asl.last, cs'))
| cext(ca) = None, cstep(cs, ca, cs'), nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f), r(as, cs'), r(as, cs), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)), ∀ size01f0, cs0, ca0, cs'0, as0, cstep, cstart, cext, astart, astep, aext, r. size01f0(cs0, ca0, cs'0, as0) < size01f(cs, ca, cs', as) → cstep(cs0, ca0, cs'0) ∧ nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f0) ∧ r(as0, cs0) → (∃ asl, aal. asl.head = as0 ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs0)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca0) ∧ r(as', cs'0)) ∨ cext(ca0) = None ∧ r(asl.last, cs'0))) ⊦ ∃ asl, aal. asl.head = as ∧ aext !(aal) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = None ∧ r(as', cs')) ∨ r(asl.last, cs')) |
Used simplifier rules: ⊦ a '.head = a; (s) ⊦ ext !([]) = []; (s) ⊦ frag*(IOAut(start, step, ext))(s ', []); (s) ⊦ a ∈ a0 ' ↔ a = a0; (s) ⊦ a '.last = a; (s) Used terms: as ', []
| aext(aa) = cext(ca), astep(as, aa, as'), cstep(cs, ca, cs'), nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f), r(as, cs), r(as', cs'), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)), ∀ size01f0, cs0, ca0, cs'0, as0, cstep, cstart, cext, astart, astep, aext, r. size01f0(cs0, ca0, cs'0, as0) < size01f(cs, ca, cs', as) → cstep(cs0, ca0, cs'0) ∧ nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f0) ∧ r(as0, cs0) → (∃ asl, aal. asl.head = as0 ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs0)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca0) ∧ r(as', cs'0)) ∨ cext(ca0) = None ∧ r(asl.last, cs'0))) ⊦ ∃ asl, aal. asl.head = as ∧ aext !(aal) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca) ∧ r(as', cs')) ∨ cext(ca) = None ∧ r(asl.last, cs')) |
aext(aa) = cext(ca), astep(as, aa, as'), cstep(cs, ca, cs'), nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f), r(as', cs'), r(as, cs), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)), ∀ size01f0, cs0, ca0, cs'0, as0, cstep, cstart, cext, astart, astep, aext, r. size01f0(cs0, ca0, cs'0, as0) < size01f(cs, ca, cs', as) → cstep(cs0, ca0, cs'0) ∧ nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f0) ∧ r(as0, cs0) → (∃ asl, aal. asl.head = as0 ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs0)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca0) ∧ r(as', cs'0)) ∨ cext(ca0) = None ∧ r(asl.last, cs'0))) ⊦ as '.head = as ∧ aext !([]) = [] ∧ frag*(IOAut(astart, astep, aext))(as ', []) ∧ (∀ as0. as0 ∈ as ' → r(as0, cs)) ∧ ((∃ as', aa. astep(as '.last, aa, as') ∧ aext(aa) = cext(ca) ∧ r(as', cs')) ∨ cext(ca) = None ∧ r(as '.last, cs'))
Used terms: as ', []
| aext(aa) = cext(ca), astep(as, aa, as'), cstep(cs, ca, cs'), nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f), r(as', cs'), r(as, cs), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)), ∀ size01f0, cs0, ca0, cs'0, as0, cstep, cstart, cext, astart, astep, aext, r. size01f0(cs0, ca0, cs'0, as0) < size01f(cs, ca, cs', as) → cstep(cs0, ca0, cs'0) ∧ nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f0) ∧ r(as0, cs0) → (∃ asl, aal. asl.head = as0 ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs0)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca0) ∧ r(as', cs'0)) ∨ cext(ca0) = None ∧ r(asl.last, cs'0))) ⊦ as '.head = as ∧ aext !([]) = [] ∧ frag*(IOAut(astart, astep, aext))(as ', []) ∧ (∀ as0. as0 ∈ as ' → r(as0, cs)) ∧ ((∃ as', aa. astep(as '.last, aa, as') ∧ aext(aa) = cext(ca) ∧ r(as', cs')) ∨ cext(ca) = None ∧ r(as '.last, cs')) |
aext(aa) = cext(ca), astep(as, aa, as'), cstep(cs, ca, cs'), nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f), r(as, cs), r(as', cs'), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)), ∀ size01f0, cs0, ca0, cs'0, as0, cstep, cstart, cext, astart, astep, aext, r. size01f0(cs0, ca0, cs'0, as0) < size01f(cs, ca, cs', as) → cstep(cs0, ca0, cs'0) ∧ nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f0) ∧ r(as0, cs0) → (∃ asl, aal. asl.head = as0 ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs0)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca0) ∧ r(as', cs'0)) ∨ cext(ca0) = None ∧ r(asl.last, cs'0))) ⊦ ∃ as'0, aa0. astep(as, aa0, as'0) ∧ aext(aa0) = cext(ca) ∧ r(as'0, cs'), cext(ca) = None ∧ r(as, cs')
Used simplifier rules: ⊦ a '.last = a; (s) ⊦ a ∈ a0 ' ↔ a = a0; (s) ⊦ frag*(IOAut(start, step, ext))(s ', []); (s) ⊦ ext !([]) = []; (s) ⊦ a '.head = a; (s)
| aext(aa) = cext(ca), astep(as, aa, as'), cstep(cs, ca, cs'), nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f), r(as, cs), r(as', cs'), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)), ∀ size01f0, cs0, ca0, cs'0, as0, cstep, cstart, cext, astart, astep, aext, r. size01f0(cs0, ca0, cs'0, as0) < size01f(cs, ca, cs', as) → cstep(cs0, ca0, cs'0) ∧ nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f0) ∧ r(as0, cs0) → (∃ asl, aal. asl.head = as0 ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs0)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca0) ∧ r(as', cs'0)) ∨ cext(ca0) = None ∧ r(asl.last, cs'0))) ⊦ ∃ as'0, aa0. astep(as, aa0, as'0) ∧ aext(aa0) = cext(ca) ∧ r(as'0, cs'), cext(ca) = None ∧ r(as, cs') |
Used terms: as', aa
| aext(aa0) = None, size01f(cs, ca, cs', as'0) < size01f(cs, ca, cs', as), astep(as, aa0, as'0), cstep(cs, ca, cs'), nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f), r(as, cs), r(as'0, cs), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)), ∀ size01f0, cs0, ca0, cs'0, as0, cstep, cstart, cext, astart, astep, aext, r. size01f0(cs0, ca0, cs'0, as0) < size01f(cs, ca, cs', as) → cstep(cs0, ca0, cs'0) ∧ nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f0) ∧ r(as0, cs0) → (∃ asl, aal. asl.head = as0 ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs0)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca0) ∧ r(as', cs'0)) ∨ cext(ca0) = None ∧ r(asl.last, cs'0))) ⊦ ∃ asl, aal. asl.head = as ∧ aext !(aal) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca) ∧ r(as', cs')) ∨ cext(ca) = None ∧ r(asl.last, cs')) |
aext(aa0) = None, size01f(cs, ca, cs', as'0) < size01f(cs, ca, cs', as), astep(as, aa0, as'0), cstep(cs, ca, cs'), nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f), r(as'0, cs), r(as, cs), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)), ∃ asl, aal. asl.head = as'0 ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca) ∧ r(as', cs')) ∨ cext(ca) = None ∧ r(asl.last, cs')), ∀ size01f0, cs0, ca0, cs'0, as0, cstep, cstart, cext, astart, astep, aext, r. size01f0(cs0, ca0, cs'0, as0) < size01f(cs, ca, cs', as) → cstep(cs0, ca0, cs'0) ∧ nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f0) ∧ r(as0, cs0) → (∃ asl, aal. asl.head = as0 ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs0)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca0) ∧ r(as', cs'0)) ∨ cext(ca0) = None ∧ r(asl.last, cs'0))) ⊦ ∃ asl, aal. asl.head = as ∧ aext !(aal) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca) ∧ r(as', cs')) ∨ cext(ca) = None ∧ r(asl.last, cs'))
Used terms: size01f, cs, ca, cs', as'0, cstep, cstart, cext, astart, astep, aext, r
| aext(aa0) = None, size01f(cs, ca, cs', as'0) < size01f(cs, ca, cs', as), astep(as, aa0, as'0), cstep(cs, ca, cs'), nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f), r(as'0, cs), r(as, cs), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)), ∃ asl, aal. asl.head = as'0 ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca) ∧ r(as', cs')) ∨ cext(ca) = None ∧ r(asl.last, cs')), ∀ size01f0, cs0, ca0, cs'0, as0, cstep, cstart, cext, astart, astep, aext, r. size01f0(cs0, ca0, cs'0, as0) < size01f(cs, ca, cs', as) → cstep(cs0, ca0, cs'0) ∧ nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f0) ∧ r(as0, cs0) → (∃ asl, aal. asl.head = as0 ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs0)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca0) ∧ r(as', cs'0)) ∨ cext(ca0) = None ∧ r(asl.last, cs'0))) ⊦ ∃ asl, aal. asl.head = as ∧ aext !(aal) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca) ∧ r(as', cs')) ∨ cext(ca) = None ∧ r(asl.last, cs')) |
aext !(aal) = [], aext(aa0) = None, size01f(cs, ca, cs', asl.head) < size01f(cs, ca, cs', as), astep(as, aa0, asl.head), cstep(cs, ca, cs'), frag*(IOAut(astart, astep, aext))(asl, aal), nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f), r(asl.head, cs), r(as, cs), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)), ∀ as. as ∈ asl → r(as, cs), astep(asl.last, aa, as') ∧ aext(aa) = cext(ca) ∧ r(as', cs') ∨ cext(ca) = None ∧ r(asl.last, cs'), ∀ size01f0, cs0, ca0, cs'0, as0, cstep, cstart, cext, astart, astep, aext, r. size01f0(cs0, ca0, cs'0, as0) < size01f(cs, ca, cs', as) → cstep(cs0, ca0, cs'0) ∧ nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f0) ∧ r(as0, cs0) → (∃ asl, aal. asl.head = as0 ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs0)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca0) ∧ r(as', cs'0)) ∨ cext(ca0) = None ∧ r(asl.last, cs'0))) ⊦ ∃ asl, aal. asl.head = as ∧ aext !(aal) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca) ∧ r(as', cs')) ∨ cext(ca) = None ∧ r(asl.last, cs'))
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ ⌜x⌝ = [] ↔ x = []; (s) ⊦ ext !(⌜al⌝ ) = ⌜ext !(al)⌝ ; (s)
| aext !(aal) = [], aext(aa0) = None, size01f(cs, ca, cs', asl.head) < size01f(cs, ca, cs', as), astep(as, aa0, asl.head), cstep(cs, ca, cs'), frag*(IOAut(astart, astep, aext))(asl, aal), nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f), r(asl.head, cs), r(as, cs), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)), ∀ as. as ∈ asl → r(as, cs), astep(asl.last, aa, as') ∧ aext(aa) = cext(ca) ∧ r(as', cs') ∨ cext(ca) = None ∧ r(asl.last, cs'), ∀ size01f0, cs0, ca0, cs'0, as0, cstep, cstart, cext, astart, astep, aext, r. size01f0(cs0, ca0, cs'0, as0) < size01f(cs, ca, cs', as) → cstep(cs0, ca0, cs'0) ∧ nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f0) ∧ r(as0, cs0) → (∃ asl, aal. asl.head = as0 ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs0)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca0) ∧ r(as', cs'0)) ∨ cext(ca0) = None ∧ r(asl.last, cs'0))) ⊦ ∃ asl, aal. asl.head = as ∧ aext !(aal) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca) ∧ r(as', cs')) ∨ cext(ca) = None ∧ r(asl.last, cs')) |
aext !(aal) = [], aext(aa0) = None, asl = as'0 + asl0, asl ≠ [], size01f(cs, ca, cs', as'0) < size01f(cs, ca, cs', as), astep(as, aa0, as'0), cstep(cs, ca, cs'), frag*(IOAut(astart, astep, aext))(asl, aal), nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f), r(as, cs), r(as'0, cs), ∀ as. as ∈ asl → r(as, cs), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)), astep(asl.last, aa, as') ∧ aext(aa) = cext(ca) ∧ r(as', cs') ∨ cext(ca) = None ∧ r(asl.last, cs'), ∀ size01f0, cs0, ca0, cs'0, as0, cstep, cstart, cext, astart, astep, aext, r. size01f0(cs0, ca0, cs'0, as0) < size01f(cs, ca, cs', as) → cstep(cs0, ca0, cs'0) ∧ nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f0) ∧ r(as0, cs0) → (∃ asl, aal. asl.head = as0 ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs0)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca0) ∧ r(as', cs'0)) ∨ cext(ca0) = None ∧ r(asl.last, cs'0))) ⊦ ∃ asl, aal. asl.head = as ∧ aext !(aal) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca) ∧ r(as', cs')) ∨ cext(ca) = None ∧ r(asl.last, cs'))
Used simplifier rules: ⊦ ¬ frag*(IOAut(start, step, ext))([], al); (s) x ≠ [] ⊦ a = x.head ∧ y = x.tail ↔ x = a + y; (elim) Used terms: asl, as'0, asl0
| aext !(aal) = [], aext(aa0) = None, asl = as'0 + asl0, asl ≠ [], size01f(cs, ca, cs', as'0) < size01f(cs, ca, cs', as), astep(as, aa0, as'0), cstep(cs, ca, cs'), frag*(IOAut(astart, astep, aext))(asl, aal), nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f), r(as, cs), r(as'0, cs), ∀ as. as ∈ asl → r(as, cs), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)), astep(asl.last, aa, as') ∧ aext(aa) = cext(ca) ∧ r(as', cs') ∨ cext(ca) = None ∧ r(asl.last, cs'), ∀ size01f0, cs0, ca0, cs'0, as0, cstep, cstart, cext, astart, astep, aext, r. size01f0(cs0, ca0, cs'0, as0) < size01f(cs, ca, cs', as) → cstep(cs0, ca0, cs'0) ∧ nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f0) ∧ r(as0, cs0) → (∃ asl, aal. asl.head = as0 ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs0)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca0) ∧ r(as', cs'0)) ∨ cext(ca0) = None ∧ r(asl.last, cs'0))) ⊦ ∃ asl, aal. asl.head = as ∧ aext !(aal) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca) ∧ r(as', cs')) ∨ cext(ca) = None ∧ r(asl.last, cs')) |
aext !(aal) = [], aext(aa0) = None, size01f(cs, ca, cs', as'0) < size01f(cs, ca, cs', as), astep(as, aa0, as'0), cstep(cs, ca, cs'), frag*(IOAut(astart, astep, aext))(as'0 ' + asl0, aal), nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f), r(as'0, cs), r(as, cs), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)), ∀ as0. as0 ∈ asl0 → r(as0, cs), astep((as'0 ' + asl0).last, aa, as') ∧ aext(aa) = cext(ca) ∧ r(as', cs') ∨ cext(ca) = None ∧ r((as'0 ' + asl0).last, cs'), ∀ size01f0, cs0, ca0, cs'0, as0, cstep, cstart, cext, astart, astep, aext, r. size01f0(cs0, ca0, cs'0, as0) < size01f(cs, ca, cs', as) → cstep(cs0, ca0, cs'0) ∧ nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f0) ∧ r(as0, cs0) → (∃ asl, aal. asl.head = as0 ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs0)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca0) ∧ r(as', cs'0)) ∨ cext(ca0) = None ∧ r(asl.last, cs'0))) ⊦ ∃ asl, aal. asl.head = as ∧ aext !(aal) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca) ∧ r(as', cs')) ∨ cext(ca) = None ∧ r(asl.last, cs'))
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ a ∈ a0 ' + x ↔ a = a0 ∨ a ∈ x; (s) ⊦ a + x = a ' + x; (s) ⊦ a ' ≠ []; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s)
| aext !(aal) = [], aext(aa0) = None, size01f(cs, ca, cs', as'0) < size01f(cs, ca, cs', as), astep(as, aa0, as'0), cstep(cs, ca, cs'), frag*(IOAut(astart, astep, aext))(as'0 ' + asl0, aal), nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f), r(as'0, cs), r(as, cs), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)), ∀ as0. as0 ∈ asl0 → r(as0, cs), astep((as'0 ' + asl0).last, aa, as') ∧ aext(aa) = cext(ca) ∧ r(as', cs') ∨ cext(ca) = None ∧ r((as'0 ' + asl0).last, cs'), ∀ size01f0, cs0, ca0, cs'0, as0, cstep, cstart, cext, astart, astep, aext, r. size01f0(cs0, ca0, cs'0, as0) < size01f(cs, ca, cs', as) → cstep(cs0, ca0, cs'0) ∧ nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f0) ∧ r(as0, cs0) → (∃ asl, aal. asl.head = as0 ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs0)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca0) ∧ r(as', cs'0)) ∨ cext(ca0) = None ∧ r(asl.last, cs'0))) ⊦ ∃ asl, aal. asl.head = as ∧ aext !(aal) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca) ∧ r(as', cs')) ∨ cext(ca) = None ∧ r(asl.last, cs')) |
aext !(aal) = [], aext(aa0) = None, size01f(cs, ca, cs', as'0) < size01f(cs, ca, cs', as), astep(as, aa0, as'0), cstep(cs, ca, cs'), frag*(IOAut(astart, astep, aext))(as'0 ' + asl0, aal), nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f), r(as, cs), r(as'0, cs), ∀ as0. as0 ∈ asl0 → r(as0, cs), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)), astep((as'0 ' + asl0).last, aa, as') ∧ aext(aa) = cext(ca) ∧ r(as', cs') ∨ cext(ca) = None ∧ r((as'0 ' + asl0).last, cs'), ∀ size01f0, cs0, ca0, cs'0, as0, cstep, cstart, cext, astart, astep, aext, r. size01f0(cs0, ca0, cs'0, as0) < size01f(cs, ca, cs', as) → cstep(cs0, ca0, cs'0) ∧ nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f0) ∧ r(as0, cs0) → (∃ asl, aal. asl.head = as0 ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs0)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca0) ∧ r(as', cs'0)) ∨ cext(ca0) = None ∧ r(asl.last, cs'0))) ⊦ (as + as'0 + asl0).head = as ∧ aext !(aa0 + aal) = [] ∧ frag*(IOAut(astart, astep, aext))(as + as'0 + asl0, aa0 + aal) ∧ (∀ as0. as0 ∈ as + as'0 + asl0 → r(as0, cs)) ∧ ((∃ as', aa. astep((as + as'0 + asl0).last, aa, as') ∧ aext(aa) = cext(ca) ∧ r(as', cs')) ∨ cext(ca) = None ∧ r((as + as'0 + asl0).last, cs'))
Used terms: as + as'0 + asl0, aa0 + aal
| aext !(aal) = [], aext(aa0) = None, size01f(cs, ca, cs', as'0) < size01f(cs, ca, cs', as), astep(as, aa0, as'0), cstep(cs, ca, cs'), frag*(IOAut(astart, astep, aext))(as'0 ' + asl0, aal), nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f), r(as, cs), r(as'0, cs), ∀ as0. as0 ∈ asl0 → r(as0, cs), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)), astep((as'0 ' + asl0).last, aa, as') ∧ aext(aa) = cext(ca) ∧ r(as', cs') ∨ cext(ca) = None ∧ r((as'0 ' + asl0).last, cs'), ∀ size01f0, cs0, ca0, cs'0, as0, cstep, cstart, cext, astart, astep, aext, r. size01f0(cs0, ca0, cs'0, as0) < size01f(cs, ca, cs', as) → cstep(cs0, ca0, cs'0) ∧ nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f0) ∧ r(as0, cs0) → (∃ asl, aal. asl.head = as0 ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs0)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca0) ∧ r(as', cs'0)) ∨ cext(ca0) = None ∧ r(asl.last, cs'0))) ⊦ (as + as'0 + asl0).head = as ∧ aext !(aa0 + aal) = [] ∧ frag*(IOAut(astart, astep, aext))(as + as'0 + asl0, aa0 + aal) ∧ (∀ as0. as0 ∈ as + as'0 + asl0 → r(as0, cs)) ∧ ((∃ as', aa. astep((as + as'0 + asl0).last, aa, as') ∧ aext(aa) = cext(ca) ∧ r(as', cs')) ∨ cext(ca) = None ∧ r((as + as'0 + asl0).last, cs')) |
aext !(aal) = [], aext(aa0) = None, size01f(cs, ca, cs', as'0) < size01f(cs, ca, cs', as), astep(as, aa0, as'0), cstep(cs, ca, cs'), frag*(IOAut(astart, astep, aext))(as'0 ' + asl0, aal), nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f), r(as'0, cs), r(as, cs), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)), ∀ as0. as0 ∈ asl0 → r(as0, cs), astep((as'0 ' + asl0).last, aa, as') ∧ aext(aa) = cext(ca) ∧ r(as', cs') ∨ cext(ca) = None ∧ r((as'0 ' + asl0).last, cs'), ∀ size01f0, cs0, ca0, cs'0, as0, cstep, cstart, cext, astart, astep, aext, r. size01f0(cs0, ca0, cs'0, as0) < size01f(cs, ca, cs', as) → cstep(cs0, ca0, cs'0) ∧ nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f0) ∧ r(as0, cs0) → (∃ asl, aal. asl.head = as0 ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs0)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca0) ∧ r(as', cs'0)) ∨ cext(ca0) = None ∧ r(asl.last, cs'0))) ⊦ frag*(IOAut(astart, astep, aext))(as ' + as'0 ' + asl0, aa0 ' + aal) ∧ (as0 ∈ asl0 → r(as0, cs)) ∧ ((∃ as'1, aa1. astep((as'0 ' + asl0).last, aa1, as'1) ∧ aext(aa1) = cext(ca) ∧ r(as'1, cs')) ∨ cext(ca) = None ∧ r((as'0 ' + asl0).last, cs'))
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ (b ' + a ' + x).last = (a ' + x).last; (s) ⊦ a + x = a ' + x; (s) ⊦ a ∈ a0 ' + x ↔ a = a0 ∨ a ∈ x; (s) ⊦ [] + x = x; (s) ⊦ ext(a) = None → ext !(a ') = []; (s) ⊦ ext !(al + al0) = ext !(al) + ext !(al0); (s) ⊦ (a ' + x).head = a; (s)
| aext !(aal) = [], aext(aa0) = None, size01f(cs, ca, cs', as'0) < size01f(cs, ca, cs', as), astep(as, aa0, as'0), cstep(cs, ca, cs'), frag*(IOAut(astart, astep, aext))(as'0 ' + asl0, aal), nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f), r(as'0, cs), r(as, cs), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)), ∀ as0. as0 ∈ asl0 → r(as0, cs), astep((as'0 ' + asl0).last, aa, as') ∧ aext(aa) = cext(ca) ∧ r(as', cs') ∨ cext(ca) = None ∧ r((as'0 ' + asl0).last, cs'), ∀ size01f0, cs0, ca0, cs'0, as0, cstep, cstart, cext, astart, astep, aext, r. size01f0(cs0, ca0, cs'0, as0) < size01f(cs, ca, cs', as) → cstep(cs0, ca0, cs'0) ∧ nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f0) ∧ r(as0, cs0) → (∃ asl, aal. asl.head = as0 ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs0)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca0) ∧ r(as', cs'0)) ∨ cext(ca0) = None ∧ r(asl.last, cs'0))) ⊦ frag*(IOAut(astart, astep, aext))(as ' + as'0 ' + asl0, aa0 ' + aal) ∧ (as0 ∈ asl0 → r(as0, cs)) ∧ ((∃ as'1, aa1. astep((as'0 ' + asl0).last, aa1, as'1) ∧ aext(aa1) = cext(ca) ∧ r(as'1, cs')) ∨ cext(ca) = None ∧ r((as'0 ' + asl0).last, cs')) |
⊦ frag*(IOAut(start, step, ext))(s ' + sl, a ' + al) ↔ step(s, a, sl.head) ∧ frag*(IOAut(start, step, ext))(sl, al)
aext !(aal) = [], aext(aa0) = None, size01f(cs, ca, cs', as'0) < size01f(cs, ca, cs', as), astep(as, aa0, as'0), cstep(cs, ca, cs'), frag*(IOAut(astart, astep, aext))(as'0 ' + asl0, aal), nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f), r(as, cs), r(as'0, cs), ∀ as0. as0 ∈ asl0 → r(as0, cs), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)), astep((as'0 ' + asl0).last, aa, as') ∧ aext(aa) = cext(ca) ∧ r(as', cs') ∨ cext(ca) = None ∧ r((as'0 ' + asl0).last, cs'), ∀ size01f0, cs0, ca0, cs'0, as0, cstep, cstart, cext, astart, astep, aext, r. size01f0(cs0, ca0, cs'0, as0) < size01f(cs, ca, cs', as) → cstep(cs0, ca0, cs'0) ∧ nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f0) ∧ r(as0, cs0) → (∃ asl, aal. asl.head = as0 ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs0)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca0) ∧ r(as', cs'0)) ∨ cext(ca0) = None ∧ r(asl.last, cs'0))) ⊦ (astep(as, aa0, (as'0 ' + asl0).head) ∧ frag*(IOAut(astart, astep, aext))(as'0 ' + asl0, aal)) ∧ (as0 ∈ asl0 → r(as0, cs)) ∧ ((∃ as'1, aa1. astep((as'0 ' + asl0).last, aa1, as'1) ∧ aext(aa1) = cext(ca) ∧ r(as'1, cs')) ∨ cext(ca) = None ∧ r((as'0 ' + asl0).last, cs'))
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: aal, as, aext, as'0 ' + asl0, aa0, astart, astep
| ⊦ frag*(IOAut(start, step, ext))(s ' + sl, a ' + al) ↔ step(s, a, sl.head) ∧ frag*(IOAut(start, step, ext))(sl, al) |
| aext !(aal) = [], aext(aa0) = None, size01f(cs, ca, cs', as'0) < size01f(cs, ca, cs', as), astep(as, aa0, as'0), cstep(cs, ca, cs'), frag*(IOAut(astart, astep, aext))(as'0 ' + asl0, aal), nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f), r(as, cs), r(as'0, cs), ∀ as0. as0 ∈ asl0 → r(as0, cs), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)), astep((as'0 ' + asl0).last, aa, as') ∧ aext(aa) = cext(ca) ∧ r(as', cs') ∨ cext(ca) = None ∧ r((as'0 ' + asl0).last, cs'), ∀ size01f0, cs0, ca0, cs'0, as0, cstep, cstart, cext, astart, astep, aext, r. size01f0(cs0, ca0, cs'0, as0) < size01f(cs, ca, cs', as) → cstep(cs0, ca0, cs'0) ∧ nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f0) ∧ r(as0, cs0) → (∃ asl, aal. asl.head = as0 ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs0)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca0) ∧ r(as', cs'0)) ∨ cext(ca0) = None ∧ r(asl.last, cs'0))) ⊦ (astep(as, aa0, (as'0 ' + asl0).head) ∧ frag*(IOAut(astart, astep, aext))(as'0 ' + asl0, aal)) ∧ (as0 ∈ asl0 → r(as0, cs)) ∧ ((∃ as'1, aa1. astep((as'0 ' + asl0).last, aa1, as'1) ∧ aext(aa1) = cext(ca) ∧ r(as'1, cs')) ∨ cext(ca) = None ∧ r((as'0 ' + asl0).last, cs')) |
aext !(aal) = [], aext(aa0) = None, size01f(cs, ca, cs', as'0) < size01f(cs, ca, cs', as), astep(as, aa0, as'0), cstep(cs, ca, cs'), frag*(IOAut(astart, astep, aext))(as'0 ' + asl0, aal), nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f), r(as'0, cs), r(as, cs), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)), ∀ as0. as0 ∈ asl0 → r(as0, cs), astep((as'0 ' + asl0).last, aa, as') ∧ aext(aa) = cext(ca) ∧ r(as', cs') ∨ cext(ca) = None ∧ r((as'0 ' + asl0).last, cs'), ∀ size01f0, cs0, ca0, cs'0, as0, cstep, cstart, cext, astart, astep, aext, r. size01f0(cs0, ca0, cs'0, as0) < size01f(cs, ca, cs', as) → cstep(cs0, ca0, cs'0) ∧ nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f0) ∧ r(as0, cs0) → (∃ asl, aal. asl.head = as0 ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs0)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca0) ∧ r(as', cs'0)) ∨ cext(ca0) = None ∧ r(asl.last, cs'0))) ⊦ (as0 ∈ asl0 → r(as0, cs)) ∧ ((∃ as'1, aa1. astep((as'0 ' + asl0).last, aa1, as'1) ∧ aext(aa1) = cext(ca) ∧ r(as'1, cs')) ∨ cext(ca) = None ∧ r((as'0 ' + asl0).last, cs'))
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ (a ' + x).head = a; (s)
| aext !(aal) = [], aext(aa0) = None, size01f(cs, ca, cs', as'0) < size01f(cs, ca, cs', as), astep(as, aa0, as'0), cstep(cs, ca, cs'), frag*(IOAut(astart, astep, aext))(as'0 ' + asl0, aal), nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f), r(as'0, cs), r(as, cs), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)), ∀ as0. as0 ∈ asl0 → r(as0, cs), astep((as'0 ' + asl0).last, aa, as') ∧ aext(aa) = cext(ca) ∧ r(as', cs') ∨ cext(ca) = None ∧ r((as'0 ' + asl0).last, cs'), ∀ size01f0, cs0, ca0, cs'0, as0, cstep, cstart, cext, astart, astep, aext, r. size01f0(cs0, ca0, cs'0, as0) < size01f(cs, ca, cs', as) → cstep(cs0, ca0, cs'0) ∧ nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f0) ∧ r(as0, cs0) → (∃ asl, aal. asl.head = as0 ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs0)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca0) ∧ r(as', cs'0)) ∨ cext(ca0) = None ∧ r(asl.last, cs'0))) ⊦ (as0 ∈ asl0 → r(as0, cs)) ∧ ((∃ as'1, aa1. astep((as'0 ' + asl0).last, aa1, as'1) ∧ aext(aa1) = cext(ca) ∧ r(as'1, cs')) ∨ cext(ca) = None ∧ r((as'0 ' + asl0).last, cs')) |
aext !(aal) = [], aext(aa0) = None, size01f(cs, ca, cs', as'0) < size01f(cs, ca, cs', as), astep(as, aa0, as'0), cstep(cs, ca, cs'), frag*(IOAut(astart, astep, aext))(as'0 ' + asl0, aal), nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f), r(as, cs), r(as'0, cs), as0 ∈ asl0, ¬ r(as0, cs), ∀ as0. as0 ∈ asl0 → r(as0, cs), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)), astep((as'0 ' + asl0).last, aa, as') ∧ aext(aa) = cext(ca) ∧ r(as', cs') ∨ cext(ca) = None ∧ r((as'0 ' + asl0).last, cs'), ∀ size01f0, cs0, ca0, cs'0, as0, cstep, cstart, cext, astart, astep, aext, r. size01f0(cs0, ca0, cs'0, as0) < size01f(cs, ca, cs', as) → cstep(cs0, ca0, cs'0) ∧ nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f0) ∧ r(as0, cs0) → (∃ asl, aal. asl.head = as0 ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs0)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca0) ∧ r(as', cs'0)) ∨ cext(ca0) = None ∧ r(asl.last, cs'0))) ⊦
aext !(aal) = [], aext(aa0) = None, size01f(cs, ca, cs', as'0) < size01f(cs, ca, cs', as), astep(as, aa0, as'0), cstep(cs, ca, cs'), frag*(IOAut(astart, astep, aext))(as'0 ' + asl0, aal), nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f), r(as, cs), r(as'0, cs), ∀ as0. as0 ∈ asl0 → r(as0, cs), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)), astep((as'0 ' + asl0).last, aa, as') ∧ aext(aa) = cext(ca) ∧ r(as', cs') ∨ cext(ca) = None ∧ r((as'0 ' + asl0).last, cs'), ∀ size01f0, cs0, ca0, cs'0, as0, cstep, cstart, cext, astart, astep, aext, r. size01f0(cs0, ca0, cs'0, as0) < size01f(cs, ca, cs', as) → cstep(cs0, ca0, cs'0) ∧ nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f0) ∧ r(as0, cs0) → (∃ asl, aal. asl.head = as0 ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs0)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca0) ∧ r(as', cs'0)) ∨ cext(ca0) = None ∧ r(asl.last, cs'0))) ⊦ ∃ as'1, aa1. astep((as'0 ' + asl0).last, aa1, as'1) ∧ aext(aa1) = cext(ca) ∧ r(as'1, cs'), cext(ca) = None ∧ r((as'0 ' + asl0).last, cs')
| aext !(aal) = [], aext(aa0) = None, size01f(cs, ca, cs', as'0) < size01f(cs, ca, cs', as), astep(as, aa0, as'0), cstep(cs, ca, cs'), frag*(IOAut(astart, astep, aext))(as'0 ' + asl0, aal), nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f), r(as, cs), r(as'0, cs), as0 ∈ asl0, ¬ r(as0, cs), ∀ as0. as0 ∈ asl0 → r(as0, cs), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)), astep((as'0 ' + asl0).last, aa, as') ∧ aext(aa) = cext(ca) ∧ r(as', cs') ∨ cext(ca) = None ∧ r((as'0 ' + asl0).last, cs'), ∀ size01f0, cs0, ca0, cs'0, as0, cstep, cstart, cext, astart, astep, aext, r. size01f0(cs0, ca0, cs'0, as0) < size01f(cs, ca, cs', as) → cstep(cs0, ca0, cs'0) ∧ nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f0) ∧ r(as0, cs0) → (∃ asl, aal. asl.head = as0 ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs0)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca0) ∧ r(as', cs'0)) ∨ cext(ca0) = None ∧ r(asl.last, cs'0))) ⊦ |
aext !(aal) = [], aext(aa0) = None, size01f(cs, ca, cs', as'0) < size01f(cs, ca, cs', as), astep(as, aa0, as'0), cstep(cs, ca, cs'), frag*(IOAut(astart, astep, aext))(as'0 ' + asl0, aal), nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f), r(as'0, cs), r(as, cs), as0 ∈ asl0, ¬ r(as0, cs), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)), ∀ as0. as0 ∈ asl0 → r(as0, cs), astep(asl0.last, aa, as') ∧ aext(aa) = cext(ca) ∧ r(as', cs') ∨ cext(ca) = None ∧ r(asl0.last, cs'), ∀ size01f0, cs0, ca0, cs'0, as0, cstep, cstart, cext, astart, astep, aext, r. size01f0(cs0, ca0, cs'0, as0) < size01f(cs, ca, cs', as) → cstep(cs0, ca0, cs'0) ∧ nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f0) ∧ r(as0, cs0) → (∃ asl, aal. asl.head = as0 ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs0)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca0) ∧ r(as', cs'0)) ∨ cext(ca0) = None ∧ r(asl.last, cs'0))) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ a ∈ x → (b ' + x).last = x.last; (s)
| aext !(aal) = [], aext(aa0) = None, size01f(cs, ca, cs', as'0) < size01f(cs, ca, cs', as), astep(as, aa0, as'0), cstep(cs, ca, cs'), frag*(IOAut(astart, astep, aext))(as'0 ' + asl0, aal), nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f), r(as'0, cs), r(as, cs), as0 ∈ asl0, ¬ r(as0, cs), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)), ∀ as0. as0 ∈ asl0 → r(as0, cs), astep(asl0.last, aa, as') ∧ aext(aa) = cext(ca) ∧ r(as', cs') ∨ cext(ca) = None ∧ r(asl0.last, cs'), ∀ size01f0, cs0, ca0, cs'0, as0, cstep, cstart, cext, astart, astep, aext, r. size01f0(cs0, ca0, cs'0, as0) < size01f(cs, ca, cs', as) → cstep(cs0, ca0, cs'0) ∧ nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f0) ∧ r(as0, cs0) → (∃ asl, aal. asl.head = as0 ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs0)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca0) ∧ r(as', cs'0)) ∨ cext(ca0) = None ∧ r(asl.last, cs'0))) ⊦ |
Used terms: as0
| aext !(aal) = [], aext(aa0) = None, size01f(cs, ca, cs', as'0) < size01f(cs, ca, cs', as), astep(as, aa0, as'0), cstep(cs, ca, cs'), frag*(IOAut(astart, astep, aext))(as'0 ' + asl0, aal), nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f), r(as, cs), r(as'0, cs), ∀ as0. as0 ∈ asl0 → r(as0, cs), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)), astep((as'0 ' + asl0).last, aa, as') ∧ aext(aa) = cext(ca) ∧ r(as', cs') ∨ cext(ca) = None ∧ r((as'0 ' + asl0).last, cs'), ∀ size01f0, cs0, ca0, cs'0, as0, cstep, cstart, cext, astart, astep, aext, r. size01f0(cs0, ca0, cs'0, as0) < size01f(cs, ca, cs', as) → cstep(cs0, ca0, cs'0) ∧ nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f0) ∧ r(as0, cs0) → (∃ asl, aal. asl.head = as0 ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs0)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca0) ∧ r(as', cs'0)) ∨ cext(ca0) = None ∧ r(asl.last, cs'0))) ⊦ ∃ as'1, aa1. astep((as'0 ' + asl0).last, aa1, as'1) ∧ aext(aa1) = cext(ca) ∧ r(as'1, cs'), cext(ca) = None ∧ r((as'0 ' + asl0).last, cs') |
aext !(aal) = [], aext(aa0) = None, aext(aa) = cext(ca), size01f(cs, ca, cs', as'0) < size01f(cs, ca, cs', as), astep(as, aa0, as'0), astep((as'0 ' + asl0).last, aa, as'), cstep(cs, ca, cs'), frag*(IOAut(astart, astep, aext))(as'0 ' + asl0, aal), nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f), r(as'0, cs), r(as, cs), r(as', cs'), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)), ∀ as0. as0 ∈ asl0 → r(as0, cs), ∀ size01f0, cs0, ca0, cs'0, as0, cstep, cstart, cext, astart, astep, aext, r. size01f0(cs0, ca0, cs'0, as0) < size01f(cs, ca, cs', as) → cstep(cs0, ca0, cs'0) ∧ nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f0) ∧ r(as0, cs0) → (∃ asl, aal. asl.head = as0 ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs0)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca0) ∧ r(as', cs'0)) ∨ cext(ca0) = None ∧ r(asl.last, cs'0))) ⊦ ∃ as'1, aa1. astep((as'0 ' + asl0).last, aa1, as'1) ∧ aext(aa1) = cext(ca) ∧ r(as'1, cs'), cext(ca) = None ∧ r((as'0 ' + asl0).last, cs')
| aext !(aal) = [], aext(aa0) = None, aext(aa) = cext(ca), size01f(cs, ca, cs', as'0) < size01f(cs, ca, cs', as), astep(as, aa0, as'0), astep((as'0 ' + asl0).last, aa, as'), cstep(cs, ca, cs'), frag*(IOAut(astart, astep, aext))(as'0 ' + asl0, aal), nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f), r(as'0, cs), r(as, cs), r(as', cs'), ∀ cs. cstart(cs) → (∃ as. r(as, cs) ∧ astart(as)), ∀ as0. as0 ∈ asl0 → r(as0, cs), ∀ size01f0, cs0, ca0, cs'0, as0, cstep, cstart, cext, astart, astep, aext, r. size01f0(cs0, ca0, cs'0, as0) < size01f(cs, ca, cs', as) → cstep(cs0, ca0, cs'0) ∧ nfwsim(IOAut(cstart, cstep, cext), IOAut(astart, astep, aext), r, size01f0) ∧ r(as0, cs0) → (∃ asl, aal. asl.head = as0 ∧ aext !(⌜aal⌝ ) = [] ∧ frag*(IOAut(astart, astep, aext))(asl, aal) ∧ (∀ as. as ∈ asl → r(as, cs0)) ∧ ((∃ as', aa. astep(asl.last, aa, as') ∧ aext(aa) = cext(ca0) ∧ r(as', cs'0)) ∨ cext(ca0) = None ∧ r(asl.last, cs'0))) ⊦ ∃ as'1, aa1. astep((as'0 ' + asl0).last, aa1, as'1) ∧ aext(aa1) = cext(ca) ∧ r(as'1, cs'), cext(ca) = None ∧ r((as'0 ' + asl0).last, cs') |
Used terms: as', aa
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.