| ⊦ frag*(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))(psl, pal) ∧ n + 1 < # πrs(lstep, rstep, lren, rren, psl, pal) → rstep(πrs(lstep, rstep, lren, rren, psl, pal)[n], πra(lstep, rstep, lren, rren, psl, pal)[n], πrs(lstep, rstep, lren, rren, psl, pal)[n + 1]) |
n + 1 < # πrs(lstep, rstep, lren, rren, psl, pal), frag*(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))(psl, pal), ¬ rstep(πrs(lstep, rstep, lren, rren, psl, pal)[n], πra(lstep, rstep, lren, rren, psl, pal)[n], πrs(lstep, rstep, lren, rren, psl, pal)[n + 1]) ⊦
| n + 1 < # πrs(lstep, rstep, lren, rren, psl, pal), frag*(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))(psl, pal), ¬ rstep(πrs(lstep, rstep, lren, rren, psl, pal)[n], πra(lstep, rstep, lren, rren, psl, pal)[n], πrs(lstep, rstep, lren, rren, psl, pal)[n + 1]) ⊦ |
πrs(lstep, rstep, lren, rren, psl, pal) ≠ [], n + 1 < # πrs(lstep, rstep, lren, rren, psl, pal), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psl, pal), ¬ rstep(πrs(lstep, rstep, lren, rren, psl, pal)[n], πra(lstep, rstep, lren, rren, psl, pal)[n], πrs(lstep, rstep, lren, rren, psl, pal)[n + 1]) ⊦
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren) = IOAut (Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)); (s)
| πrs(lstep, rstep, lren, rren, psl, pal) ≠ [], n + 1 < # πrs(lstep, rstep, lren, rren, psl, pal), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psl, pal), ¬ rstep(πrs(lstep, rstep, lren, rren, psl, pal)[n], πra(lstep, rstep, lren, rren, psl, pal)[n], πrs(lstep, rstep, lren, rren, psl, pal)[n + 1]) ⊦ |
πrs(lstep, rstep, lren, rren, ps + psl0, pal) ≠ [], n + 1 < # πrs(lstep, rstep, lren, rren, ps + psl0, pal), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(ps + psl0, pal), ¬ rstep (πrs(lstep, rstep, lren, rren, ps + psl0, pal)[n], πra(lstep, rstep, lren, rren, ps + psl0, pal)[n], πrs(lstep, rstep, lren, rren, ps + psl0, pal)[n + 1]), ∀ lstep, rstep, lren, rren, pal, n, lstart, rstart, lext, rext. ¬ ( πrs(lstep, rstep, lren, rren, psl0, pal) ≠ [] ∧ n + 1 < # πrs(lstep, rstep, lren, rren, psl0, pal) ∧ frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psl0, pal) ∧ ¬ rstep(πrs(lstep, rstep, lren, rren, psl0, pal)[n], πra(lstep, rstep, lren, rren, psl0, pal)[n], πrs(lstep, rstep, lren, rren, psl0, pal)[n + 1])) ⊦
Used simplifier rules: List('a) freely generated by [], +;; ⊦ ⌜[]⌝ = []; (s) ⊦ ¬ frag(IOAut(start, step, ext))([], α); (s)
| πrs(lstep, rstep, lren, rren, ps + psl0, pal) ≠ [], n + 1 < # πrs(lstep, rstep, lren, rren, ps + psl0, pal), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(ps + psl0, pal), ¬ rstep (πrs(lstep, rstep, lren, rren, ps + psl0, pal)[n], πra(lstep, rstep, lren, rren, ps + psl0, pal)[n], πrs(lstep, rstep, lren, rren, ps + psl0, pal)[n + 1]), ∀ lstep, rstep, lren, rren, pal, n, lstart, rstart, lext, rext. ¬ ( πrs(lstep, rstep, lren, rren, psl0, pal) ≠ [] ∧ n + 1 < # πrs(lstep, rstep, lren, rren, psl0, pal) ∧ frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psl0, pal) ∧ ¬ rstep(πrs(lstep, rstep, lren, rren, psl0, pal)[n], πra(lstep, rstep, lren, rren, psl0, pal)[n], πrs(lstep, rstep, lren, rren, psl0, pal)[n + 1])) ⊦ |
πrs(lstep, rstep, lren, rren, ps ' + psl0, pal) ≠ [], n + 1 < # πrs(lstep, rstep, lren, rren, ps ' + psl0, pal), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(ps ' + psl0, pal), ¬ rstep (πrs(lstep, rstep, lren, rren, ps ' + psl0, pal)[n], πra(lstep, rstep, lren, rren, ps ' + psl0, pal)[n], πrs(lstep, rstep, lren, rren, ps ' + psl0, pal)[n + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, psl0, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, psl0, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))(psl0, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0 + 1]) ⊦
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ a + x = a ' + x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ⌜x + y⌝ = ⌜x⌝ + ⌜y⌝ ; (s)
| πrs(lstep, rstep, lren, rren, ps ' + psl0, pal) ≠ [], n + 1 < # πrs(lstep, rstep, lren, rren, ps ' + psl0, pal), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(ps ' + psl0, pal), ¬ rstep (πrs(lstep, rstep, lren, rren, ps ' + psl0, pal)[n], πra(lstep, rstep, lren, rren, ps ' + psl0, pal)[n], πrs(lstep, rstep, lren, rren, ps ' + psl0, pal)[n + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, psl0, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, psl0, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))(psl0, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0 + 1]) ⊦ |
ps = (ls, rs), πrs(lstep, rstep, lren, rren, ps ' + psl0, pal) ≠ [], n + 1 < # πrs(lstep, rstep, lren, rren, ps ' + psl0, pal), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(ps ' + psl0, pal), ¬ rstep (πrs(lstep, rstep, lren, rren, ps ' + psl0, pal)[n], πra(lstep, rstep, lren, rren, ps ' + psl0, pal)[n], πrs(lstep, rstep, lren, rren, ps ' + psl0, pal)[n + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, psl0, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, psl0, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))(psl0, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0 + 1]) ⊦
| ps = (ls, rs), πrs(lstep, rstep, lren, rren, ps ' + psl0, pal) ≠ [], n + 1 < # πrs(lstep, rstep, lren, rren, ps ' + psl0, pal), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(ps ' + psl0, pal), ¬ rstep (πrs(lstep, rstep, lren, rren, ps ' + psl0, pal)[n], πra(lstep, rstep, lren, rren, ps ' + psl0, pal)[n], πrs(lstep, rstep, lren, rren, ps ' + psl0, pal)[n + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, psl0, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, psl0, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))(psl0, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0 + 1]) ⊦ |
πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pal) ≠ [], n + 1 < # πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pal), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs) ' + psl0, pal), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pal)[n], πra(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pal)[n], πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pal)[n + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, psl0, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, psl0, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))(psl0, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0 + 1]) ⊦
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pal) ≠ [], n + 1 < # πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pal), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs) ' + psl0, pal), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pal)[n], πra(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pal)[n], πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pal)[n + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, psl0, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, psl0, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))(psl0, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0 + 1]) ⊦ |
pal = [], πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pal) ≠ [], n + 1 < # πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pal), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs) ' + psl0, pal), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pal)[n], πra(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pal)[n], πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pal)[n + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, psl0, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, psl0, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))(psl0, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0 + 1]) ⊦
pal = pa + pal1, πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pal) ≠ [], n + 1 < # πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pal), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs) ' + psl0, pal), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pal)[n], πra(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pal)[n], πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pal)[n + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, psl0, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, psl0, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))(psl0, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0 + 1]) ⊦
Used simplifier rules: List('a) freely generated by [], +;;
| pal = [], πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pal) ≠ [], n + 1 < # πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pal), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs) ' + psl0, pal), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pal)[n], πra(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pal)[n], πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pal)[n + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, psl0, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, psl0, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))(psl0, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0 + 1]) ⊦ |
πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, []) ≠ [], n + 1 < # πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, []), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs) ' + psl0, []), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, [])[n], πra(lstep, rstep, lren, rren, (ls, rs) ' + psl0, [])[n], πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, [])[n + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, psl0, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, psl0, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))(psl0, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0 + 1]) ⊦
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ ⌜[]⌝ = []; (s)
| πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, []) ≠ [], n + 1 < # πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, []), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs) ' + psl0, []), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, [])[n], πra(lstep, rstep, lren, rren, (ls, rs) ' + psl0, [])[n], πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, [])[n + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, psl0, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, psl0, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))(psl0, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0 + 1]) ⊦ |
⊦ frag(IOAut(start, step, ext))(σ, α) ↔ # σ = # α + ⌜1⌝ ∧ (∀ n. ⌜n⌝ < # α → step(σ[n], α[n], σ[n +1]))
Used simplifier rules: projstate-base: ⊦ πrs(lstep, rstep, lren, rren, (ls, rs) ', []) = rs '; ⊦ #(σ + σ1) = # σ + # σ1; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ ⌜(* n)⌝ + ⌜(* m)⌝ = ⌜n + m⌝ ; (s) ⊦ m ≤ n → (⌜(* n)⌝ = ⌜(* m)⌝ + n∞2 ↔ ⌜n - m⌝ = n∞2); (s) ⊦ ⌜n⌝ = ⌜n0⌝ ↔ n = n0; (s) ⊦ # x = 0 ↔ x = []; (s) add-assoc: ⊦ (n∞ + n∞1) + n∞2 = n∞ + n∞1 + n∞2; from specification nat-inf add-comm: ⊦ n∞1 + n∞2 = n∞2 + n∞1; from specification nat-inf ⊦ # [] = ⌜0⌝ ; (s) ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ ¬ n < 0; (s) ⊦ a ' ≠ []; (s) ⊦ x + [] = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ # a ' = 0 +1; (s) ⊦ ¬ m < n → ¬ m + m0 < n; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: Π(lext, rext, lren, rren), [], Π(lstep, rstep, lren, rren, lext, rext), Π(lstart, rstart), ⌜(ls, rs) '⌝ + ⌜psl0⌝
| ⊦ frag(IOAut(start, step, ext))(σ, α) ↔ # σ = # α + ⌜1⌝ ∧ (∀ n. ⌜n⌝ < # α → step(σ[n], α[n], σ[n +1])) |
| pal = pa + pal1, πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pal) ≠ [], n + 1 < # πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pal), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs) ' + psl0, pal), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pal)[n], πra(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pal)[n], πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pal)[n + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, psl0, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, psl0, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))(psl0, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0 + 1]) ⊦ |
πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pa ' + pal1) ≠ [], n + 1 < # πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pa ' + pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs) ' + psl0, pa ' + pal1), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pa ' + pal1)[n], πra(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pa ' + pal1)[n], πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pa ' + pal1)[n + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, psl0, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, psl0, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))(psl0, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0 + 1]) ⊦
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ a + x = a ' + x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ⌜x + y⌝ = ⌜x⌝ + ⌜y⌝ ; (s)
| πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pa ' + pal1) ≠ [], n + 1 < # πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pa ' + pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls, rs) ' + psl0, pa ' + pal1), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pa ' + pal1)[n], πra(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pa ' + pal1)[n], πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pa ' + pal1)[n + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, psl0, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, psl0, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))(psl0, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0 + 1]) ⊦ |
⊦ frag(IOAut(start, step, ext))(⌜s '⌝ + σ, ⌜a '⌝ + α) ↔ step(s, a, hd(σ)) ∧ frag(IOAut(start, step, ext))(σ, α)
πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pa ' + pal1) ≠ [], n + 1 < # πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pa ' + pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psl0, pal1), Π(lstep, rstep, lren, rren, lext, rext)((ls, rs), pa, hd(⌜psl0⌝ )), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pa ' + pal1)[n], πra(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pa ' + pal1)[n], πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pa ' + pal1)[n + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, psl0, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, psl0, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))(psl0, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0 + 1]) ⊦
Used terms: Π(lext, rext, lren, rren), (ls, rs), ⌜pal1⌝ , pa, Π(lstep, rstep, lren, rren, lext, rext), Π(lstart, rstart), ⌜psl0⌝
| ⊦ frag(IOAut(start, step, ext))(⌜s '⌝ + σ, ⌜a '⌝ + α) ↔ step(s, a, hd(σ)) ∧ frag(IOAut(start, step, ext))(σ, α) |
| πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pa ' + pal1) ≠ [], n + 1 < # πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pa ' + pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psl0, pal1), Π(lstep, rstep, lren, rren, lext, rext)((ls, rs), pa, hd(⌜psl0⌝ )), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pa ' + pal1)[n], πra(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pa ' + pal1)[n], πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pa ' + pal1)[n + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, psl0, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, psl0, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))(psl0, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0 + 1]) ⊦ |
⊦ σ ≠ [] → hd(σ) = σ[0]
πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pa ' + pal1) ≠ [], ⌜psl0⌝ ≠ [], n + 1 < # πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pa ' + pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psl0, pal1), Π(lstep, rstep, lren, rren, lext, rext)((ls, rs), pa, ⌜psl0⌝ [0]), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pa ' + pal1)[n], πra(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pa ' + pal1)[n], πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pa ' + pal1)[n + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, psl0, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, psl0, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))(psl0, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0 + 1]) ⊦
Used simplifier rules: ⊦ ⌜x⌝ = [] ↔ x = []; (s) ⊦ x + [] = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ⌜[]⌝ = []; (s) ⊦ ¬ frag(IOAut(start, step, ext))([], α); (s) Used terms: ⌜psl0⌝
| ⊦ σ ≠ [] → hd(σ) = σ[0] |
| πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pa ' + pal1) ≠ [], ⌜psl0⌝ ≠ [], n + 1 < # πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pa ' + pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psl0, pal1), Π(lstep, rstep, lren, rren, lext, rext)((ls, rs), pa, ⌜psl0⌝ [0]), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pa ' + pal1)[n], πra(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pa ' + pal1)[n], πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pa ' + pal1)[n + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, psl0, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, psl0, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))(psl0, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0 + 1]) ⊦ |
psl0 ≠ [], πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pa ' + pal1) ≠ [], n + 1 < # πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pa ' + pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psl0, pal1), Π(lstep, rstep, lren, rren, lext, rext)((ls, rs), pa, psl0.head), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pa ' + pal1)[n], πra(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pa ' + pal1)[n], πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pa ' + pal1)[n + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, psl0, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, psl0, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))(psl0, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0 + 1]) ⊦
Used simplifier rules: ⊦ x ≠ [] → x[0] = x.head; (s) ⊦ ⌜x⌝ [n] = x[n]; (s) ⊦ ⌜x⌝ = [] ↔ x = []; (s)
| psl0 ≠ [], πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pa ' + pal1) ≠ [], n + 1 < # πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pa ' + pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psl0, pal1), Π(lstep, rstep, lren, rren, lext, rext)((ls, rs), pa, psl0.head), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pa ' + pal1)[n], πra(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pa ' + pal1)[n], πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pa ' + pal1)[n + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, psl0, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, psl0, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))(psl0, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0 + 1]) ⊦ |
psl0 = ps + psl, psl0 ≠ [], πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pa ' + pal1) ≠ [], n + 1 < # πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pa ' + pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psl0, pal1), Π(lstep, rstep, lren, rren, lext, rext)((ls, rs), pa, ps), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pa ' + pal1)[n], πra(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pa ' + pal1)[n], πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pa ' + pal1)[n + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, psl0, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, psl0, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))(psl0, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0 + 1]) ⊦
Used simplifier rules: ⊦ x ≠ [] → (head = x.head ∧ tail = x.tail ↔ x = head + tail); (elim) Used terms: psl0, ps, psl
| psl0 = ps + psl, psl0 ≠ [], πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pa ' + pal1) ≠ [], n + 1 < # πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pa ' + pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psl0, pal1), Π(lstep, rstep, lren, rren, lext, rext)((ls, rs), pa, ps), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pa ' + pal1)[n], πra(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pa ' + pal1)[n], πrs(lstep, rstep, lren, rren, (ls, rs) ' + psl0, pa ' + pal1)[n + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, psl0, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, psl0, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))(psl0, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, psl0, pal0)[n0 + 1]) ⊦ |
πrs(lstep, rstep, lren, rren, (ls, rs) ' + ps ' + psl, pa ' + pal1) ≠ [], n + 1 < # πrs(lstep, rstep, lren, rren, (ls, rs) ' + ps ' + psl, pa ' + pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(ps ' + psl, pal1), Π(lstep, rstep, lren, rren, lext, rext)((ls, rs), pa, ps), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls, rs) ' + ps ' + psl, pa ' + pal1)[n], πra(lstep, rstep, lren, rren, (ls, rs) ' + ps ' + psl, pa ' + pal1)[n], πrs(lstep, rstep, lren, rren, (ls, rs) ' + ps ' + psl, pa ' + pal1)[n + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, ps ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, ps ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))(ps ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, ps ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, ps ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, ps ' + psl, pal0)[n0 + 1]) ⊦
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ a + x = a ' + x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ⌜x + y⌝ = ⌜x⌝ + ⌜y⌝ ; (s) ⊦ a ' ≠ []; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s)
| πrs(lstep, rstep, lren, rren, (ls, rs) ' + ps ' + psl, pa ' + pal1) ≠ [], n + 1 < # πrs(lstep, rstep, lren, rren, (ls, rs) ' + ps ' + psl, pa ' + pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(ps ' + psl, pal1), Π(lstep, rstep, lren, rren, lext, rext)((ls, rs), pa, ps), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls, rs) ' + ps ' + psl, pa ' + pal1)[n], πra(lstep, rstep, lren, rren, (ls, rs) ' + ps ' + psl, pa ' + pal1)[n], πrs(lstep, rstep, lren, rren, (ls, rs) ' + ps ' + psl, pa ' + pal1)[n + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, ps ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, ps ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))(ps ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, ps ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, ps ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, ps ' + psl, pal0)[n0 + 1]) ⊦ |
ps = (ls0, rs0), πrs(lstep, rstep, lren, rren, (ls, rs) ' + ps ' + psl, pa ' + pal1) ≠ [], n + 1 < # πrs(lstep, rstep, lren, rren, (ls, rs) ' + ps ' + psl, pa ' + pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(ps ' + psl, pal1), Π(lstep, rstep, lren, rren, lext, rext)((ls, rs), pa, ps), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls, rs) ' + ps ' + psl, pa ' + pal1)[n], πra(lstep, rstep, lren, rren, (ls, rs) ' + ps ' + psl, pa ' + pal1)[n], πrs(lstep, rstep, lren, rren, (ls, rs) ' + ps ' + psl, pa ' + pal1)[n + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, ps ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, ps ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))(ps ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, ps ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, ps ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, ps ' + psl, pal0)[n0 + 1]) ⊦
| ps = (ls0, rs0), πrs(lstep, rstep, lren, rren, (ls, rs) ' + ps ' + psl, pa ' + pal1) ≠ [], n + 1 < # πrs(lstep, rstep, lren, rren, (ls, rs) ' + ps ' + psl, pa ' + pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(ps ' + psl, pal1), Π(lstep, rstep, lren, rren, lext, rext)((ls, rs), pa, ps), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls, rs) ' + ps ' + psl, pa ' + pal1)[n], πra(lstep, rstep, lren, rren, (ls, rs) ' + ps ' + psl, pa ' + pal1)[n], πrs(lstep, rstep, lren, rren, (ls, rs) ' + ps ' + psl, pa ' + pal1)[n + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, ps ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, ps ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))(ps ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, ps ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, ps ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, ps ' + psl, pal0)[n0 + 1]) ⊦ |
πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1) ≠ [], n + 1 < # πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), Π(lstep, rstep, lren, rren, lext, rext)((ls, rs), pa, (ls0, rs0)), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1)[n], πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1)[n], πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1)[n + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1) ≠ [], n + 1 < # πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), Π(lstep, rstep, lren, rren, lext, rext)((ls, rs), pa, (ls0, rs0)), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1)[n], πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1)[n], πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1)[n + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦ |
⊦ Π(lstep, rstep, lren, rren, lext, rext)((ls, rs), pa, (ls0, rs0)) ↔ rs = rs0 ∧ (∃ la. lstep(ls, la, ls0) ∧ pa = lren(la) ∧ ¬ cod(rren)(pa)) ∨ ls = ls0 ∧ (∃ ra. rstep(rs, ra, rs0) ∧ pa = rren(ra) ∧ ¬ cod(lren)(pa)) ∨ (∃ la, ra. lstep(ls, la, ls0) ∧ lext(la) ≠ None ∧ pa = lren(la) ∧ rstep(rs, ra, rs0) ∧ rext(ra) ≠ None ∧ pa = rren(ra))
πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1) ≠ [], n + 1 < # πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1)[n], πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1)[n], πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1)[n + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]), rs = rs0 ∧ (∃ la. lstep(ls, la, ls0) ∧ pa = lren(la) ∧ ¬ cod(rren)(pa)) ∨ ls = ls0 ∧ (∃ ra. rstep(rs, ra, rs0) ∧ pa = rren(ra) ∧ ¬ cod(lren)(pa)) ∨ (∃ la, ra. lstep(ls, la, ls0) ∧ lext(la) ≠ None ∧ pa = lren(la) ∧ rstep(rs, ra, rs0) ∧ rext(ra) ≠ None ∧ pa = rren(ra)) ⊦
Used terms: rext, pa, rs, rstep, lren, rren, rs0, lstep, lext, ls, ls0
| ⊦ Π(lstep, rstep, lren, rren, lext, rext)((ls, rs), pa, (ls0, rs0)) ↔ rs = rs0 ∧ (∃ la. lstep(ls, la, ls0) ∧ pa = lren(la) ∧ ¬ cod(rren)(pa)) ∨ ls = ls0 ∧ (∃ ra. rstep(rs, ra, rs0) ∧ pa = rren(ra) ∧ ¬ cod(lren)(pa)) ∨ (∃ la, ra. lstep(ls, la, ls0) ∧ lext(la) ≠ None ∧ pa = lren(la) ∧ rstep(rs, ra, rs0) ∧ rext(ra) ≠ None ∧ pa = rren(ra)) |
| πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1) ≠ [], n + 1 < # πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1)[n], πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1)[n], πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1)[n + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]), rs = rs0 ∧ (∃ la. lstep(ls, la, ls0) ∧ pa = lren(la) ∧ ¬ cod(rren)(pa)) ∨ ls = ls0 ∧ (∃ ra. rstep(rs, ra, rs0) ∧ pa = rren(ra) ∧ ¬ cod(lren)(pa)) ∨ (∃ la, ra. lstep(ls, la, ls0) ∧ lext(la) ≠ None ∧ pa = lren(la) ∧ rstep(rs, ra, rs0) ∧ rext(ra) ≠ None ∧ pa = rren(ra)) ⊦ |
πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1) ≠ [], n + 1 < # πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1)[n], πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1)[n], πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1)[n + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]), rs = rs0 ∧ lstep(ls, la, ls0) ∧ pa = lren(la) ∧ ¬ cod(rren)(lren(la)) ∨ ls = ls0 ∧ rstep(rs, ra, rs0) ∧ pa = rren(ra) ∧ ¬ cod(lren)(rren(ra)) ∨ lstep(ls, la0, ls0) ∧ lext(la0) ≠ None ∧ rren(ra0) = lren(la0) ∧ rstep(rs, ra0, rs0) ∧ rext(ra0) ≠ None ∧ pa = rren(ra0) ⊦
| πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1) ≠ [], n + 1 < # πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1)[n], πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1)[n], πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1)[n + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]), rs = rs0 ∧ lstep(ls, la, ls0) ∧ pa = lren(la) ∧ ¬ cod(rren)(lren(la)) ∨ ls = ls0 ∧ rstep(rs, ra, rs0) ∧ pa = rren(ra) ∧ ¬ cod(lren)(rren(ra)) ∨ lstep(ls, la0, ls0) ∧ lext(la0) ≠ None ∧ rren(ra0) = lren(la0) ∧ rstep(rs, ra0, rs0) ∧ rext(ra0) ≠ None ∧ pa = rren(ra0) ⊦ |
pa = lren(la), rs = rs0, πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1) ≠ [], n + 1 < # πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), lstep(ls, la, ls0), ¬ cod(rren)(lren(la)), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1)[n], πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1)[n], πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1)[n + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦
ls = ls0, pa = rren(ra), πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1) ≠ [], n + 1 < # πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), rstep(rs, ra, rs0), ¬ cod(lren)(rren(ra)), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1)[n], πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1)[n], πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1)[n + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦
pa = rren(ra0), rren(ra0) = lren(la0), lext(la0) ≠ None, rext(ra0) ≠ None, πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1) ≠ [], n + 1 < # πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), lstep(ls, la0, ls0), rstep(rs, ra0, rs0), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1)[n], πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1)[n], πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1)[n + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦
| pa = lren(la), rs = rs0, πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1) ≠ [], n + 1 < # πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), lstep(ls, la, ls0), ¬ cod(rren)(lren(la)), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1)[n], πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1)[n], πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1)[n + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦ |
πrs(lstep, rstep, lren, rren, (ls, rs0) ' + (ls0, rs0) ' + psl, lren(la) ' + pal1) ≠ [], n + 1 < # πrs(lstep, rstep, lren, rren, (ls, rs0) ' + (ls0, rs0) ' + psl, lren(la) ' + pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), lstep(ls, la, ls0), ¬ cod(rren)(lren(la)), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls, rs0) ' + (ls0, rs0) ' + psl, lren(la) ' + pal1)[n], πra(lstep, rstep, lren, rren, (ls, rs0) ' + (ls0, rs0) ' + psl, lren(la) ' + pal1)[n], πrs(lstep, rstep, lren, rren, (ls, rs0) ' + (ls0, rs0) ' + psl, lren(la) ' + pal1)[n + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| πrs(lstep, rstep, lren, rren, (ls, rs0) ' + (ls0, rs0) ' + psl, lren(la) ' + pal1) ≠ [], n + 1 < # πrs(lstep, rstep, lren, rren, (ls, rs0) ' + (ls0, rs0) ' + psl, lren(la) ' + pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), lstep(ls, la, ls0), ¬ cod(rren)(lren(la)), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls, rs0) ' + (ls0, rs0) ' + psl, lren(la) ' + pal1)[n], πra(lstep, rstep, lren, rren, (ls, rs0) ' + (ls0, rs0) ' + psl, lren(la) ' + pal1)[n], πrs(lstep, rstep, lren, rren, (ls, rs0) ' + (ls0, rs0) ' + psl, lren(la) ' + pal1)[n + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦ |
⊦ # psl = # pal ∧ lstep(ls, la, ls0) ∧ ¬ cod(rren)(lren(la)) → πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs) ' + psl, lren(la) ' + pal) = πrs(lstep, rstep, lren, rren, (ls0, rs) ' + psl, pal)
# psl = # pal1, πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1) ≠ [], n + 1 < # πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), lstep(ls, la, ls0), ¬ cod(rren)(lren(la)), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n], πra(lstep, rstep, lren, rren, (ls, rs0) ' + (ls0, rs0) ' + psl, lren(la) ' + pal1)[n], πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ frag*(IOAut(start, step, ext))(s ' + sl, al) → (# sl = # al ↔ true); (ss) Used terms: psl, rs0, pal1, rstep, lren, rren, la, lstep, ls, ls0
| ⊦ # psl = # pal ∧ lstep(ls, la, ls0) ∧ ¬ cod(rren)(lren(la)) → πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs) ' + psl, lren(la) ' + pal) = πrs(lstep, rstep, lren, rren, (ls0, rs) ' + psl, pal) |
| # psl = # pal1, πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1) ≠ [], n + 1 < # πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), lstep(ls, la, ls0), ¬ cod(rren)(lren(la)), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n], πra(lstep, rstep, lren, rren, (ls, rs0) ' + (ls0, rs0) ' + psl, lren(la) ' + pal1)[n], πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦ |
# psl = # pal1, πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1) ≠ [], n + 1 < # πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), lstep(ls, la, ls0), ¬ cod(rren)(lren(la)), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n], πra(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n], πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦
Used simplifier rules: projaction-rec-skipL: ⊦ # psl = # pal ∧ lstep(ls, la, ls0) ∧ ¬ cod(rren)(lren(la)) → πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs) ' + psl, lren(la) ' + pal) = πra(lstep, rstep, lren, rren, (ls0, rs) ' + psl, pal); ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic a: ⊦ (x + y) + z = x + y + z; from specification list
| # psl = # pal1, πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1) ≠ [], n + 1 < # πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), lstep(ls, la, ls0), ¬ cod(rren)(lren(la)), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n], πra(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n], πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦ |
Used terms: lstep, rstep, lren, rren, pal1, n, lstart, rstart, lext, rext
| ls = ls0, pa = rren(ra), πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1) ≠ [], n + 1 < # πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), rstep(rs, ra, rs0), ¬ cod(lren)(rren(ra)), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1)[n], πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1)[n], πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1)[n + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦ |
πrs(lstep, rstep, lren, rren, (ls0, rs) ' + (ls0, rs0) ' + psl, rren(ra) ' + pal1) ≠ [], n + 1 < # πrs(lstep, rstep, lren, rren, (ls0, rs) ' + (ls0, rs0) ' + psl, rren(ra) ' + pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), rstep(rs, ra, rs0), ¬ cod(lren)(rren(ra)), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls0, rs) ' + (ls0, rs0) ' + psl, rren(ra) ' + pal1)[n], πra(lstep, rstep, lren, rren, (ls0, rs) ' + (ls0, rs0) ' + psl, rren(ra) ' + pal1)[n], πrs(lstep, rstep, lren, rren, (ls0, rs) ' + (ls0, rs0) ' + psl, rren(ra) ' + pal1)[n + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| πrs(lstep, rstep, lren, rren, (ls0, rs) ' + (ls0, rs0) ' + psl, rren(ra) ' + pal1) ≠ [], n + 1 < # πrs(lstep, rstep, lren, rren, (ls0, rs) ' + (ls0, rs0) ' + psl, rren(ra) ' + pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), rstep(rs, ra, rs0), ¬ cod(lren)(rren(ra)), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls0, rs) ' + (ls0, rs0) ' + psl, rren(ra) ' + pal1)[n], πra(lstep, rstep, lren, rren, (ls0, rs) ' + (ls0, rs0) ' + psl, rren(ra) ' + pal1)[n], πrs(lstep, rstep, lren, rren, (ls0, rs) ' + (ls0, rs0) ' + psl, rren(ra) ' + pal1)[n + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦ |
⊦ # psl = # pal ∧ rstep(rs, ra, rs0) ∧ ¬ cod(lren)(rren(ra)) → πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psl, rren(ra) ' + pal) = rs ' + πrs(lstep, rstep, lren, rren, (ls, rs0) ' + psl, pal)
# psl = # pal1, rs ' + πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1) ≠ [], n + 1 < #(rs ' + πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), rstep(rs, ra, rs0), ¬ cod(lren)(rren(ra)), ¬ rstep ((rs ' + πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1))[n], πra(lstep, rstep, lren, rren, (ls0, rs) ' + (ls0, rs0) ' + psl, rren(ra) ' + pal1)[n], (rs ' + πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1))[n + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ frag*(IOAut(start, step, ext))(s ' + sl, al) → (# sl = # al ↔ true); (ss) Used terms: psl, rs, ra, pal1, rstep, lren, rren, rs0, lstep, ls0
| ⊦ # psl = # pal ∧ rstep(rs, ra, rs0) ∧ ¬ cod(lren)(rren(ra)) → πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psl, rren(ra) ' + pal) = rs ' + πrs(lstep, rstep, lren, rren, (ls, rs0) ' + psl, pal) |
| # psl = # pal1, rs ' + πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1) ≠ [], n + 1 < #(rs ' + πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), rstep(rs, ra, rs0), ¬ cod(lren)(rren(ra)), ¬ rstep ((rs ' + πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1))[n], πra(lstep, rstep, lren, rren, (ls0, rs) ' + (ls0, rs0) ' + psl, rren(ra) ' + pal1)[n], (rs ' + πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1))[n + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦ |
# psl = # pal1, πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1) ≠ [], n < # πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), rstep(rs, ra, rs0), ¬ cod(lren)(rren(ra)), ¬ rstep ((rs ' + πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1))[n], (ra ' + πra(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1))[n], πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦
Used simplifier rules: projaction-rec-addR: ⊦ # psl = # pal ∧ rstep(rs, ra, rs0) ∧ ¬ cod(lren)(rren(ra)) → πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls, rs0) ' + psl, rren(ra) ' + pal) = ra + πra(lstep, rstep, lren, rren, (ls, rs0) + psl, pal); ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic a: ⊦ (x + y) + z = x + y + z; from specification list c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ (a ' + x)[n + 1] = x[n]; (s) ⊦ a + x = a ' + x; (s) ⊦ m + n < m + n0 ↔ n < n0; (s) ⊦ m +1 = m + 1; (s) ⊦ #(a ' + x) = (# x)+1; (s) ⊦ a ' ≠ []; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s)
| # psl = # pal1, πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1) ≠ [], n < # πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), rstep(rs, ra, rs0), ¬ cod(lren)(rren(ra)), ¬ rstep ((rs ' + πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1))[n], (ra ' + πra(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1))[n], πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦ |
⊦ ¬ n < # x → (x + y)[n] = y[n - # x]
# psl = # pal1, πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1) ≠ [], n < # rs ', n < # πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), rstep(rs, ra, rs0), ¬ cod(lren)(rren(ra)), ¬ rstep ((rs ' + πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1))[n], (ra ' + πra(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1))[n], πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦
# psl = # pal1, πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1) ≠ [], n < # πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), rstep(rs, ra, rs0), ¬ n < # rs ', ¬ cod(lren)(rren(ra)), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n - # rs '], (ra ' + πra(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1))[n], πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦
Used terms: rs ', πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1), n
| ⊦ ¬ n < # x → (x + y)[n] = y[n - # x] |
| # psl = # pal1, πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1) ≠ [], n < # rs ', n < # πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), rstep(rs, ra, rs0), ¬ cod(lren)(rren(ra)), ¬ rstep ((rs ' + πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1))[n], (ra ' + πra(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1))[n], πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦ |
# psl = # pal1, πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1) ≠ [], frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), rstep(rs, ra, rs0), ¬ cod(lren)(rren(ra)), ¬ rstep(rs, ra, πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1).head), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦
Used simplifier rules: ⊦ x ≠ [] → x[0] = x.head; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ (a ' + x)[0] = a; (s) ⊦ # x = 0 ↔ x = []; (s) ⊦ 0 < m ↔ m ≠ 0; (s) lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic ⊦ m < 1 ↔ m = 0; (s) ⊦ # a ' = 0 +1; (s)
| # psl = # pal1, πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1) ≠ [], frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), rstep(rs, ra, rs0), ¬ cod(lren)(rren(ra)), ¬ rstep(rs, ra, πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1).head), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦ |
# psl = # pal1, πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1) = rs1 + rsl, πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1) ≠ [], frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), rstep(rs, ra, rs0), ¬ cod(lren)(rren(ra)), ¬ rstep(rs, ra, rs1), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦
Used simplifier rules: ⊦ x ≠ [] → (head = x.head ∧ tail = x.tail ↔ x = head + tail); (elim) Used terms: πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1), rs1, rsl
| # psl = # pal1, πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1) = rs1 + rsl, πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1) ≠ [], frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), rstep(rs, ra, rs0), ¬ cod(lren)(rren(ra)), ¬ rstep(rs, ra, rs1), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦ |
# psl = # pal1, πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1) = rs1 ' + rsl, frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), rstep(rs, ra, rs0), ¬ cod(lren)(rren(ra)), ¬ rstep(rs, ra, rs1), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ a ∈ a0 ' + x ↔ a = a0 ∨ a ∈ x; (s) ⊦ a ' ≠ []; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list ⊦ a + x = a ' + x; (s)
| # psl = # pal1, πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1) = rs1 ' + rsl, frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), rstep(rs, ra, rs0), ¬ cod(lren)(rren(ra)), ¬ rstep(rs, ra, rs1), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦ |
⊦ frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psl, pal) → πrs(lstep, rstep, lren, rren, psl, pal).head = psl.head._2
Used simplifier rules: ⊦ ⌜x + y⌝ = ⌜x⌝ + ⌜y⌝ ; (s) ⊦ (a ' + x).head = a; (s) a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: rext, (ls0, rs0) ' + psl, pal1, rstep, rstart, lren, rren, lstart, lstep, lext
| ⊦ frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psl, pal) → πrs(lstep, rstep, lren, rren, psl, pal).head = psl.head._2 |
| # psl = # pal1, πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1) ≠ [], n < # πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), rstep(rs, ra, rs0), ¬ n < # rs ', ¬ cod(lren)(rren(ra)), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n - # rs '], (ra ' + πra(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1))[n], πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦ |
# psl = # pal1, n ≠ 0, πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1) ≠ [], n < # πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), rstep(rs, ra, rs0), ¬ cod(lren)(rren(ra)), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n - 1], (ra ' + πra(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1))[n], πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦
Used simplifier rules: ⊦ # a ' = 0 +1; (s) ⊦ m < 1 ↔ m = 0; (s)
| # psl = # pal1, n ≠ 0, πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1) ≠ [], n < # πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), rstep(rs, ra, rs0), ¬ cod(lren)(rren(ra)), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n - 1], (ra ' + πra(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1))[n], πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦ |
# psl = # pal1, n = n1 + 1, n ≠ 0, πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1) ≠ [], n < # πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), rstep(rs, ra, rs0), ¬ cod(lren)(rren(ra)), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n1], (ra ' + πra(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1))[n], πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦
Used simplifier rules: n ≠ 0 ⊦ m = n - 1 ↔ n = m + 1; (elim) Used terms: n, n1
| # psl = # pal1, n = n1 + 1, n ≠ 0, πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1) ≠ [], n < # πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), rstep(rs, ra, rs0), ¬ cod(lren)(rren(ra)), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n1], (ra ' + πra(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1))[n], πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦ |
# psl = # pal1, πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1) ≠ [], n1 + 1 < # πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), rstep(rs, ra, rs0), ¬ cod(lren)(rren(ra)), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n1], πra(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n1], πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n1 + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ (a ' + x)[n + 1] = x[n]; (s) ⊦ m + 1 ≠ 0; (s)
| # psl = # pal1, πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1) ≠ [], n1 + 1 < # πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), rstep(rs, ra, rs0), ¬ cod(lren)(rren(ra)), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n1], πra(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n1], πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n1 + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦ |
Used terms: lstep, rstep, lren, rren, pal1, n1, lstart, rstart, lext, rext
| pa = rren(ra0), rren(ra0) = lren(la0), lext(la0) ≠ None, rext(ra0) ≠ None, πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1) ≠ [], n + 1 < # πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), lstep(ls, la0, ls0), rstep(rs, ra0, rs0), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1)[n], πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1)[n], πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal1)[n + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦ |
rren(ra0) = lren(la0), lext(la0) ≠ None, rext(ra0) ≠ None, πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, lren(la0) ' + pal1) ≠ [], n + 1 < # πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, lren(la0) ' + pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), lstep(ls, la0, ls0), rstep(rs, ra0, rs0), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, lren(la0) ' + pal1)[n], πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, lren(la0) ' + pal1)[n], πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, lren(la0) ' + pal1)[n + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| rren(ra0) = lren(la0), lext(la0) ≠ None, rext(ra0) ≠ None, πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, lren(la0) ' + pal1) ≠ [], n + 1 < # πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, lren(la0) ' + pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), lstep(ls, la0, ls0), rstep(rs, ra0, rs0), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, lren(la0) ' + pal1)[n], πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, lren(la0) ' + pal1)[n], πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, lren(la0) ' + pal1)[n + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦ |
pa = lren(la) ⊦ # psl = # pal ∧ rstep(rs, ra, rs0) ∧ rren(ra) = lren(la) ∧ lstep(ls, la, ls0) → πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal) = rs ' + πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal)
# psl = # pal1, lren(la0) = lren(la0), rren(ra0) = lren(la0), rs ' + πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1) ≠ [], lext(la0) ≠ None, rext(ra0) ≠ None, n + 1 < #(rs ' + πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), lstep(ls, la0, ls0), rstep(rs, ra0, rs0), ¬ rstep ((rs ' + πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1))[n], πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, lren(la0) ' + pal1)[n], (rs ' + πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1))[n + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ frag*(IOAut(start, step, ext))(s ' + sl, al) → (# sl = # al ↔ true); (ss) Used terms: lren(la0), psl, rs, ra0, pal1, rstep, lren, rren, la0, rs0, lstep, ls, ls0
| pa = lren(la) ⊦ # psl = # pal ∧ rstep(rs, ra, rs0) ∧ rren(ra) = lren(la) ∧ lstep(ls, la, ls0) → πrs(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal) = rs ' + πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal) |
| # psl = # pal1, lren(la0) = lren(la0), rren(ra0) = lren(la0), rs ' + πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1) ≠ [], lext(la0) ≠ None, rext(ra0) ≠ None, n + 1 < #(rs ' + πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), lstep(ls, la0, ls0), rstep(rs, ra0, rs0), ¬ rstep ((rs ' + πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1))[n], πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, lren(la0) ' + pal1)[n], (rs ' + πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1))[n + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦ |
# psl = # pal1, rren(ra0) = lren(la0), lext(la0) ≠ None, rext(ra0) ≠ None, πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1) ≠ [], n < # πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), lstep(ls, la0, ls0), rstep(rs, ra0, rs0), ¬ rstep ((rs ' + πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1))[n], (ra0 ' + πra(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1))[n], πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦
Used simplifier rules: projaction-rec-addboth: pa = lren(la) ⊦ # psl = # pal ∧ rstep(rs, ra, rs0) ∧ rren(ra) = lren(la) ∧ lstep(ls, la, ls0) → πra(lstep, rstep, lren, rren, (ls, rs) ' + (ls0, rs0) ' + psl, pa ' + pal) = ra + πra(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal); ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic a: ⊦ (x + y) + z = x + y + z; from specification list c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ (a ' + x)[n + 1] = x[n]; (s) ⊦ a + x = a ' + x; (s) ⊦ m + n < m + n0 ↔ n < n0; (s) ⊦ m +1 = m + 1; (s) ⊦ #(a ' + x) = (# x)+1; (s) ⊦ a ' ≠ []; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s)
| # psl = # pal1, rren(ra0) = lren(la0), lext(la0) ≠ None, rext(ra0) ≠ None, πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1) ≠ [], n < # πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), lstep(ls, la0, ls0), rstep(rs, ra0, rs0), ¬ rstep ((rs ' + πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1))[n], (ra0 ' + πra(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1))[n], πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦ |
⊦ ¬ n < # x → (x + y)[n] = y[n - # x]
# psl = # pal1, rren(ra0) = lren(la0), lext(la0) ≠ None, rext(ra0) ≠ None, πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1) ≠ [], n < # rs ', n < # πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), lstep(ls, la0, ls0), rstep(rs, ra0, rs0), ¬ rstep ((rs ' + πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1))[n], (ra0 ' + πra(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1))[n], πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦
# psl = # pal1, rren(ra0) = lren(la0), lext(la0) ≠ None, rext(ra0) ≠ None, πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1) ≠ [], n < # πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), lstep(ls, la0, ls0), rstep(rs, ra0, rs0), ¬ n < # rs ', ¬ rstep (πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n - # rs '], (ra0 ' + πra(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1))[n], πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦
Used terms: rs ', πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1), n
| ⊦ ¬ n < # x → (x + y)[n] = y[n - # x] |
| # psl = # pal1, rren(ra0) = lren(la0), lext(la0) ≠ None, rext(ra0) ≠ None, πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1) ≠ [], n < # rs ', n < # πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), lstep(ls, la0, ls0), rstep(rs, ra0, rs0), ¬ rstep ((rs ' + πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1))[n], (ra0 ' + πra(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1))[n], πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦ |
# psl = # pal1, rren(ra0) = lren(la0), lext(la0) ≠ None, rext(ra0) ≠ None, πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1) ≠ [], frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), lstep(ls, la0, ls0), rstep(rs, ra0, rs0), ¬ rstep(rs, ra0, πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1).head), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦
Used simplifier rules: ⊦ x ≠ [] → x[0] = x.head; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ (a ' + x)[0] = a; (s) ⊦ # x = 0 ↔ x = []; (s) ⊦ 0 < m ↔ m ≠ 0; (s) lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic ⊦ m < 1 ↔ m = 0; (s) ⊦ # a ' = 0 +1; (s)
| # psl = # pal1, rren(ra0) = lren(la0), lext(la0) ≠ None, rext(ra0) ≠ None, πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1) ≠ [], frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), lstep(ls, la0, ls0), rstep(rs, ra0, rs0), ¬ rstep(rs, ra0, πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1).head), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦ |
# psl = # pal1, rren(ra0) = lren(la0), πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1) = rs1 + rsl, lext(la0) ≠ None, rext(ra0) ≠ None, πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1) ≠ [], frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), lstep(ls, la0, ls0), rstep(rs, ra0, rs0), ¬ rstep(rs, ra0, rs1), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦
Used simplifier rules: ⊦ x ≠ [] → (head = x.head ∧ tail = x.tail ↔ x = head + tail); (elim) Used terms: πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1), rs1, rsl
| # psl = # pal1, rren(ra0) = lren(la0), πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1) = rs1 + rsl, lext(la0) ≠ None, rext(ra0) ≠ None, πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1) ≠ [], frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), lstep(ls, la0, ls0), rstep(rs, ra0, rs0), ¬ rstep(rs, ra0, rs1), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦ |
# psl = # pal1, rren(ra0) = lren(la0), πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1) = rs1 ' + rsl, lext(la0) ≠ None, rext(ra0) ≠ None, frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), lstep(ls, la0, ls0), rstep(rs, ra0, rs0), ¬ rstep(rs, ra0, rs1), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ a ∈ a0 ' + x ↔ a = a0 ∨ a ∈ x; (s) ⊦ a ' ≠ []; (s) ⊦ x + y = [] ↔ x = [] ∧ y = []; (s) in-14: ⊦ a ' + x = y → a ∈ y; (forward) from specification list ⊦ a + x = a ' + x; (s)
| # psl = # pal1, rren(ra0) = lren(la0), πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1) = rs1 ' + rsl, lext(la0) ≠ None, rext(ra0) ≠ None, frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), lstep(ls, la0, ls0), rstep(rs, ra0, rs0), ¬ rstep(rs, ra0, rs1), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦ |
⊦ frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psl, pal) → πrs(lstep, rstep, lren, rren, psl, pal).head = psl.head._2
Used simplifier rules: ⊦ ⌜x + y⌝ = ⌜x⌝ + ⌜y⌝ ; (s) ⊦ (a ' + x).head = a; (s) a: ⊦ (x + y) + z = x + y + z; from specification list Used terms: rext, (ls0, rs0) ' + psl, pal1, rstep, rstart, lren, rren, lstart, lstep, lext
| ⊦ frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psl, pal) → πrs(lstep, rstep, lren, rren, psl, pal).head = psl.head._2 |
| # psl = # pal1, rren(ra0) = lren(la0), lext(la0) ≠ None, rext(ra0) ≠ None, πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1) ≠ [], n < # πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), lstep(ls, la0, ls0), rstep(rs, ra0, rs0), ¬ n < # rs ', ¬ rstep (πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n - # rs '], (ra0 ' + πra(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1))[n], πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦ |
# psl = # pal1, rren(ra0) = lren(la0), lext(la0) ≠ None, n ≠ 0, rext(ra0) ≠ None, πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1) ≠ [], n < # πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), lstep(ls, la0, ls0), rstep(rs, ra0, rs0), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n - 1], (ra0 ' + πra(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1))[n], πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦
Used simplifier rules: ⊦ # a ' = 0 +1; (s) ⊦ m < 1 ↔ m = 0; (s)
| # psl = # pal1, rren(ra0) = lren(la0), lext(la0) ≠ None, n ≠ 0, rext(ra0) ≠ None, πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1) ≠ [], n < # πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), lstep(ls, la0, ls0), rstep(rs, ra0, rs0), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n - 1], (ra0 ' + πra(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1))[n], πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦ |
# psl = # pal1, n = n1 + 1, rren(ra0) = lren(la0), lext(la0) ≠ None, n ≠ 0, rext(ra0) ≠ None, πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1) ≠ [], n < # πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), lstep(ls, la0, ls0), rstep(rs, ra0, rs0), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n1], (ra0 ' + πra(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1))[n], πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦
Used simplifier rules: n ≠ 0 ⊦ m = n - 1 ↔ n = m + 1; (elim) Used terms: n, n1
| # psl = # pal1, n = n1 + 1, rren(ra0) = lren(la0), lext(la0) ≠ None, n ≠ 0, rext(ra0) ≠ None, πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1) ≠ [], n < # πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), lstep(ls, la0, ls0), rstep(rs, ra0, rs0), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n1], (ra0 ' + πra(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1))[n], πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦ |
# psl = # pal1, rren(ra0) = lren(la0), lext(la0) ≠ None, rext(ra0) ≠ None, πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1) ≠ [], n1 + 1 < # πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), lstep(ls, la0, ls0), rstep(rs, ra0, rs0), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n1], πra(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n1], πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n1 + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ (a ' + x)[n + 1] = x[n]; (s) ⊦ m + 1 ≠ 0; (s)
| # psl = # pal1, rren(ra0) = lren(la0), lext(la0) ≠ None, rext(ra0) ≠ None, πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1) ≠ [], n1 + 1 < # πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1), frag*(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))((ls0, rs0) ' + psl, pal1), lstep(ls, la0, ls0), rstep(rs, ra0, rs0), ¬ rstep (πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n1], πra(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n1], πrs(lstep, rstep, lren, rren, (ls0, rs0) ' + psl, pal1)[n1 + 1]), ∀ lstep0, rstep0, lren0, rren0, pal0, n0, lstart0, rstart0, lext0, rext0. πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) = [] ∨ ¬ n0 + 1 < # πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0) ∨ ¬ frag*(IOAut(Π(lstart0, rstart0), Π(lstep0, rstep0, lren0, rren0, lext0, rext0), Π(lext0, rext0, lren0, rren0)))((ls0, rs0) ' + psl, pal0) ∨ rstep0 (πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πra(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0], πrs(lstep0, rstep0, lren0, rren0, (ls0, rs0) ' + psl, pal0)[n0 + 1]) ⊦ |
Used terms: lstep, rstep, lren, rren, pal1, n1, lstart, rstart, lext, rext
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.