| ⊦ fragω(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))(psf, paf) → ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n), paf.take(n + 1))⌝ |
fragω(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))(psf, paf), ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n), paf.take(n + 1))⌝ ⊦
| fragω(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))(psf, paf), ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(n + 1), paf.take(n))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n), paf.take(n + 1))⌝ ⊦ |
fragω(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))(psf, paf), ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(0 + 1), paf.take(0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + 0), paf.take(0 + 1))⌝ ⊦
fragω(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))(psf, paf), ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(n0 +1 + 1), paf.take(n0 +1))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n0 +1), paf.take(n0 +1 + 1))⌝ , ∀ lstart, lstep, lext, rstart, rstep, rext, lren, rren, psf, paf. ¬ ( fragω(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))(psf, paf) ∧ ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(n0 + 1), paf.take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n0), paf.take(n0 + 1))⌝ ) ⊦
Used simplifier rules: Nat freely generated by 0, +1;;
| fragω(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))(psf, paf), ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(0 + 1), paf.take(0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + 0), paf.take(0 + 1))⌝ ⊦ |
fragω(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))(psf, paf), ¬ ⌜πra(lstep, rstep, lren, rren, psf(0) ', [])⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(2), paf(0) ')⌝ ⊦
Used simplifier rules: ⊦ nf.take(1) = nf(0) '; (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ nf.take(0) = []; (s)
| fragω(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))(psf, paf), ¬ ⌜πra(lstep, rstep, lren, rren, psf(0) ', [])⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(2), paf(0) ')⌝ ⊦ |
Used simplifier rules: projaction-base: ⊦ πra(lstep, rstep, lren, rren, (ls, rs) ', []) = []; ⊦ ⌜[]⌝ = []; (s) ⊦ [] ⊑ σ; (s)
| fragω(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))(psf, paf), ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(n0 +1 + 1), paf.take(n0 +1))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n0 +1), paf.take(n0 +1 + 1))⌝ , ∀ lstart, lstep, lext, rstart, rstep, rext, lren, rren, psf, paf. ¬ ( fragω(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))(psf, paf) ∧ ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(n0 + 1), paf.take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n0), paf.take(n0 + 1))⌝ ) ⊦ |
fragω(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))(psf, paf), ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n0), paf.take(n0 + 1))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(3 + n0), paf.take(2 + n0))⌝ , ∀ lstart0, lstep0, lext0, rstart0, rstep0, rext0, lren0, rren0, psf0, paf0. ¬ fragω(Π(IOAut(lstart0, lstep0, lext0), IOAut(rstart0, rstep0, rext0), lren0, rren0))(psf0, paf0) ∨ ⌜πra(lstep0, rstep0, lren0, rren0, psf0.take(n0 + 1), paf0.take(n0))⌝ ⊑ ⌜πra(lstep0, rstep0, lren0, rren0, psf0.take(2 + n0), paf0.take(n0 + 1))⌝ ⊦
Used simplifier rules: a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ m +1 = m + 1; (s)
| fragω(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))(psf, paf), ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n0), paf.take(n0 + 1))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(3 + n0), paf.take(2 + n0))⌝ , ∀ lstart0, lstep0, lext0, rstart0, rstep0, rext0, lren0, rren0, psf0, paf0. ¬ fragω(Π(IOAut(lstart0, lstep0, lext0), IOAut(rstart0, rstep0, rext0), lren0, rren0))(psf0, paf0) ∨ ⌜πra(lstep0, rstep0, lren0, rren0, psf0.take(n0 + 1), paf0.take(n0))⌝ ⊑ ⌜πra(lstep0, rstep0, lren0, rren0, psf0.take(2 + n0), paf0.take(n0 + 1))⌝ ⊦ |
fragω(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))(psf, paf), ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n0), paf.take(n0 + 1))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(3 + n0), paf.take(2 + n0))⌝ , ¬ fragω(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))(λ n. psf(n + 1), λ n. paf(n + 1)) ∨ ⌜πra(lstep, rstep, lren, rren, (λ n. psf(n + 1)).take(n0 + 1), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (λ n. psf(n + 1)).take(2 + n0), (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦
Used terms: lstart, lstep, lext, rstart, rstep, rext, lren, rren, λ n. psf(n + 1), λ n. paf(n + 1)
| fragω(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))(psf, paf), ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n0), paf.take(n0 + 1))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(3 + n0), paf.take(2 + n0))⌝ , ¬ fragω(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))(λ n. psf(n + 1), λ n. paf(n + 1)) ∨ ⌜πra(lstep, rstep, lren, rren, (λ n. psf(n + 1)).take(n0 + 1), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (λ n. psf(n + 1)).take(2 + n0), (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦ |
fragω(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))(psf, paf), ¬ fragω(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))(λ n. psf(n + 1), λ n. paf(n + 1)), ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n0), paf.take(n0 + 1))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(3 + n0), paf.take(2 + n0))⌝ ⊦
fragω(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))(psf, paf), ⌜πra(lstep, rstep, lren, rren, (λ n. psf(n + 1)).take(n0 + 1), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (λ n. psf(n + 1)).take(2 + n0), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n0), paf.take(n0 + 1))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(3 + n0), paf.take(2 + n0))⌝ ⊦
| fragω(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))(psf, paf), ¬ fragω(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))(λ n. psf(n + 1), λ n. paf(n + 1)), ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n0), paf.take(n0 + 1))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(3 + n0), paf.take(2 + n0))⌝ ⊦ |
⊦ Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren) = IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren))
fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ¬ fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(λ n. psf(n + 1), λ n. paf(n + 1)), ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n0), paf.take(n0 + 1))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(3 + n0), paf.take(2 + n0))⌝ ⊦
Used terms: rext, rstep, rstart, lren, rren, lstart, lstep, lext
| ⊦ Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren) = IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)) |
| fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ¬ fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(λ n. psf(n + 1), λ n. paf(n + 1)), ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n0), paf.take(n0 + 1))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(3 + n0), paf.take(2 + n0))⌝ ⊦ |
⊦ frag(IOAut(start, step, ext))(σ, α) ↔ # σ = # α + ⌜1⌝ ∧ (∀ n. ⌜n⌝ < # α → step(σ[n], α[n], σ[n +1]))
# ⌜psf⌝ = # ⌜paf⌝ + ⌜1⌝ , ¬ fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(λ n. psf(n + 1), λ n. paf(n + 1)), ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n0), paf.take(n0 + 1))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(3 + n0), paf.take(2 + n0))⌝ , ∀ n. ⌜n⌝ < # ⌜paf⌝ → Π(lstep, rstep, lren, rren, lext, rext)(⌜psf⌝ [n], ⌜paf⌝ [n], ⌜psf⌝ [n +1]) ⊦
Used terms: Π(lext, rext, lren, rren), ⌜paf⌝ , Π(lstep, rstep, lren, rren, lext, rext), Π(lstart, rstart), ⌜psf⌝
| ⊦ frag(IOAut(start, step, ext))(σ, α) ↔ # σ = # α + ⌜1⌝ ∧ (∀ n. ⌜n⌝ < # α → step(σ[n], α[n], σ[n +1])) |
| # ⌜psf⌝ = # ⌜paf⌝ + ⌜1⌝ , ¬ fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(λ n. psf(n + 1), λ n. paf(n + 1)), ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n0), paf.take(n0 + 1))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(3 + n0), paf.take(2 + n0))⌝ , ∀ n. ⌜n⌝ < # ⌜paf⌝ → Π(lstep, rstep, lren, rren, lext, rext)(⌜psf⌝ [n], ⌜paf⌝ [n], ⌜psf⌝ [n +1]) ⊦ |
¬ fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(λ n. psf(n + 1), λ n. paf(n + 1)), ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n0), paf.take(n0 + 1))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(3 + n0), paf.take(2 + n0))⌝ , ∀ n. Π(lstep, rstep, lren, rren, lext, rext)(psf(n), paf(n), psf(n + 1)) ⊦
Used simplifier rules: ⊦ ⌜nf⌝ [n] = nf(n); (s) ⊦ m +1 = m + 1; (s) ⊦ ⌜m⌝ < ∞; (s) ⊦ # ⌜nf⌝ = ∞; (s) add-comm: ⊦ n∞1 + n∞2 = n∞2 + n∞1; from specification nat-inf add-assoc: ⊦ (n∞ + n∞1) + n∞2 = n∞ + n∞1 + n∞2; from specification nat-inf ⊦ ⌜m⌝ + ∞ = ∞; (s)
| ¬ fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(λ n. psf(n + 1), λ n. paf(n + 1)), ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n0), paf.take(n0 + 1))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(3 + n0), paf.take(2 + n0))⌝ , ∀ n. Π(lstep, rstep, lren, rren, lext, rext)(psf(n), paf(n), psf(n + 1)) ⊦ |
⊦ frag(IOAut(start, step, ext))(σ, α) ↔ # σ = # α + ⌜1⌝ ∧ (∀ n. ⌜n⌝ < # α → step(σ[n], α[n], σ[n +1]))
¬ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n0), paf.take(n0 + 1))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(3 + n0), paf.take(2 + n0))⌝ , ∀ n. Π(lstep, rstep, lren, rren, lext, rext)(psf(n), paf(n), psf(n + 1)), # ⌜λ n. psf(n + 1)⌝ ≠ # ⌜λ n. paf(n + 1)⌝ + ⌜1⌝ ∨ (∃ n. ¬ ( ⌜n⌝ < # ⌜λ n. paf(n + 1)⌝ → Π(lstep, rstep, lren, rren, lext, rext)(⌜λ n. psf(n + 1)⌝ [n], ⌜λ n. paf(n + 1)⌝ [n], ⌜λ n. psf(n + 1)⌝ [n +1]))) ⊦
Used terms: Π(lext, rext, lren, rren), ⌜λ n. paf(n + 1)⌝ , Π(lstep, rstep, lren, rren, lext, rext), Π(lstart, rstart), ⌜λ n. psf(n + 1)⌝
| ⊦ frag(IOAut(start, step, ext))(σ, α) ↔ # σ = # α + ⌜1⌝ ∧ (∀ n. ⌜n⌝ < # α → step(σ[n], α[n], σ[n +1])) |
| ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n0), paf.take(n0 + 1))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(3 + n0), paf.take(2 + n0))⌝ , ∀ n. Π(lstep, rstep, lren, rren, lext, rext)(psf(n), paf(n), psf(n + 1)), # ⌜λ n. psf(n + 1)⌝ ≠ # ⌜λ n. paf(n + 1)⌝ + ⌜1⌝ ∨ (∃ n. ¬ ( ⌜n⌝ < # ⌜λ n. paf(n + 1)⌝ → Π(lstep, rstep, lren, rren, lext, rext)(⌜λ n. psf(n + 1)⌝ [n], ⌜λ n. paf(n + 1)⌝ [n], ⌜λ n. psf(n + 1)⌝ [n +1]))) ⊦ |
¬ Π(lstep, rstep, lren, rren, lext, rext)(psf(n + 1), paf(n + 1), psf(2 + n)), ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n0), paf.take(n0 + 1))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(3 + n0), paf.take(2 + n0))⌝ , ∀ n. Π(lstep, rstep, lren, rren, lext, rext)(psf(n), paf(n), psf(n + 1)) ⊦
Used simplifier rules: a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ ⌜nf⌝ [n] = nf(n); (s) ⊦ m +1 = m + 1; (s) ⊦ ⌜m⌝ < ∞; (s) ⊦ # ⌜nf⌝ = ∞; (s) add-comm: ⊦ n∞1 + n∞2 = n∞2 + n∞1; from specification nat-inf add-assoc: ⊦ (n∞ + n∞1) + n∞2 = n∞ + n∞1 + n∞2; from specification nat-inf ⊦ ⌜m⌝ + ∞ = ∞; (s)
| ¬ Π(lstep, rstep, lren, rren, lext, rext)(psf(n + 1), paf(n + 1), psf(2 + n)), ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n0), paf.take(n0 + 1))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(3 + n0), paf.take(2 + n0))⌝ , ∀ n. Π(lstep, rstep, lren, rren, lext, rext)(psf(n), paf(n), psf(n + 1)) ⊦ |
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic Used terms: n + 1
| fragω(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))(psf, paf), ⌜πra(lstep, rstep, lren, rren, (λ n. psf(n + 1)).take(n0 + 1), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (λ n. psf(n + 1)).take(2 + n0), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n0), paf.take(n0 + 1))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(3 + n0), paf.take(2 + n0))⌝ ⊦ |
⊦ nf.take(n + 2) = nf(0) + (λ n. nf(n + 1)).take(n + 1)
fragω(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))(psf, paf), ⌜πra(lstep, rstep, lren, rren, (λ n. psf(n + 1)).take(n0 + 1), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (λ n. psf(n + 1)).take(2 + n0), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n0), paf.take(n0 + 1))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(3 + n0), paf(0) + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic Used terms: paf, n0
| ⊦ nf.take(n + 2) = nf(0) + (λ n. nf(n + 1)).take(n + 1) |
| fragω(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))(psf, paf), ⌜πra(lstep, rstep, lren, rren, (λ n. psf(n + 1)).take(n0 + 1), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (λ n. psf(n + 1)).take(2 + n0), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n0), paf.take(n0 + 1))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(3 + n0), paf(0) + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦ |
fragω(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))(psf, paf), ⌜πra(lstep, rstep, lren, rren, (λ n. psf(n + 1)).take(n0 + 1), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (λ n. psf(n + 1)).take(2 + n0), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n0), paf.take(n0 + 1))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(3 + n0), paf(0) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦
Used simplifier rules: ⊦ a + x = a ' + x; (s)
| fragω(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))(psf, paf), ⌜πra(lstep, rstep, lren, rren, (λ n. psf(n + 1)).take(n0 + 1), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (λ n. psf(n + 1)).take(2 + n0), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n0), paf.take(n0 + 1))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf.take(3 + n0), paf(0) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦ |
⊦ nf.take(n + 3) = nf(0) + (λ n. nf(n + 1)).take(n + 2)
fragω(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))(psf, paf), ⌜πra(lstep, rstep, lren, rren, (λ n. psf(n + 1)).take(n0 + 1), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (λ n. psf(n + 1)).take(2 + n0), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n0), paf.take(n0 + 1))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf(0) + (λ n. psf(n + 1)).take(n0 + 2), paf(0) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic Used terms: psf, n0
| ⊦ nf.take(n + 3) = nf(0) + (λ n. nf(n + 1)).take(n + 2) |
| fragω(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))(psf, paf), ⌜πra(lstep, rstep, lren, rren, (λ n. psf(n + 1)).take(n0 + 1), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (λ n. psf(n + 1)).take(2 + n0), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n0), paf.take(n0 + 1))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf(0) + (λ n. psf(n + 1)).take(n0 + 2), paf(0) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦ |
fragω(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))(psf, paf), ⌜πra(lstep, rstep, lren, rren, (λ n. psf(n + 1)).take(n0 + 1), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (λ n. psf(n + 1)).take(2 + n0), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n0), paf.take(n0 + 1))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf(0) ' + (λ n. psf(n + 1)).take(n0 + 2), paf(0) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦
Used simplifier rules: ⊦ a + x = a ' + x; (s)
| fragω(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))(psf, paf), ⌜πra(lstep, rstep, lren, rren, (λ n. psf(n + 1)).take(n0 + 1), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (λ n. psf(n + 1)).take(2 + n0), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n0), paf.take(n0 + 1))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf(0) ' + (λ n. psf(n + 1)).take(n0 + 2), paf(0) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦ |
⊦ nf.take(n + 2) = nf(0) + (λ n. nf(n + 1)).take(n + 1)
fragω(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))(psf, paf), ⌜πra(lstep, rstep, lren, rren, (λ n. psf(n + 1)).take(n0 + 1), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf(0 + 1) + (λ n. psf((n + 1) + 1)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n0), paf.take(n0 + 1))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf(0) ' + (psf(0 + 1) + (λ n. psf((n + 1) + 1)).take(n0 + 1)), paf(0) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic Used terms: λ n. psf(n + 1), n0
| ⊦ nf.take(n + 2) = nf(0) + (λ n. nf(n + 1)).take(n + 1) |
| fragω(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))(psf, paf), ⌜πra(lstep, rstep, lren, rren, (λ n. psf(n + 1)).take(n0 + 1), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf(0 + 1) + (λ n. psf((n + 1) + 1)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n0), paf.take(n0 + 1))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf(0) ' + (psf(0 + 1) + (λ n. psf((n + 1) + 1)).take(n0 + 1)), paf(0) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦ |
fragω(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))(psf, paf), ⌜πra(lstep, rstep, lren, rren, (λ n. psf(n + 1)).take(n0 + 1), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf(1) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n0), paf.take(n0 + 1))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf(0) ' + psf(1) ' + (λ n. psf(2 + n)).take(n0 + 1), paf(0) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ a + x = a ' + x; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic
| fragω(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))(psf, paf), ⌜πra(lstep, rstep, lren, rren, (λ n. psf(n + 1)).take(n0 + 1), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf(1) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n0), paf.take(n0 + 1))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf(0) ' + psf(1) ' + (λ n. psf(2 + n)).take(n0 + 1), paf(0) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦ |
(ls, rs) = psf(1), fragω(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))(psf, paf), ⌜πra(lstep, rstep, lren, rren, (λ n. psf(n + 1)).take(n0 + 1), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf(1) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n0), paf.take(n0 + 1))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf(0) ' + psf(1) ' + (λ n. psf(2 + n)).take(n0 + 1), paf(0) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦
| (ls, rs) = psf(1), fragω(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))(psf, paf), ⌜πra(lstep, rstep, lren, rren, (λ n. psf(n + 1)).take(n0 + 1), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf(1) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n0), paf.take(n0 + 1))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf(0) ' + psf(1) ' + (λ n. psf(2 + n)).take(n0 + 1), paf(0) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦ |
(ls, rs) = psf(1), fragω(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))(psf, paf), ⌜πra(lstep, rstep, lren, rren, (λ n. psf(n + 1)).take(n0 + 1), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n0), paf.take(n0 + 1))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf(0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), paf(0) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦
| (ls, rs) = psf(1), fragω(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))(psf, paf), ⌜πra(lstep, rstep, lren, rren, (λ n. psf(n + 1)).take(n0 + 1), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n0), paf.take(n0 + 1))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf(0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), paf(0) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦ |
(ls, rs) = psf(1), (ls0, rs0) = psf(0), fragω(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))(psf, paf), ⌜πra(lstep, rstep, lren, rren, (λ n. psf(n + 1)).take(n0 + 1), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n0), paf.take(n0 + 1))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf(0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), paf(0) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦
| (ls, rs) = psf(1), (ls0, rs0) = psf(0), fragω(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))(psf, paf), ⌜πra(lstep, rstep, lren, rren, (λ n. psf(n + 1)).take(n0 + 1), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n0), paf.take(n0 + 1))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, psf(0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), paf(0) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦ |
(ls0, rs0) = psf(0), (ls, rs) = psf(1), fragω(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))(psf, paf), ⌜πra(lstep, rstep, lren, rren, (λ n. psf(n + 1)).take(n0 + 1), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n0), paf.take(n0 + 1))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), paf(0) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦
| (ls0, rs0) = psf(0), (ls, rs) = psf(1), fragω(Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren))(psf, paf), ⌜πra(lstep, rstep, lren, rren, (λ n. psf(n + 1)).take(n0 + 1), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n0), paf.take(n0 + 1))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), paf(0) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦ |
⊦ Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren) = IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren))
(ls, rs) = psf(1), (ls0, rs0) = psf(0), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ⌜πra(lstep, rstep, lren, rren, (λ n. psf(n + 1)).take(n0 + 1), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n0), paf.take(n0 + 1))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), paf(0) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦
Used terms: rext, rstep, rstart, lren, rren, lstart, lstep, lext
| ⊦ Π(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren) = IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)) |
| (ls, rs) = psf(1), (ls0, rs0) = psf(0), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ⌜πra(lstep, rstep, lren, rren, (λ n. psf(n + 1)).take(n0 + 1), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n0), paf.take(n0 + 1))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), paf(0) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦ |
α ≠ [] ⊦ ¬ step(σ[0], α[0], σ[1]) → (frag(IOAut(start, step, ext))(σ, α) ↔ false)
(ls0, rs0) = psf(0), (ls, rs) = psf(1), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ⌜πra(lstep, rstep, lren, rren, (λ n. psf(n + 1)).take(n0 + 1), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n0), paf.take(n0 + 1))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), paf(0) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦ ⌜paf⌝ ≠ [] ∧ ¬ Π(lstep, rstep, lren, rren, lext, rext)(⌜psf⌝ [0], ⌜paf⌝ [0], ⌜psf⌝ [1])
Used terms: Π(lext, rext, lren, rren), ⌜paf⌝ , Π(lstep, rstep, lren, rren, lext, rext), Π(lstart, rstart), ⌜psf⌝
| α ≠ [] ⊦ ¬ step(σ[0], α[0], σ[1]) → (frag(IOAut(start, step, ext))(σ, α) ↔ false) |
| (ls0, rs0) = psf(0), (ls, rs) = psf(1), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ⌜πra(lstep, rstep, lren, rren, (λ n. psf(n + 1)).take(n0 + 1), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n0), paf.take(n0 + 1))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), paf(0) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦ ⌜paf⌝ ≠ [] ∧ ¬ Π(lstep, rstep, lren, rren, lext, rext)(⌜psf⌝ [0], ⌜paf⌝ [0], ⌜psf⌝ [1]) |
(ls, rs) = psf(1), (ls0, rs0) = psf(0), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), Π(lstep, rstep, lren, rren, lext, rext)((ls0, rs0), paf(0), (ls, rs)), ⌜πra(lstep, rstep, lren, rren, (λ n. psf(n + 1)).take(n0 + 1), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n0), paf.take(n0 + 1))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), paf(0) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦
Used simplifier rules: ⊦ ⌜nf⌝ [n] = nf(n); (s) ⊦ [] ≠ ⌜nf⌝ ; (s)
| (ls, rs) = psf(1), (ls0, rs0) = psf(0), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), Π(lstep, rstep, lren, rren, lext, rext)((ls0, rs0), paf(0), (ls, rs)), ⌜πra(lstep, rstep, lren, rren, (λ n. psf(n + 1)).take(n0 + 1), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n0), paf.take(n0 + 1))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), paf(0) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦ |
⊦ nf.take(n + 1) = nf(0) + (λ n. nf(n + 1)).take(n)
(ls0, rs0) = psf(0), (ls, rs) = psf(1), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), Π(lstep, rstep, lren, rren, lext, rext)((ls0, rs0), paf(0), (ls, rs)), ⌜πra(lstep, rstep, lren, rren, (λ n. psf(n + 1)).take(n0 + 1), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n0), paf(0) + (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), paf(0) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦
Used terms: paf, n0
| ⊦ nf.take(n + 1) = nf(0) + (λ n. nf(n + 1)).take(n) |
| (ls0, rs0) = psf(0), (ls, rs) = psf(1), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), Π(lstep, rstep, lren, rren, lext, rext)((ls0, rs0), paf(0), (ls, rs)), ⌜πra(lstep, rstep, lren, rren, (λ n. psf(n + 1)).take(n0 + 1), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n0), paf(0) + (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), paf(0) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦ |
(ls, rs) = psf(1), (ls0, rs0) = psf(0), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), Π(lstep, rstep, lren, rren, lext, rext)((ls0, rs0), paf(0), (ls, rs)), ⌜πra(lstep, rstep, lren, rren, (λ n. psf(n + 1)).take(n0 + 1), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n0), paf(0) ' + (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), paf(0) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦
Used simplifier rules: ⊦ a + x = a ' + x; (s)
| (ls, rs) = psf(1), (ls0, rs0) = psf(0), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), Π(lstep, rstep, lren, rren, lext, rext)((ls0, rs0), paf(0), (ls, rs)), ⌜πra(lstep, rstep, lren, rren, (λ n. psf(n + 1)).take(n0 + 1), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ ⌜πra(lstep, rstep, lren, rren, psf.take(2 + n0), paf(0) ' + (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), paf(0) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦ |
⊦ nf.take(n + 2) = nf(0) + (λ n. nf(n + 1)).take(n + 1)
(ls0, rs0) = psf(0), (ls, rs) = psf(1), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), Π(lstep, rstep, lren, rren, lext, rext)((ls0, rs0), paf(0), (ls, rs)), ⌜πra(lstep, rstep, lren, rren, (λ n. psf(n + 1)).take(n0 + 1), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ ⌜πra(lstep, rstep, lren, rren, psf(0) + (λ n. psf(n + 1)).take(n0 + 1), paf(0) ' + (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), paf(0) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic Used terms: psf, n0
| ⊦ nf.take(n + 2) = nf(0) + (λ n. nf(n + 1)).take(n + 1) |
| (ls0, rs0) = psf(0), (ls, rs) = psf(1), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), Π(lstep, rstep, lren, rren, lext, rext)((ls0, rs0), paf(0), (ls, rs)), ⌜πra(lstep, rstep, lren, rren, (λ n. psf(n + 1)).take(n0 + 1), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ ⌜πra(lstep, rstep, lren, rren, psf(0) + (λ n. psf(n + 1)).take(n0 + 1), paf(0) ' + (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), paf(0) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦ |
(ls, rs) = psf(1), (ls0, rs0) = psf(0), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), Π(lstep, rstep, lren, rren, lext, rext)((ls0, rs0), paf(0), (ls, rs)), ⌜πra(lstep, rstep, lren, rren, (λ n. psf(n + 1)).take(n0 + 1), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (λ n. psf(n + 1)).take(n0 + 1), paf(0) ' + (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), paf(0) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦
Used simplifier rules: ⊦ a + x = a ' + x; (s)
| (ls, rs) = psf(1), (ls0, rs0) = psf(0), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), Π(lstep, rstep, lren, rren, lext, rext)((ls0, rs0), paf(0), (ls, rs)), ⌜πra(lstep, rstep, lren, rren, (λ n. psf(n + 1)).take(n0 + 1), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (λ n. psf(n + 1)).take(n0 + 1), paf(0) ' + (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), paf(0) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦ |
⊦ nf.take(n + 1) = nf(0) + (λ n. nf(n + 1)).take(n)
(ls0, rs0) = psf(0), (ls, rs) = psf(1), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), Π(lstep, rstep, lren, rren, lext, rext)((ls0, rs0), paf(0), (ls, rs)), ⌜πra(lstep, rstep, lren, rren, psf(0 + 1) + (λ n. psf((n + 1) + 1)).take(n0), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (psf(0 + 1) + (λ n. psf((n + 1) + 1)).take(n0)), paf(0) ' + (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), paf(0) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦
Used terms: λ n. psf(n + 1), n0
| ⊦ nf.take(n + 1) = nf(0) + (λ n. nf(n + 1)).take(n) |
| (ls0, rs0) = psf(0), (ls, rs) = psf(1), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), Π(lstep, rstep, lren, rren, lext, rext)((ls0, rs0), paf(0), (ls, rs)), ⌜πra(lstep, rstep, lren, rren, psf(0 + 1) + (λ n. psf((n + 1) + 1)).take(n0), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (psf(0 + 1) + (λ n. psf((n + 1) + 1)).take(n0)), paf(0) ' + (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), paf(0) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦ |
(ls, rs) = psf(1), (ls0, rs0) = psf(0), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), Π(lstep, rstep, lren, rren, lext, rext)((ls0, rs0), paf(0), (ls, rs)), ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0), paf(0) ' + (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), paf(0) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ a + x = a ' + x; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic
| (ls, rs) = psf(1), (ls0, rs0) = psf(0), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), Π(lstep, rstep, lren, rren, lext, rext)((ls0, rs0), paf(0), (ls, rs)), ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0), paf(0) ' + (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), paf(0) ' + (λ n. paf(n + 1)).take(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))
(ls0, rs0) = psf(0), (ls, rs) = psf(1), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0), paf(0) ' + (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), paf(0) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ , rs0 = rs ∧ (∃ la. lstep(ls0, la, ls) ∧ paf(0) = lren(la) ∧ ¬ cod(rren)(paf(0))) ∨ ls0 = ls ∧ (∃ ra. rstep(rs0, ra, rs) ∧ paf(0) = rren(ra) ∧ ¬ cod(lren)(paf(0))) ∨ (∃ la, ra. lstep(ls0, la, ls) ∧ lext(la) ≠ None ∧ paf(0) = lren(la) ∧ rstep(rs0, ra, rs) ∧ rext(ra) ≠ None ∧ paf(0) = rren(ra)) ⊦
Used terms: rext, paf(0), rs0, rstep, lren, rren, rs, lstep, lext, ls0, ls
| ⊦ Π(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)) |
| (ls0, rs0) = psf(0), (ls, rs) = psf(1), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0), paf(0) ' + (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), paf(0) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ , rs0 = rs ∧ (∃ la. lstep(ls0, la, ls) ∧ paf(0) = lren(la) ∧ ¬ cod(rren)(paf(0))) ∨ ls0 = ls ∧ (∃ ra. rstep(rs0, ra, rs) ∧ paf(0) = rren(ra) ∧ ¬ cod(lren)(paf(0))) ∨ (∃ la, ra. lstep(ls0, la, ls) ∧ lext(la) ≠ None ∧ paf(0) = lren(la) ∧ rstep(rs0, ra, rs) ∧ rext(ra) ≠ None ∧ paf(0) = rren(ra)) ⊦ |
(ls, rs) = psf(1), (ls0, rs0) = psf(0), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0), paf(0) ' + (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), paf(0) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ , rs0 = rs ∧ lstep(ls0, la, ls) ∧ paf(0) = lren(la) ∧ ¬ cod(rren)(paf(0)) ∨ ls0 = ls ∧ rstep(rs0, ra, rs) ∧ paf(0) = rren(ra) ∧ ¬ cod(lren)(paf(0)) ∨ lstep(ls0, la0, ls) ∧ lext(la0) ≠ None ∧ paf(0) = lren(la0) ∧ rstep(rs0, ra0, rs) ∧ rext(ra0) ≠ None ∧ paf(0) = rren(ra0) ⊦
| (ls, rs) = psf(1), (ls0, rs0) = psf(0), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0), paf(0) ' + (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), paf(0) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ , rs0 = rs ∧ lstep(ls0, la, ls) ∧ paf(0) = lren(la) ∧ ¬ cod(rren)(paf(0)) ∨ ls0 = ls ∧ rstep(rs0, ra, rs) ∧ paf(0) = rren(ra) ∧ ¬ cod(lren)(paf(0)) ∨ lstep(ls0, la0, ls) ∧ lext(la0) ≠ None ∧ paf(0) = lren(la0) ∧ rstep(rs0, ra0, rs) ∧ rext(ra0) ≠ None ∧ paf(0) = rren(ra0) ⊦ |
(ls0, rs0) = psf(0), (ls, rs) = psf(1), paf(0) = lren(la), rs0 = rs, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), lstep(ls0, la, ls), ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ cod(rren)(paf(0)), ¬ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0), paf(0) ' + (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), paf(0) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦
(ls0, rs0) = psf(0), (ls, rs) = psf(1), ls0 = ls, paf(0) = rren(ra), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), rstep(rs0, ra, rs), ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ cod(lren)(paf(0)), ¬ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0), paf(0) ' + (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), paf(0) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦
(ls0, rs0) = psf(0), (ls, rs) = psf(1), paf(0) = lren(la0), paf(0) = rren(ra0), lext(la0) ≠ None, rext(ra0) ≠ None, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), lstep(ls0, la0, ls), rstep(rs0, ra0, rs), ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0), paf(0) ' + (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), paf(0) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦
| (ls0, rs0) = psf(0), (ls, rs) = psf(1), paf(0) = lren(la), rs0 = rs, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), lstep(ls0, la, ls), ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ cod(rren)(paf(0)), ¬ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0), paf(0) ' + (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), paf(0) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦ |
(ls, rs) = psf(1), (ls0, rs) = psf(0), paf(0) = lren(la), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), lstep(ls0, la, ls), ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ cod(rren)(lren(la)), ¬ ⌜πra(lstep, rstep, lren, rren, (ls0, rs) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0), lren(la) ' + (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls0, rs) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), lren(la) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦
| (ls, rs) = psf(1), (ls0, rs) = psf(0), paf(0) = lren(la), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), lstep(ls0, la, ls), ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ cod(rren)(lren(la)), ¬ ⌜πra(lstep, rstep, lren, rren, (ls0, rs) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0), lren(la) ' + (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls0, rs) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), lren(la) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦ |
⊦ # 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)
# (λ n. psf(2 + n)).take(n0) = # (λ n. paf(n + 1)).take(n0), (ls0, rs) = psf(0), (ls, rs) = psf(1), paf(0) = lren(la), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), lstep(ls0, la, ls), ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ cod(rren)(lren(la)), ¬ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls0, rs) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), lren(la) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦
Used simplifier rules: ⊦ # nf.take(n) = n; (s) Used terms: (λ n. psf(2 + n)).take(n0), rs, (λ n. paf(n + 1)).take(n0), rstep, lren, rren, la, lstep, ls0, ls
| ⊦ # 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) |
| # (λ n. psf(2 + n)).take(n0) = # (λ n. paf(n + 1)).take(n0), (ls0, rs) = psf(0), (ls, rs) = psf(1), paf(0) = lren(la), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), lstep(ls0, la, ls), ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ cod(rren)(lren(la)), ¬ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls0, rs) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), lren(la) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦ |
(ls, rs) = psf(1), (ls0, rs) = psf(0), paf(0) = lren(la), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), lstep(ls0, la, ls), ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ cod(rren)(lren(la)), ¬ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls0, rs) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), lren(la) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦
Used simplifier rules: ⊦ # nf.take(n) = n; (s)
| (ls, rs) = psf(1), (ls0, rs) = psf(0), paf(0) = lren(la), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), lstep(ls0, la, ls), ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ cod(rren)(lren(la)), ¬ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls0, rs) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), lren(la) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦ |
⊦ # 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)
Used simplifier rules: ⊦ # nf.take(n) = n; (s) ⊦ m + n = m + n0 ↔ n = n0; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: (λ n. psf(2 + n)).take(n0 + 1), rs, (λ n. paf(n + 1)).take(n0 + 1), rstep, lren, rren, la, lstep, ls0, ls
| ⊦ # 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) |
| (ls0, rs0) = psf(0), (ls, rs) = psf(1), ls0 = ls, paf(0) = rren(ra), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), rstep(rs0, ra, rs), ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ cod(lren)(paf(0)), ¬ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0), paf(0) ' + (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), paf(0) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦ |
(ls, rs) = psf(1), (ls, rs0) = psf(0), paf(0) = rren(ra), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), rstep(rs0, ra, rs), ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ cod(lren)(rren(ra)), ¬ ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0), rren(ra) ' + (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), rren(ra) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦
| (ls, rs) = psf(1), (ls, rs0) = psf(0), paf(0) = rren(ra), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), rstep(rs0, ra, rs), ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ cod(lren)(rren(ra)), ¬ ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0), rren(ra) ' + (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), rren(ra) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦ |
⊦ # 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)
# (λ n. psf(2 + n)).take(n0) = # (λ n. paf(n + 1)).take(n0), (ls, rs0) = psf(0), (ls, rs) = psf(1), paf(0) = rren(ra), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), rstep(rs0, ra, rs), ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ cod(lren)(rren(ra)), ¬ ⌜ra + πra(lstep, rstep, lren, rren, (ls, rs) + (λ n. psf(2 + n)).take(n0), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), rren(ra) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦
Used simplifier rules: ⊦ # nf.take(n) = n; (s) Used terms: (λ n. psf(2 + n)).take(n0), rs0, ra, (λ n. paf(n + 1)).take(n0), rstep, lren, rren, rs, lstep, ls
| ⊦ # 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) |
| # (λ n. psf(2 + n)).take(n0) = # (λ n. paf(n + 1)).take(n0), (ls, rs0) = psf(0), (ls, rs) = psf(1), paf(0) = rren(ra), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), rstep(rs0, ra, rs), ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ cod(lren)(rren(ra)), ¬ ⌜ra + πra(lstep, rstep, lren, rren, (ls, rs) + (λ n. psf(2 + n)).take(n0), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), rren(ra) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦ |
(ls, rs) = psf(1), (ls, rs0) = psf(0), paf(0) = rren(ra), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), rstep(rs0, ra, rs), ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ cod(lren)(rren(ra)), ¬ ⌜ra '⌝ + ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), rren(ra) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ⌜x + y⌝ = ⌜x⌝ + ⌜y⌝ ; (s) ⊦ a + x = a ' + x; (s) ⊦ # nf.take(n) = n; (s)
| (ls, rs) = psf(1), (ls, rs0) = psf(0), paf(0) = rren(ra), fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), rstep(rs0, ra, rs), ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ cod(lren)(rren(ra)), ¬ ⌜ra '⌝ + ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), rren(ra) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦ |
⊦ # 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)
Used simplifier rules: ⊦ # nf.take(n) = n; (s) ⊦ m + n = m + n0 ↔ n = n0; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ a + x = a ' + x; (s) ⊦ ⌜x + y⌝ = ⌜x⌝ + ⌜y⌝ ; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ⌜x⌝ + σ1 ⊑ ⌜x⌝ + σ2 ↔ σ1 ⊑ σ2; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream Used terms: (λ n. psf(2 + n)).take(n0 + 1), rs0, ra, (λ n. paf(n + 1)).take(n0 + 1), rstep, lren, rren, rs, lstep, ls
| ⊦ # 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) |
| (ls0, rs0) = psf(0), (ls, rs) = psf(1), paf(0) = lren(la0), paf(0) = rren(ra0), lext(la0) ≠ None, rext(ra0) ≠ None, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), lstep(ls0, la0, ls), rstep(rs0, ra0, rs), ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0), paf(0) ' + (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), paf(0) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦ |
(ls, rs) = psf(1), (ls0, rs0) = psf(0), lren(la0) = rren(ra0), paf(0) = rren(ra0), lext(la0) ≠ None, rext(ra0) ≠ None, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), lstep(ls0, la0, ls), rstep(rs0, ra0, rs), ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0), rren(ra0) ' + (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), rren(ra0) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦
| (ls, rs) = psf(1), (ls0, rs0) = psf(0), lren(la0) = rren(ra0), paf(0) = rren(ra0), lext(la0) ≠ None, rext(ra0) ≠ None, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), lstep(ls0, la0, ls), rstep(rs0, ra0, rs), ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0), rren(ra0) ' + (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), rren(ra0) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦ |
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)
# (λ n. psf(2 + n)).take(n0) = # (λ n. paf(n + 1)).take(n0), (ls0, rs0) = psf(0), (ls, rs) = psf(1), paf(0) = rren(ra0), rren(ra0) = lren(la0), lext(la0) ≠ None, rext(ra0) ≠ None, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), lstep(ls0, la0, ls), rstep(rs0, ra0, rs), ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ ⌜ra0 + πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), rren(ra0) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦
Used simplifier rules: ⊦ # nf.take(n) = n; (s) Used terms: rren(ra0), (λ n. psf(2 + n)).take(n0), rs0, ra0, (λ n. paf(n + 1)).take(n0), rstep, lren, rren, la0, rs, lstep, ls0, ls
| 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) |
| # (λ n. psf(2 + n)).take(n0) = # (λ n. paf(n + 1)).take(n0), (ls0, rs0) = psf(0), (ls, rs) = psf(1), paf(0) = rren(ra0), rren(ra0) = lren(la0), lext(la0) ≠ None, rext(ra0) ≠ None, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), lstep(ls0, la0, ls), rstep(rs0, ra0, rs), ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ ⌜ra0 + πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), rren(ra0) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦ |
(ls, rs) = psf(1), (ls0, rs0) = psf(0), paf(0) = lren(la0), rren(ra0) = lren(la0), lext(la0) ≠ None, rext(ra0) ≠ None, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), lstep(ls0, la0, ls), rstep(rs0, ra0, rs), ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ ⌜ra0 '⌝ + ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), lren(la0) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ⌜x + y⌝ = ⌜x⌝ + ⌜y⌝ ; (s) ⊦ a + x = a ' + x; (s) ⊦ # nf.take(n) = n; (s)
| (ls, rs) = psf(1), (ls0, rs0) = psf(0), paf(0) = lren(la0), rren(ra0) = lren(la0), lext(la0) ≠ None, rext(ra0) ≠ None, fragω(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Π(lext, rext, lren, rren)))(psf, paf), lstep(ls0, la0, ls), rstep(rs0, ra0, rs), ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), (λ n. paf(n + 1)).take(n0 + 1))⌝ , ¬ ⌜ra0 '⌝ + ⌜πra(lstep, rstep, lren, rren, (ls, rs) ' + (λ n. psf(2 + n)).take(n0), (λ n. paf(n + 1)).take(n0))⌝ ⊑ ⌜πra(lstep, rstep, lren, rren, (ls0, rs0) ' + (ls, rs) ' + (λ n. psf(2 + n)).take(n0 + 1), lren(la0) ' + (λ n. paf(n + 1)).take(n0 + 1))⌝ ⊦ |
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)
Used simplifier rules: ⊦ # nf.take(n) = n; (s) ⊦ m + n = m + n0 ↔ n = n0; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ a + x = a ' + x; (s) ⊦ ⌜x + y⌝ = ⌜x⌝ + ⌜y⌝ ; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ⌜x⌝ + σ1 ⊑ ⌜x⌝ + σ2 ↔ σ1 ⊑ σ2; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream Used terms: lren(la0), (λ n. psf(2 + n)).take(n0 + 1), rs0, ra0, (λ n. paf(n + 1)).take(n0 + 1), rstep, lren, rren, la0, rs, lstep, ls0, ls
| 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) |
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.