| ¬ finp(ext !(⌜af⌝ )) ⊦ ext !(⌜af⌝ ) = ext !(⌜af0⌝ ) ↔ (∀ n. ∃ m. ext !(af.take(n)) = ext !(af0.take(m))) |
⌜ef⌝ = ext !(⌜af⌝ ) ⊦ ⌜ef⌝ = ext !(⌜af0⌝ ) ↔ (∀ n. ∃ m. ext !(af.take(n)) = ext !(af0.take(m)))
Used simplifier rules: ⊦ finp(σ) ↔ ¬(∃ nf. ⌜nf⌝ = σ); (ss)
| ⌜ef⌝ = ext !(⌜af⌝ ) ⊦ ⌜ef⌝ = ext !(⌜af0⌝ ) ↔ (∀ n. ∃ m. ext !(af.take(n)) = ext !(af0.take(m))) |
⌜ef⌝ = ext !(⌜af⌝ ), ⌜ef⌝ = ext !(⌜af0⌝ ) ⊦ ∀ n. ∃ m. ext !(af.take(n)) = ext !(af0.take(m))
⌜ef⌝ = ext !(⌜af⌝ ), ⌜ef⌝ ≠ ext !(⌜af0⌝ ), ∀ n. ∃ m. ext !(af.take(n)) = ext !(af0.take(m)) ⊦
| ⌜ef⌝ = ext !(⌜af⌝ ), ⌜ef⌝ = ext !(⌜af0⌝ ) ⊦ ∀ n. ∃ m. ext !(af.take(n)) = ext !(af0.take(m)) |
⌜ef⌝ = ext !(⌜af0⌝ ), ⌜ef⌝ = ext !(⌜af⌝ ) ⊦ ∃ m. ext !(af.take(n)) = ext !(af0.take(m))
| ⌜ef⌝ = ext !(⌜af0⌝ ), ⌜ef⌝ = ext !(⌜af⌝ ) ⊦ ∃ m. ext !(af.take(n)) = ext !(af0.take(m)) |
⊦ ¬ # α < ⌜n⌝ → (∃ m. ¬ # ext !(α) < ⌜m⌝ ∧ ext !(⌜α.take(n)⌝ ) = ⌜ext !(α).take(m)⌝ )
⌜ef⌝ = ext !(⌜af⌝ ), ⌜ef⌝ = ext !(⌜af0⌝ ), ¬ # ⌜af⌝ < ⌜n⌝ → (∃ m. ¬ # ext !(⌜af⌝ ) < ⌜m⌝ ∧ ext !(⌜⌜af⌝ .take(n)⌝ ) = ⌜ext !(⌜af⌝ ).take(m)⌝ ) ⊦ ∃ m. ext !(af.take(n)) = ext !(af0.take(m))
Used terms: ⌜af⌝ , n, ext
| ⊦ ¬ # α < ⌜n⌝ → (∃ m. ¬ # ext !(α) < ⌜m⌝ ∧ ext !(⌜α.take(n)⌝ ) = ⌜ext !(α).take(m)⌝ ) |
| ⌜ef⌝ = ext !(⌜af⌝ ), ⌜ef⌝ = ext !(⌜af0⌝ ), ¬ # ⌜af⌝ < ⌜n⌝ → (∃ m. ¬ # ext !(⌜af⌝ ) < ⌜m⌝ ∧ ext !(⌜⌜af⌝ .take(n)⌝ ) = ⌜ext !(⌜af⌝ ).take(m)⌝ ) ⊦ ∃ m. ext !(af.take(n)) = ext !(af0.take(m)) |
ext !(af.take(n)) = ef.take(m), ⌜ef⌝ = ext !(⌜af⌝ ), ⌜ef⌝ = ext !(⌜af0⌝ ) ⊦ ∃ m. ext !(af.take(n)) = ext !(af0.take(m))
Used simplifier rules: finremtau-def: ⊦ ext !(⌜al⌝ ) = ⌜ext !(al)⌝ ; ⊦ ¬ ∞ < n∞; (s) ⊦ # ⌜nf⌝ = ∞; (s) ⊦ ⌜nf⌝ .take(n) = nf.take(n); (s) ⊦ ⌜x⌝ = ⌜x0⌝ ↔ x = x0; (s)
| ext !(af.take(n)) = ef.take(m), ⌜ef⌝ = ext !(⌜af⌝ ), ⌜ef⌝ = ext !(⌜af0⌝ ) ⊦ ∃ m. ext !(af.take(n)) = ext !(af0.take(m)) |
⊦ ¬ # ext !(α) < ⌜n⌝ → (∃ m. ¬ # α < ⌜m⌝ ∧ ext !(α).take(n) = ext !(α.take(m)))
ext !(af.take(n)) = ef.take(m), ⌜ef⌝ = ext !(⌜af0⌝ ), ⌜ef⌝ = ext !(⌜af⌝ ), ¬ # ext !(⌜af0⌝ ) < ⌜m⌝ → (∃ m0. ¬ # ⌜af0⌝ < ⌜m0⌝ ∧ ext !(⌜af0⌝ ).take(m) = ext !(⌜af0⌝ .take(m0))) ⊦ ∃ m. ext !(af.take(n)) = ext !(af0.take(m))
Used terms: ext, ⌜af0⌝ , m
| ⊦ ¬ # ext !(α) < ⌜n⌝ → (∃ m. ¬ # α < ⌜m⌝ ∧ ext !(α).take(n) = ext !(α.take(m))) |
| ext !(af.take(n)) = ef.take(m), ⌜ef⌝ = ext !(⌜af0⌝ ), ⌜ef⌝ = ext !(⌜af⌝ ), ¬ # ext !(⌜af0⌝ ) < ⌜m⌝ → (∃ m0. ¬ # ⌜af0⌝ < ⌜m0⌝ ∧ ext !(⌜af0⌝ ).take(m) = ext !(⌜af0⌝ .take(m0))) ⊦ ∃ m. ext !(af.take(n)) = ext !(af0.take(m)) |
ext !(af.take(n)) = ef.take(m), ef.take(m) = ext !(af0.take(m0)), ⌜ef⌝ = ext !(⌜af0⌝ ), ⌜ef⌝ = ext !(⌜af⌝ ) ⊦ ∃ m. ext !(af.take(n)) = ext !(af0.take(m))
Used simplifier rules: ⊦ ⌜nf⌝ .take(n) = nf.take(n); (s) ⊦ ¬ ∞ < n∞; (s) ⊦ # ⌜nf⌝ = ∞; (s)
| ext !(af.take(n)) = ef.take(m), ef.take(m) = ext !(af0.take(m0)), ⌜ef⌝ = ext !(⌜af0⌝ ), ⌜ef⌝ = ext !(⌜af⌝ ) ⊦ ∃ m. ext !(af.take(n)) = ext !(af0.take(m)) |
Used terms: m0
| ⌜ef⌝ = ext !(⌜af⌝ ), ⌜ef⌝ ≠ ext !(⌜af0⌝ ), ∀ n. ∃ m. ext !(af.take(n)) = ext !(af0.take(m)) ⊦ |
⊦ σ0 = σ1 ↔ # σ0 = # σ1 ∧ (∀ n. ¬ # σ0 < ⌜n⌝ → σ0.take(n) = σ1.take(n))
⌜ef⌝ = ext !(⌜af⌝ ), ∀ n. ∃ m. ext !(af.take(n)) = ext !(af0.take(m)), # ⌜ef⌝ ≠ # ext !(⌜af0⌝ ) ∨ (∃ n. ¬(¬ # ⌜ef⌝ < ⌜n⌝ → ⌜ef⌝ .take(n) = ext !(⌜af0⌝ ).take(n))) ⊦
Used terms: ⌜ef⌝ , ext !(⌜af0⌝ )
| ⊦ σ0 = σ1 ↔ # σ0 = # σ1 ∧ (∀ n. ¬ # σ0 < ⌜n⌝ → σ0.take(n) = σ1.take(n)) |
| ⌜ef⌝ = ext !(⌜af⌝ ), ∀ n. ∃ m. ext !(af.take(n)) = ext !(af0.take(m)), # ⌜ef⌝ ≠ # ext !(⌜af0⌝ ) ∨ (∃ n. ¬(¬ # ⌜ef⌝ < ⌜n⌝ → ⌜ef⌝ .take(n) = ext !(⌜af0⌝ ).take(n))) ⊦ |
⌜ef⌝ = ext !(⌜af⌝ ), ∀ n. ∃ m. ext !(af.take(n)) = ext !(af0.take(m)), ∞ ≠ # ext !(⌜af0⌝ ) ∨ ef.take(n) ≠ ext !(⌜af0⌝ ).take(n) ⊦
Used simplifier rules: ⊦ ⌜nf⌝ .take(n) = nf.take(n); (s) ⊦ ¬ ∞ < n∞; (s) ⊦ # ⌜nf⌝ = ∞; (s)
| ⌜ef⌝ = ext !(⌜af⌝ ), ∀ n. ∃ m. ext !(af.take(n)) = ext !(af0.take(m)), ∞ ≠ # ext !(⌜af0⌝ ) ∨ ef.take(n) ≠ ext !(⌜af0⌝ ).take(n) ⊦ |
⌜ef⌝ = ext !(⌜af⌝ ), ∞ ≠ # ext !(⌜af0⌝ ), ∀ n. ∃ m. ext !(af.take(n)) = ext !(af0.take(m)), ∞ ≠ # ext !(⌜af0⌝ ) ∨ ef.take(n) ≠ ext !(⌜af0⌝ ).take(n) ⊦
∞ = # ext !(⌜af0⌝ ), ⌜ef⌝ = ext !(⌜af⌝ ), ∀ n. ∃ m. ext !(af.take(n)) = ext !(af0.take(m)), ∞ ≠ # ext !(⌜af0⌝ ) ∨ ef.take(n) ≠ ext !(⌜af0⌝ ).take(n) ⊦
Used formulas: ∞ ≠ # ext !(⌜af0⌝ )
| ⌜ef⌝ = ext !(⌜af⌝ ), ∞ ≠ # ext !(⌜af0⌝ ), ∀ n. ∃ m. ext !(af.take(n)) = ext !(af0.take(m)), ∞ ≠ # ext !(⌜af0⌝ ) ∨ ef.take(n) ≠ ext !(⌜af0⌝ ).take(n) ⊦ |
⌜ef⌝ = ext !(⌜af⌝ ), ∞ ≠ # ext !(⌜af0⌝ ), ∀ n. ∃ m. ext !(af.take(n)) = ext !(af0.take(m)) ⊦
| ⌜ef⌝ = ext !(⌜af⌝ ), ∞ ≠ # ext !(⌜af0⌝ ), ∀ n. ∃ m. ext !(af.take(n)) = ext !(af0.take(m)) ⊦ |
⊦ n∞ = ∞ ↔ ¬(∃ n. n∞ = ⌜n⌝ )
⌜ef⌝ = ext !(⌜af⌝ ), ∀ n. ∃ m. ext !(af.take(n)) = ext !(af0.take(m)), ∃ n. # ext !(⌜af0⌝ ) = ⌜n⌝ ⊦
Used terms: # ext !(⌜af0⌝ )
| ⊦ n∞ = ∞ ↔ ¬(∃ n. n∞ = ⌜n⌝ ) |
| ⌜ef⌝ = ext !(⌜af⌝ ), ∀ n. ∃ m. ext !(af.take(n)) = ext !(af0.take(m)), ∃ n. # ext !(⌜af0⌝ ) = ⌜n⌝ ⊦ |
# ext !(⌜af0⌝ ) = ⌜n⌝ , ⌜ef⌝ = ext !(⌜af⌝ ), ∀ n. ∃ m. ext !(af.take(n)) = ext !(af0.take(m)) ⊦
| # ext !(⌜af0⌝ ) = ⌜n⌝ , ⌜ef⌝ = ext !(⌜af⌝ ), ∀ n. ∃ m. ext !(af.take(n)) = ext !(af0.take(m)) ⊦ |
⊦ ¬ # ext !(α) < ⌜n⌝ → (∃ m. ¬ # α < ⌜m⌝ ∧ ext !(α).take(n) = ext !(α.take(m)))
# ext !(⌜af0⌝ ) = ⌜n⌝ , ⌜ef⌝ = ext !(⌜af⌝ ), ¬ # ext !(⌜af⌝ ) < ⌜n + 1⌝ → (∃ m. ¬ # ⌜af⌝ < ⌜m⌝ ∧ ext !(⌜af⌝ ).take(n + 1) = ext !(⌜af⌝ .take(m))), ∀ n. ∃ m. ext !(af.take(n)) = ext !(af0.take(m)) ⊦
Used terms: ext, ⌜af⌝ , n + 1
| ⊦ ¬ # ext !(α) < ⌜n⌝ → (∃ m. ¬ # α < ⌜m⌝ ∧ ext !(α).take(n) = ext !(α.take(m))) |
| # ext !(⌜af0⌝ ) = ⌜n⌝ , ⌜ef⌝ = ext !(⌜af⌝ ), ¬ # ext !(⌜af⌝ ) < ⌜n + 1⌝ → (∃ m. ¬ # ⌜af⌝ < ⌜m⌝ ∧ ext !(⌜af⌝ ).take(n + 1) = ext !(⌜af⌝ .take(m))), ∀ n. ∃ m. ext !(af.take(n)) = ext !(af0.take(m)) ⊦ |
# ext !(⌜af0⌝ ) = ⌜n⌝ , ef.take(n + 1) = ext !(af.take(m)), ⌜ef⌝ = ext !(⌜af⌝ ), ∀ n. ∃ m. ext !(af.take(n)) = ext !(af0.take(m)) ⊦
Used simplifier rules: ⊦ ⌜nf⌝ .take(n) = nf.take(n); (s) ⊦ ⌜m⌝ < ∞; (s) ⊦ # ⌜nf⌝ = ∞; (s) ⊦ ¬ ∞ < n∞; (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 ⊦ # σ < ⌜n⌝ + ⌜1⌝ ↔ ¬ ⌜n⌝ < # σ; (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ ⌜m + n⌝ = ⌜m⌝ + ⌜n⌝ ; (s)
| # ext !(⌜af0⌝ ) = ⌜n⌝ , ef.take(n + 1) = ext !(af.take(m)), ⌜ef⌝ = ext !(⌜af⌝ ), ∀ n. ∃ m. ext !(af.take(n)) = ext !(af0.take(m)) ⊦ |
# ext !(⌜af0⌝ ) = ⌜n⌝ , ef.take(n + 1) = ext !(af.take(m)), ⌜ef⌝ = ext !(⌜af⌝ ), ∀ n. ∃ m. ext !(af.take(n)) = ext !(af0.take(m)), ∃ m0. ext !(af.take(m)) = ext !(af0.take(m0)) ⊦
Used terms: m
| # ext !(⌜af0⌝ ) = ⌜n⌝ , ef.take(n + 1) = ext !(af.take(m)), ⌜ef⌝ = ext !(⌜af⌝ ), ∀ n. ∃ m. ext !(af.take(n)) = ext !(af0.take(m)), ∃ m0. ext !(af.take(m)) = ext !(af0.take(m0)) ⊦ |
# ext !(⌜af0⌝ ) = ⌜n⌝ , ef.take(n + 1) = ext !(af0.take(m0)), ef.take(n + 1) = ext !(af.take(m)), ⌜ef⌝ = ext !(⌜af⌝ ), ∀ n. ∃ m. ext !(af.take(n)) = ext !(af0.take(m)) ⊦
| # ext !(⌜af0⌝ ) = ⌜n⌝ , ef.take(n + 1) = ext !(af0.take(m0)), ef.take(n + 1) = ext !(af.take(m)), ⌜ef⌝ = ext !(⌜af⌝ ), ∀ n. ∃ m. ext !(af.take(n)) = ext !(af0.take(m)) ⊦ |
⊦ σ0 = σ1 ↔ # σ0 = # σ1 ∧ (∀ n. ⌜n⌝ < # σ0 → σ0[n] = σ1[n])
# ⌜ef⌝ = # ext !(⌜af⌝ ), # ext !(⌜af0⌝ ) = ⌜n⌝ , ef.take(n + 1) = ext !(af.take(m)), ef.take(n + 1) = ext !(af0.take(m0)), ∀ n. ∃ m. ext !(af.take(n)) = ext !(af0.take(m)), ∀ n. ⌜n⌝ < # ⌜ef⌝ → ⌜ef⌝ [n] = ext !(⌜af⌝ )[n] ⊦
Used terms: ⌜ef⌝ , ext !(⌜af⌝ )
| ⊦ σ0 = σ1 ↔ # σ0 = # σ1 ∧ (∀ n. ⌜n⌝ < # σ0 → σ0[n] = σ1[n]) |
| # ⌜ef⌝ = # ext !(⌜af⌝ ), # ext !(⌜af0⌝ ) = ⌜n⌝ , ef.take(n + 1) = ext !(af.take(m)), ef.take(n + 1) = ext !(af0.take(m0)), ∀ n. ∃ m. ext !(af.take(n)) = ext !(af0.take(m)), ∀ n. ⌜n⌝ < # ⌜ef⌝ → ⌜ef⌝ [n] = ext !(⌜af⌝ )[n] ⊦ |
# ext !(⌜af0⌝ ) = ⌜n⌝ , ef.take(n + 1) = ext !(af0.take(m0)), ef.take(n + 1) = ext !(af.take(m)), ∞ = # ext !(⌜af⌝ ), ∀ n. ∃ m. ext !(af.take(n)) = ext !(af0.take(m)), ∀ n0. ef(n0) = ext !(⌜af⌝ )[n0] ⊦
Used simplifier rules: ⊦ ⌜nf⌝ [n] = nf(n); (s) ⊦ ⌜m⌝ < ∞; (s) ⊦ # ⌜nf⌝ = ∞; (s)
| # ext !(⌜af0⌝ ) = ⌜n⌝ , ef.take(n + 1) = ext !(af0.take(m0)), ef.take(n + 1) = ext !(af.take(m)), ∞ = # ext !(⌜af⌝ ), ∀ n. ∃ m. ext !(af.take(n)) = ext !(af0.take(m)), ∀ n0. ef(n0) = ext !(⌜af⌝ )[n0] ⊦ |
¬ # α < ⌜n⌝ ⊦ ¬ # ext !(α) < # ⌜ext !(α.take(n))⌝
Used simplifier rules: ⊦ ⌜nf⌝ .take(n) = nf.take(n); (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ # nf.take(n) = n; (s) ⊦ ⌜m + n⌝ = ⌜m⌝ + ⌜n⌝ ; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ ⌜n⌝ < ⌜1⌝ + n∞ ↔ ¬ n∞ < ⌜n⌝ ; (s) ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ ¬ n < n; (s) add-assoc: ⊦ (n∞ + n∞1) + n∞2 = n∞ + n∞1 + n∞2; from specification nat-inf add-comm: ⊦ n∞1 + n∞2 = n∞2 + n∞1; from specification nat-inf ⊦ # ⌜nf⌝ = ∞; (s) ⊦ ¬ ∞ < n∞; (s) Used terms: ⌜af0⌝ , m0, ext
| ¬ # α < ⌜n⌝ ⊦ ¬ # ext !(α) < # ⌜ext !(α.take(n))⌝ |
| ∞ = # ext !(⌜af0⌝ ), ⌜ef⌝ = ext !(⌜af⌝ ), ∀ n. ∃ m. ext !(af.take(n)) = ext !(af0.take(m)), ∞ ≠ # ext !(⌜af0⌝ ) ∨ ef.take(n) ≠ ext !(⌜af0⌝ ).take(n) ⊦ |
∞ = # ext !(⌜af0⌝ ), ⌜ef⌝ = ext !(⌜af⌝ ), ef.take(n) ≠ ext !(⌜af0⌝ ).take(n), ∀ n. ∃ m. ext !(af.take(n)) = ext !(af0.take(m)) ⊦
| ∞ = # ext !(⌜af0⌝ ), ⌜ef⌝ = ext !(⌜af⌝ ), ef.take(n) ≠ ext !(⌜af0⌝ ).take(n), ∀ n. ∃ m. ext !(af.take(n)) = ext !(af0.take(m)) ⊦ |
⊦ ¬ # ext !(α) < ⌜n⌝ → (∃ m. ¬ # α < ⌜m⌝ ∧ ext !(α).take(n) = ext !(α.take(m)))
∞ = # ext !(⌜af0⌝ ), ⌜ef⌝ = ext !(⌜af⌝ ), ef.take(n) ≠ ext !(⌜af0⌝ ).take(n), ¬ # ext !(⌜af⌝ ) < ⌜n⌝ → (∃ m. ¬ # ⌜af⌝ < ⌜m⌝ ∧ ext !(⌜af⌝ ).take(n) = ext !(⌜af⌝ .take(m))), ∀ n. ∃ m. ext !(af.take(n)) = ext !(af0.take(m)) ⊦
Used terms: ext, ⌜af⌝ , n
| ⊦ ¬ # ext !(α) < ⌜n⌝ → (∃ m. ¬ # α < ⌜m⌝ ∧ ext !(α).take(n) = ext !(α.take(m))) |
| ∞ = # ext !(⌜af0⌝ ), ⌜ef⌝ = ext !(⌜af⌝ ), ef.take(n) ≠ ext !(⌜af0⌝ ).take(n), ¬ # ext !(⌜af⌝ ) < ⌜n⌝ → (∃ m. ¬ # ⌜af⌝ < ⌜m⌝ ∧ ext !(⌜af⌝ ).take(n) = ext !(⌜af⌝ .take(m))), ∀ n. ∃ m. ext !(af.take(n)) = ext !(af0.take(m)) ⊦ |
ef.take(n) = ext !(af.take(m)), ∞ = # ext !(⌜af0⌝ ), ⌜ef⌝ = ext !(⌜af⌝ ), ef.take(n) ≠ ext !(⌜af0⌝ ).take(n), ∀ n. ∃ m. ext !(af.take(n)) = ext !(af0.take(m)) ⊦
Used simplifier rules: ⊦ ⌜nf⌝ .take(n) = nf.take(n); (s) ⊦ ¬ ∞ < n∞; (s) ⊦ # ⌜nf⌝ = ∞; (s)
| ef.take(n) = ext !(af.take(m)), ∞ = # ext !(⌜af0⌝ ), ⌜ef⌝ = ext !(⌜af⌝ ), ef.take(n) ≠ ext !(⌜af0⌝ ).take(n), ∀ n. ∃ m. ext !(af.take(n)) = ext !(af0.take(m)) ⊦ |
ef.take(n) = ext !(af.take(m)), ∞ = # ext !(⌜af0⌝ ), ⌜ef⌝ = ext !(⌜af⌝ ), ef.take(n) ≠ ext !(⌜af0⌝ ).take(n), ∀ n. ∃ m. ext !(af.take(n)) = ext !(af0.take(m)), ∃ m0. ext !(af.take(m)) = ext !(af0.take(m0)) ⊦
Used terms: m
| ef.take(n) = ext !(af.take(m)), ∞ = # ext !(⌜af0⌝ ), ⌜ef⌝ = ext !(⌜af⌝ ), ef.take(n) ≠ ext !(⌜af0⌝ ).take(n), ∀ n. ∃ m. ext !(af.take(n)) = ext !(af0.take(m)), ∃ m0. ext !(af.take(m)) = ext !(af0.take(m0)) ⊦ |
ef.take(n) = ext !(af0.take(m0)), ef.take(n) = ext !(af.take(m)), ∞ = # ext !(⌜af0⌝ ), ⌜ef⌝ = ext !(⌜af⌝ ), ef.take(n) ≠ ext !(⌜af0⌝ ).take(n), ∀ n. ∃ m. ext !(af.take(n)) = ext !(af0.take(m)) ⊦
| ef.take(n) = ext !(af0.take(m0)), ef.take(n) = ext !(af.take(m)), ∞ = # ext !(⌜af0⌝ ), ⌜ef⌝ = ext !(⌜af⌝ ), ef.take(n) ≠ ext !(⌜af0⌝ ).take(n), ∀ n. ∃ m. ext !(af.take(n)) = ext !(af0.take(m)) ⊦ |
# al = m0, ef.take(n) = ext !(af.take(m)), ef.take(n) = ext !(al), af0 = (⌜al⌝ + ⌜nf0⌝ ).f, ∞ = # ext !(⌜af0⌝ ), ⌜ef⌝ = ext !(⌜af⌝ ), ef.take(n) ≠ ext !(⌜af0⌝ ).take(n), ∀ n. ∃ m. ext !(af.take(n)) = ext !(af0.take(m)) ⊦
Used simplifier rules: ⊦ x0 = nf.take(n) ∧ nf0 = nf.drop(n) ↔ nf = (⌜x0⌝ + ⌜nf0⌝ ).f ∧ # x0 = n; (elim) Used terms: af0, m0, al, nf0
| # al = m0, ef.take(n) = ext !(af.take(m)), ef.take(n) = ext !(al), af0 = (⌜al⌝ + ⌜nf0⌝ ).f, ∞ = # ext !(⌜af0⌝ ), ⌜ef⌝ = ext !(⌜af⌝ ), ef.take(n) ≠ ext !(⌜af0⌝ ).take(n), ∀ n. ∃ m. ext !(af.take(n)) = ext !(af0.take(m)) ⊦ |
# ext !(⌜nf0⌝ ) = ∞, ef.take(n) = ext !(al), ef.take(n) = ext !(af.take(m)), ⌜ef⌝ = ext !(⌜af⌝ ), ef.take(n) ≠ (⌜ef.take(n)⌝ + ext !(⌜nf0⌝ )).take(n), ∀ n. ∃ m. ext !(af.take(n)) = ext !((⌜al⌝ + ⌜nf0⌝ ).f.take(m)) ⊦
Used simplifier rules: remtau-append: ⊦ ext !(⌜al⌝ + α2) = ⌜ext !(al)⌝ + ext !(α2); append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ ⌜(⌜x⌝ + ⌜nf⌝ ).f⌝ = ⌜x⌝ + ⌜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⌝ + n∞ = ∞ ↔ n∞ = ∞; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ #(σ + σ1) = # σ + # σ1; (s)
| # ext !(⌜nf0⌝ ) = ∞, ef.take(n) = ext !(al), ef.take(n) = ext !(af.take(m)), ⌜ef⌝ = ext !(⌜af⌝ ), ef.take(n) ≠ (⌜ef.take(n)⌝ + ext !(⌜nf0⌝ )).take(n), ∀ n. ∃ m. ext !(af.take(n)) = ext !((⌜al⌝ + ⌜nf0⌝ ).f.take(m)) ⊦ |
⊦ # σ < ⌜n⌝ → (σ + σ0).take(n) = σ.l + σ0.take(n - # σ.l)
Used simplifier rules: ⊦ ⌜x⌝ .l = x; (s) ⊦ # nf.take(n) = n; (s) ⊦ m - m = 0; (s) ⊦ σ.take(0) = []; (s) ⊦ x + [] = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ¬ # σ < ⌜n⌝ → (σ + σ0).take(n) = σ.take(n); (s) ⊦ ⌜x⌝ .take(n) = x.take(n); (s) ⊦ nf.take(n).take(n) = nf.take(n); (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream Used terms: ⌜ef.take(n)⌝ , ext !(⌜nf0⌝ ), n
| ⊦ # σ < ⌜n⌝ → (σ + σ0).take(n) = σ.l + σ0.take(n - # σ.l) |
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.