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