| mon(σσ), σσ ≠ [], ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)), ∀ m. ¬ # σ0 < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m) ⊑ σσ(n)) ⊦ σ = σ0 |
σ ≠ σ0, σσ ≠ [], mon(σσ), ∀ m. ¬ # σ0 < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m) ⊑ σσ(n)), ∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦
| σ ≠ σ0, σσ ≠ [], mon(σσ), ∀ m. ¬ # σ0 < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m) ⊑ σσ(n)), ∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦ |
σ ≠ σ0, σσ ≠ [], mon(σσ), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)), ∀ m. ¬ # σ0 < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m) ⊑ σσ(n)) ⊦
| σ ≠ σ0, σσ ≠ [], mon(σσ), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)), ∀ m. ¬ # σ0 < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m) ⊑ σσ(n)) ⊦ |
⊦ σ0 = σ1 ↔ # σ0 = # σ1 ∧ (∀ n. ¬ # σ0 < ⌜n⌝ → σ0.take(n) = σ1.take(n))
σσ ≠ [], mon(σσ), ∀ m. ¬ # σ0 < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m) ⊑ σσ(n)), ∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, # σ ≠ # σ0 ∨ (∃ n. ¬(¬ # σ < ⌜n⌝ → σ.take(n) = σ0.take(n))) ⊦
Used terms: σ0, σ
| ⊦ σ0 = σ1 ↔ # σ0 = # σ1 ∧ (∀ n. ¬ # σ0 < ⌜n⌝ → σ0.take(n) = σ1.take(n)) |
| σσ ≠ [], mon(σσ), ∀ m. ¬ # σ0 < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m) ⊑ σσ(n)), ∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, # σ ≠ # σ0 ∨ (∃ n. ¬(¬ # σ < ⌜n⌝ → σ.take(n) = σ0.take(n))) ⊦ |
σσ ≠ [], mon(σσ), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)), ∀ m. ¬ # σ0 < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m) ⊑ σσ(n)), # σ ≠ # σ0 ∨ ¬(¬ # σ < ⌜n⌝ → σ.take(n) = σ0.take(n)) ⊦
| σσ ≠ [], mon(σσ), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)), ∀ m. ¬ # σ0 < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m) ⊑ σσ(n)), # σ ≠ # σ0 ∨ ¬(¬ # σ < ⌜n⌝ → σ.take(n) = σ0.take(n)) ⊦ |
# σ = # σ0, σσ ≠ [], mon(σσ), ∀ m. ¬ # σ0 < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m) ⊑ σσ(n)), ∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, # σ ≠ # σ0 ∨ ¬(¬ # σ < ⌜n⌝ → σ.take(n) = σ0.take(n)) ⊦
# σ ≠ # σ0, σσ ≠ [], mon(σσ), ∀ m. ¬ # σ0 < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m) ⊑ σσ(n)), ∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, # σ ≠ # σ0 ∨ ¬(¬ # σ < ⌜n⌝ → σ.take(n) = σ0.take(n)) ⊦
Used formulas: # σ = # σ0
| # σ = # σ0, σσ ≠ [], mon(σσ), ∀ m. ¬ # σ0 < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m) ⊑ σσ(n)), ∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, # σ ≠ # σ0 ∨ ¬(¬ # σ < ⌜n⌝ → σ.take(n) = σ0.take(n)) ⊦ |
# σ = # σ0, σ.take(n) ≠ σ0.take(n), σσ ≠ [], mon(σσ), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ m. ¬ # σ0 < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)), ∀ m. ¬ # σ0 < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m) ⊑ σσ(n)) ⊦
| # σ = # σ0, σ.take(n) ≠ σ0.take(n), σσ ≠ [], mon(σσ), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ m. ¬ # σ0 < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)), ∀ m. ¬ # σ0 < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m) ⊑ σσ(n)) ⊦ |
# σ = # σ0, σ.take(n) ≠ σ0.take(n), σσ ≠ [], mon(σσ), ¬ # σ0 < ⌜n⌝ , ¬ # σ0 < ⌜n⌝ → (∃ n0. ⌜n0⌝ < # σσ ∧ σ0.take(n) ⊑ σσ(n0)), ∀ m. ¬ # σ0 < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦
Used terms: n
| # σ = # σ0, σ.take(n) ≠ σ0.take(n), σσ ≠ [], mon(σσ), ¬ # σ0 < ⌜n⌝ , ¬ # σ0 < ⌜n⌝ → (∃ n0. ⌜n0⌝ < # σσ ∧ σ0.take(n) ⊑ σσ(n0)), ∀ m. ¬ # σ0 < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦ |
# σ = # σ0, σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, mon(σσ), σ0.take(n) ⊑ σσ(n0), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ m. ¬ # σ0 < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)) ⊦
| # σ = # σ0, σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, mon(σσ), σ0.take(n) ⊑ σσ(n0), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ m. ¬ # σ0 < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)) ⊦ |
# σ = # σ0, σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, mon(σσ), σ0.take(n) ⊑ σσ(n0), ¬ # σ0 < ⌜n⌝ , ¬ # σ0 < ⌜n⌝ → (∃ n0. ⌜n0⌝ < # σσ ∧ σ.take(n) ⊑ σσ(n0)), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦
Used terms: n
| # σ = # σ0, σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, mon(σσ), σ0.take(n) ⊑ σσ(n0), ¬ # σ0 < ⌜n⌝ , ¬ # σ0 < ⌜n⌝ → (∃ n0. ⌜n0⌝ < # σσ ∧ σ.take(n) ⊑ σσ(n0)), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦ |
# σ = # σ0, σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, mon(σσ), σ0.take(n) ⊑ σσ(n0), σ.take(n) ⊑ σσ(n1), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0 ⊦
| # σ = # σ0, σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, mon(σσ), σ0.take(n) ⊑ σσ(n0), σ.take(n) ⊑ σσ(n1), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0 ⊦ |
mon(σσ), m ≤ n, ⌜n⌝ < # σσ ⊦ σσ(m) ⊑ σσ(n)
# σ = # σ0, σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), σ.take(n) ⊑ σσ(n1), σ0.take(n) ⊑ σσ(n0), ¬ # σ0 < ⌜n⌝ , ¬ n0 ≤ n1, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦
# σ = # σ0, σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), σ.take(n) ⊑ σσ(n1), σ0.take(n) ⊑ σσ(n0), σσ(n0) ⊑ σσ(n1), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦
Used terms: σσ, n0, n1
| mon(σσ), m ≤ n, ⌜n⌝ < # σσ ⊦ σσ(m) ⊑ σσ(n) |
| # σ = # σ0, σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), σ.take(n) ⊑ σσ(n1), σ0.take(n) ⊑ σσ(n0), ¬ # σ0 < ⌜n⌝ , ¬ n0 ≤ n1, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦ |
# σ = # σ0, σ.take(n) ≠ σ0.take(n), σσ ≠ [], n1 < n0, ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), σ.take(n) ⊑ σσ(n1), σ0.take(n) ⊑ σσ(n0), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ m ≤ n ↔ ¬ n < m; (ss)
| # σ = # σ0, σ.take(n) ≠ σ0.take(n), σσ ≠ [], n1 < n0, ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), σ.take(n) ⊑ σσ(n1), σ0.take(n) ⊑ σσ(n0), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦ |
mon(σσ), m ≤ n, ⌜n⌝ < # σσ ⊦ σσ(m) ⊑ σσ(n)
# σ = # σ0, σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, n1 < n0, mon(σσ), σ0.take(n) ⊑ σσ(n0), σ.take(n) ⊑ σσ(n1), σσ(n1) ⊑ σσ(n0), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0 ⊦
Used simplifier rules: ⊦ m < n → m ≤ n; (s) Used terms: σσ, n1, n0
| mon(σσ), m ≤ n, ⌜n⌝ < # σσ ⊦ σσ(m) ⊑ σσ(n) |
| # σ = # σ0, σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, n1 < n0, mon(σσ), σ0.take(n) ⊑ σσ(n0), σ.take(n) ⊑ σσ(n1), σσ(n1) ⊑ σσ(n0), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0 ⊦ |
# σ = # σ0, σ.take(n) ≠ σ0.take(n), σσ ≠ [], n1 < n0, ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), σσ(n1) ⊑ σσ(n0), σ.take(n) ⊑ σσ(n1), σ0.take(n) ⊑ σσ(n0), σ.take(n) ⊑ σσ(n0), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦
Used simplifier rules: leq-trans: ⊦ σ ⊑ σ1 ∧ σ1 ⊑ σ2 → σ ⊑ σ2; (forward) from specification stream-old
| # σ = # σ0, σ.take(n) ≠ σ0.take(n), σσ ≠ [], n1 < n0, ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), σσ(n1) ⊑ σσ(n0), σ.take(n) ⊑ σσ(n1), σ0.take(n) ⊑ σσ(n0), σ.take(n) ⊑ σσ(n0), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦ |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
# σ = # σ0, σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, n1 < n0, mon(σσ), σ.take(n) ⊑ σσ(n0), σ0.take(n) ⊑ σσ(n0), σ.take(n) ⊑ σσ(n1), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∃ σ1. σσ(n1) + σ1 = σσ(n0) ⊦
Used terms: σσ(n1), σσ(n0)
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| # σ = # σ0, σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, n1 < n0, mon(σσ), σ.take(n) ⊑ σσ(n0), σ0.take(n) ⊑ σσ(n0), σ.take(n) ⊑ σσ(n1), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∃ σ1. σσ(n1) + σ1 = σσ(n0) ⊦ |
# σ = # σ0, σσ(n1) + σ1 = σσ(n0), σ.take(n) ≠ σ0.take(n), σσ ≠ [], n1 < n0, ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), σ.take(n) ⊑ σσ(n1), σ0.take(n) ⊑ σσ(n0), σ.take(n) ⊑ σσ(n0), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦
| # σ = # σ0, σσ(n1) + σ1 = σσ(n0), σ.take(n) ≠ σ0.take(n), σσ ≠ [], n1 < n0, ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), σ.take(n) ⊑ σσ(n1), σ0.take(n) ⊑ σσ(n0), σ.take(n) ⊑ σσ(n0), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦ |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
# σ = # σ0, σσ(n1) + σ1 = σσ(n0), σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, n1 < n0, mon(σσ), σ.take(n) ⊑ σσ(n0), σ0.take(n) ⊑ σσ(n0), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∃ σ1. σ.take(n) + σ1 = σσ(n1) ⊦
Used terms: σ.take(n), σσ(n1)
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| # σ = # σ0, σσ(n1) + σ1 = σσ(n0), σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, n1 < n0, mon(σσ), σ.take(n) ⊑ σσ(n0), σ0.take(n) ⊑ σσ(n0), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∃ σ1. σ.take(n) + σ1 = σσ(n1) ⊦ |
# σ = # σ0, σ.take(n) + σ2 = σσ(n1), σσ(n1) + σ1 = σσ(n0), σ.take(n) ≠ σ0.take(n), σσ ≠ [], n1 < n0, ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), σ0.take(n) ⊑ σσ(n0), σ.take(n) ⊑ σσ(n0), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦
| # σ = # σ0, σ.take(n) + σ2 = σσ(n1), σσ(n1) + σ1 = σσ(n0), σ.take(n) ≠ σ0.take(n), σσ ≠ [], n1 < n0, ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), σ0.take(n) ⊑ σσ(n0), σ.take(n) ⊑ σσ(n0), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦ |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
# σ = # σ0, σσ(n1) + σ1 = σσ(n0), σ.take(n) + σ2 = σσ(n1), σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, n1 < n0, mon(σσ), σ.take(n) ⊑ σσ(n0), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∃ σ1. σ0.take(n) + σ1 = σσ(n0) ⊦
Used terms: σ0.take(n), σσ(n0)
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| # σ = # σ0, σσ(n1) + σ1 = σσ(n0), σ.take(n) + σ2 = σσ(n1), σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, n1 < n0, mon(σσ), σ.take(n) ⊑ σσ(n0), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∃ σ1. σ0.take(n) + σ1 = σσ(n0) ⊦ |
# σ = # σ0, σ0.take(n) + σ3 = σσ(n0), σ.take(n) + σ2 = σσ(n1), σσ(n1) + σ1 = σσ(n0), σ.take(n) ≠ σ0.take(n), σσ ≠ [], n1 < n0, ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), σ.take(n) ⊑ σσ(n0), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦
| # σ = # σ0, σ0.take(n) + σ3 = σσ(n0), σ.take(n) + σ2 = σσ(n1), σσ(n1) + σ1 = σσ(n0), σ.take(n) ≠ σ0.take(n), σσ ≠ [], n1 < n0, ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), σ.take(n) ⊑ σσ(n0), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦ |
# σ = # σ0, (σ.take(n) + σ2) + σ1 = σσ(n0), σ0.take(n) + σ3 = σσ(n0), σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, n1 < n0, mon(σσ), σ.take(n) ⊑ σσ(n0), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0 ⊦
| # σ = # σ0, (σ.take(n) + σ2) + σ1 = σσ(n0), σ0.take(n) + σ3 = σσ(n0), σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, n1 < n0, mon(σσ), σ.take(n) ⊑ σσ(n0), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0 ⊦ |
# σ = # σ0, σ0.take(n) + σ3 = (σ.take(n) + σ2) + σ1, σ.take(n) ≠ σ0.take(n), σσ ≠ [], n1 < n0, ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), σ.take(n) ⊑ (σ.take(n) + σ2) + σ1, ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦
| # σ = # σ0, σ0.take(n) + σ3 = (σ.take(n) + σ2) + σ1, σ.take(n) ≠ σ0.take(n), σσ ≠ [], n1 < n0, ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), σ.take(n) ⊑ (σ.take(n) + σ2) + σ1, ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦ |
# σ = # σ0, σ0.take(n) + σ3 = (σ.take(n) + σ2) + σ1, σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, n1 < n0, mon(σσ), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0 ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream-old ⊦ σ1 ⊑ σ1 + σ2; (s)
| # σ = # σ0, σ0.take(n) + σ3 = (σ.take(n) + σ2) + σ1, σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, n1 < n0, mon(σσ), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0 ⊦ |
⊦ σ0 = σ1 ↔ # σ0 = # σ1 ∧ (∀ n. ¬ # σ0 < ⌜n⌝ → σ0.take(n) = σ1.take(n))
#(σ0.take(n) + σ3) = #((σ.take(n) + σ2) + σ1), # σ = # σ0, σ.take(n) ≠ σ0.take(n), σσ ≠ [], n1 < n0, ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n0. ¬ #(σ0.take(n) + σ3) < ⌜n0⌝ → (σ0.take(n) + σ3).take(n0) = ((σ.take(n) + σ2) + σ1).take(n0) ⊦
Used terms: σ0.take(n) + σ3, (σ.take(n) + σ2) + σ1
| ⊦ σ0 = σ1 ↔ # σ0 = # σ1 ∧ (∀ n. ¬ # σ0 < ⌜n⌝ → σ0.take(n) = σ1.take(n)) |
| #(σ0.take(n) + σ3) = #((σ.take(n) + σ2) + σ1), # σ = # σ0, σ.take(n) ≠ σ0.take(n), σσ ≠ [], n1 < n0, ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n0. ¬ #(σ0.take(n) + σ3) < ⌜n0⌝ → (σ0.take(n) + σ3).take(n0) = ((σ.take(n) + σ2) + σ1).take(n0) ⊦ |
# σ = # σ0, #(σ0.take(n) + σ3) = #((σ.take(n) + σ2) + σ1), σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, n1 < n0, mon(σσ), ¬ # σ0 < ⌜n⌝ , ¬ #(σ0.take(n) + σ3) < ⌜n⌝ → (σ0.take(n) + σ3).take(n) = ((σ.take(n) + σ2) + σ1).take(n), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0 ⊦
Used terms: n
| # σ = # σ0, #(σ0.take(n) + σ3) = #((σ.take(n) + σ2) + σ1), σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, n1 < n0, mon(σσ), ¬ # σ0 < ⌜n⌝ , ¬ #(σ0.take(n) + σ3) < ⌜n⌝ → (σ0.take(n) + σ3).take(n) = ((σ.take(n) + σ2) + σ1).take(n), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0 ⊦ |
# σ = # σ0, # σ3 = # σ2 + # σ1, (σ0.take(n) + σ3).take(n) = ((σ.take(n) + σ2) + σ1).take(n), σ.take(n) ≠ σ0.take(n), σσ ≠ [], n1 < n0, ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦
Used simplifier rules: 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∞ + n∞1 < n∞1; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream-old ¬ # σ < ⌜n⌝ ⊦ # σ.take(n) = ⌜n⌝ ; (s) ⊦ #(σ + σ1) = # σ + # σ1; (s) ⊦ ⌜n⌝ + n∞1 = ⌜n⌝ + n∞2 ↔ n∞1 = n∞2; (s)
| # σ = # σ0, # σ3 = # σ2 + # σ1, (σ0.take(n) + σ3).take(n) = ((σ.take(n) + σ2) + σ1).take(n), σ.take(n) ≠ σ0.take(n), σσ ≠ [], n1 < n0, ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦ |
⊦ ¬ # σ < ⌜n⌝ → (σ + σ0).take(n) = σ.take(n)
# σ3 = # σ2 + # σ1, # σ = # σ0, (σ0.take(n) + σ3).take(n) = (σ.take(n) + σ2).take(n), σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, n1 < n0, mon(σσ), ¬ #(σ.take(n) + σ2) < ⌜n⌝ , ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0 ⊦
Used simplifier rules: ⊦ #(σ + σ1) = # σ + # σ1; (s) ¬ # σ < ⌜n⌝ ⊦ # σ.take(n) = ⌜n⌝ ; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream-old ⊦ ¬ n∞ + n∞1 < n∞1; (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 Used terms: σ.take(n) + σ2, σ1, n
| ⊦ ¬ # σ < ⌜n⌝ → (σ + σ0).take(n) = σ.take(n) |
| # σ3 = # σ2 + # σ1, # σ = # σ0, (σ0.take(n) + σ3).take(n) = (σ.take(n) + σ2).take(n), σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, n1 < n0, mon(σσ), ¬ #(σ.take(n) + σ2) < ⌜n⌝ , ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0 ⊦ |
# σ = # σ0, # σ3 = # σ2 + # σ1, (σ0.take(n) + σ3).take(n) = (σ.take(n) + σ2).take(n), σ.take(n) ≠ σ0.take(n), σσ ≠ [], n1 < n0, ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦
Used simplifier rules: 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∞ + n∞1 < n∞1; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream-old ¬ # σ < ⌜n⌝ ⊦ # σ.take(n) = ⌜n⌝ ; (s) ⊦ #(σ + σ1) = # σ + # σ1; (s)
| # σ = # σ0, # σ3 = # σ2 + # σ1, (σ0.take(n) + σ3).take(n) = (σ.take(n) + σ2).take(n), σ.take(n) ≠ σ0.take(n), σσ ≠ [], n1 < n0, ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦ |
⊦ ¬ # σ < ⌜n⌝ → (σ + σ0).take(n) = σ.take(n)
# σ3 = # σ2 + # σ1, # σ = # σ0, (σ0.take(n) + σ3).take(n) = σ.take(n).take(n), σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, n1 < n0, mon(σσ), ¬ # σ.take(n) < ⌜n⌝ , ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0 ⊦
Used simplifier rules: ¬ # σ < ⌜n⌝ ⊦ # σ.take(n) = ⌜n⌝ ; (s) ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ ¬ n < n; (s) Used terms: σ.take(n), σ2, n
| ⊦ ¬ # σ < ⌜n⌝ → (σ + σ0).take(n) = σ.take(n) |
| # σ3 = # σ2 + # σ1, # σ = # σ0, (σ0.take(n) + σ3).take(n) = σ.take(n).take(n), σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, n1 < n0, mon(σσ), ¬ # σ.take(n) < ⌜n⌝ , ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0 ⊦ |
# σ = # σ0, # σ3 = # σ2 + # σ1, (σ0.take(n) + σ3).take(n) = σ.take(n), σ.take(n) ≠ σ0.take(n), σσ ≠ [], n1 < n0, ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦
Used simplifier rules: ⊦ m ≤ m; (s) ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ¬ # σ < ⌜n⌝ ⊦ # σ.take(n) = ⌜n⌝ ; (s) ¬ # σ < ⌜n⌝ ⊦ σ.take(n).take(n) = σ.take(n); (s)
| # σ = # σ0, # σ3 = # σ2 + # σ1, (σ0.take(n) + σ3).take(n) = σ.take(n), σ.take(n) ≠ σ0.take(n), σσ ≠ [], n1 < n0, ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦ |
⊦ ¬ # σ < ⌜n⌝ → (σ + σ0).take(n) = σ.take(n)
Used simplifier rules: ¬ # σ < ⌜n⌝ ⊦ σ.take(n).take(n) = σ.take(n); (s) ¬ # σ < ⌜n⌝ ⊦ # σ.take(n) = ⌜n⌝ ; (s) ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ ¬ n < n; (s) Used terms: σ0.take(n), σ3, n
| ⊦ ¬ # σ < ⌜n⌝ → (σ + σ0).take(n) = σ.take(n) |
| # σ = # σ0, σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), σ.take(n) ⊑ σσ(n1), σ0.take(n) ⊑ σσ(n0), σσ(n0) ⊑ σσ(n1), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦ |
# σ = # σ0, σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, mon(σσ), σσ(n0) ⊑ σσ(n1), σ0.take(n) ⊑ σσ(n0), σ.take(n) ⊑ σσ(n1), σ0.take(n) ⊑ σσ(n1), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0 ⊦
Used simplifier rules: leq-trans: ⊦ σ ⊑ σ1 ∧ σ1 ⊑ σ2 → σ ⊑ σ2; (forward) from specification stream-old
| # σ = # σ0, σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, mon(σσ), σσ(n0) ⊑ σσ(n1), σ0.take(n) ⊑ σσ(n0), σ.take(n) ⊑ σσ(n1), σ0.take(n) ⊑ σσ(n1), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0 ⊦ |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
# σ = # σ0, σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), σ0.take(n) ⊑ σσ(n1), σ0.take(n) ⊑ σσ(n0), σσ(n0) ⊑ σσ(n1), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∃ σ1. σ.take(n) + σ1 = σσ(n1) ⊦
Used terms: σ.take(n), σσ(n1)
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| # σ = # σ0, σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), σ0.take(n) ⊑ σσ(n1), σ0.take(n) ⊑ σσ(n0), σσ(n0) ⊑ σσ(n1), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∃ σ1. σ.take(n) + σ1 = σσ(n1) ⊦ |
# σ = # σ0, σ.take(n) + σ1 = σσ(n1), σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, mon(σσ), σσ(n0) ⊑ σσ(n1), σ0.take(n) ⊑ σσ(n0), σ0.take(n) ⊑ σσ(n1), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0 ⊦
| # σ = # σ0, σ.take(n) + σ1 = σσ(n1), σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, mon(σσ), σσ(n0) ⊑ σσ(n1), σ0.take(n) ⊑ σσ(n0), σ0.take(n) ⊑ σσ(n1), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0 ⊦ |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
# σ = # σ0, σ.take(n) + σ1 = σσ(n1), σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), σ0.take(n) ⊑ σσ(n0), σσ(n0) ⊑ σσ(n1), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∃ σ1. σ0.take(n) + σ1 = σσ(n1) ⊦
Used terms: σ0.take(n), σσ(n1)
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| # σ = # σ0, σ.take(n) + σ1 = σσ(n1), σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), σ0.take(n) ⊑ σσ(n0), σσ(n0) ⊑ σσ(n1), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∃ σ1. σ0.take(n) + σ1 = σσ(n1) ⊦ |
# σ = # σ0, σ0.take(n) + σ2 = σσ(n1), σ.take(n) + σ1 = σσ(n1), σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, mon(σσ), σσ(n0) ⊑ σσ(n1), σ0.take(n) ⊑ σσ(n0), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0 ⊦
| # σ = # σ0, σ0.take(n) + σ2 = σσ(n1), σ.take(n) + σ1 = σσ(n1), σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, mon(σσ), σσ(n0) ⊑ σσ(n1), σ0.take(n) ⊑ σσ(n0), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0 ⊦ |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
# σ = # σ0, σ.take(n) + σ1 = σσ(n1), σ0.take(n) + σ2 = σσ(n1), σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), σσ(n0) ⊑ σσ(n1), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∃ σ1. σ0.take(n) + σ1 = σσ(n0) ⊦
Used terms: σ0.take(n), σσ(n0)
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| # σ = # σ0, σ.take(n) + σ1 = σσ(n1), σ0.take(n) + σ2 = σσ(n1), σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), σσ(n0) ⊑ σσ(n1), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∃ σ1. σ0.take(n) + σ1 = σσ(n0) ⊦ |
# σ = # σ0, σ0.take(n) + σ3 = σσ(n0), σ0.take(n) + σ2 = σσ(n1), σ.take(n) + σ1 = σσ(n1), σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, mon(σσ), σσ(n0) ⊑ σσ(n1), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0 ⊦
| # σ = # σ0, σ0.take(n) + σ3 = σσ(n0), σ0.take(n) + σ2 = σσ(n1), σ.take(n) + σ1 = σσ(n1), σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, mon(σσ), σσ(n0) ⊑ σσ(n1), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0 ⊦ |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
# σ = # σ0, σ.take(n) + σ1 = σσ(n1), σ0.take(n) + σ2 = σσ(n1), σ0.take(n) + σ3 = σσ(n0), σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∃ σ1. σσ(n0) + σ1 = σσ(n1) ⊦
Used terms: σσ(n0), σσ(n1)
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| # σ = # σ0, σ.take(n) + σ1 = σσ(n1), σ0.take(n) + σ2 = σσ(n1), σ0.take(n) + σ3 = σσ(n0), σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∃ σ1. σσ(n0) + σ1 = σσ(n1) ⊦ |
# σ = # σ0, σσ(n0) + σ4 = σσ(n1), σ0.take(n) + σ3 = σσ(n0), σ0.take(n) + σ2 = σσ(n1), σ.take(n) + σ1 = σσ(n1), σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, mon(σσ), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0 ⊦
| # σ = # σ0, σσ(n0) + σ4 = σσ(n1), σ0.take(n) + σ3 = σσ(n0), σ0.take(n) + σ2 = σσ(n1), σ.take(n) + σ1 = σσ(n1), σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, mon(σσ), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0 ⊦ |
# σ = # σ0, σ.take(n) + σ1 = σ0.take(n) + σ2, σ0.take(n) + σ3 = σσ(n0), σσ(n0) + σ4 = σ0.take(n) + σ2, σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦
| # σ = # σ0, σ.take(n) + σ1 = σ0.take(n) + σ2, σ0.take(n) + σ3 = σσ(n0), σσ(n0) + σ4 = σ0.take(n) + σ2, σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦ |
# σ = # σ0, (σ0.take(n) + σ3) + σ4 = σ0.take(n) + σ2, σ.take(n) + σ1 = σ0.take(n) + σ2, σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, mon(σσ), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0 ⊦
| # σ = # σ0, (σ0.take(n) + σ3) + σ4 = σ0.take(n) + σ2, σ.take(n) + σ1 = σ0.take(n) + σ2, σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, mon(σσ), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0 ⊦ |
⊦ σ0 = σ1 ↔ # σ0 = # σ1 ∧ (∀ n. ¬ # σ0 < ⌜n⌝ → σ0.take(n) = σ1.take(n))
#(σ.take(n) + σ1) = #(σ0.take(n) + σ2), # σ = # σ0, (σ0.take(n) + σ3) + σ4 = σ0.take(n) + σ2, σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n0. ¬ #(σ.take(n) + σ1) < ⌜n0⌝ → (σ.take(n) + σ1).take(n0) = (σ0.take(n) + σ2).take(n0) ⊦
Used terms: σ.take(n) + σ1, σ0.take(n) + σ2
| ⊦ σ0 = σ1 ↔ # σ0 = # σ1 ∧ (∀ n. ¬ # σ0 < ⌜n⌝ → σ0.take(n) = σ1.take(n)) |
| #(σ.take(n) + σ1) = #(σ0.take(n) + σ2), # σ = # σ0, (σ0.take(n) + σ3) + σ4 = σ0.take(n) + σ2, σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n0. ¬ #(σ.take(n) + σ1) < ⌜n0⌝ → (σ.take(n) + σ1).take(n0) = (σ0.take(n) + σ2).take(n0) ⊦ |
# σ = # σ0, # σ1 = # σ2, (σ0.take(n) + σ3) + σ4 = σ0.take(n) + σ2, σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, mon(σσ), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n2. ¬ ⌜n⌝ + # σ2 < ⌜n2⌝ → (σ.take(n) + σ1).take(n2) = (σ0.take(n) + σ2).take(n2) ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream-old ¬ # σ < ⌜n⌝ ⊦ # σ.take(n) = ⌜n⌝ ; (s) ⊦ #(σ + σ1) = # σ + # σ1; (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⌝ + n∞1 = ⌜n⌝ + n∞2 ↔ n∞1 = n∞2; (s)
| # σ = # σ0, # σ1 = # σ2, (σ0.take(n) + σ3) + σ4 = σ0.take(n) + σ2, σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, mon(σσ), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n2. ¬ ⌜n⌝ + # σ2 < ⌜n2⌝ → (σ.take(n) + σ1).take(n2) = (σ0.take(n) + σ2).take(n2) ⊦ |
# σ1 = # σ2, # σ = # σ0, (σ0.take(n) + σ3) + σ4 = σ0.take(n) + σ2, σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), ¬ # σ0 < ⌜n⌝ , ¬ ⌜n⌝ + # σ2 < ⌜n⌝ → (σ.take(n) + σ1).take(n) = (σ0.take(n) + σ2).take(n), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦
Used terms: n
| # σ1 = # σ2, # σ = # σ0, (σ0.take(n) + σ3) + σ4 = σ0.take(n) + σ2, σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), ¬ # σ0 < ⌜n⌝ , ¬ ⌜n⌝ + # σ2 < ⌜n⌝ → (σ.take(n) + σ1).take(n) = (σ0.take(n) + σ2).take(n), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦ |
# σ = # σ0, # σ1 = # σ2, (σ0.take(n) + σ3) + σ4 = σ0.take(n) + σ2, (σ.take(n) + σ1).take(n) = (σ0.take(n) + σ2).take(n), σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, mon(σσ), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0 ⊦
Used simplifier rules: 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∞ + n∞1 < n∞1; (s)
| # σ = # σ0, # σ1 = # σ2, (σ0.take(n) + σ3) + σ4 = σ0.take(n) + σ2, (σ.take(n) + σ1).take(n) = (σ0.take(n) + σ2).take(n), σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, mon(σσ), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0 ⊦ |
⊦ ¬ # σ < ⌜n⌝ → (σ + σ0).take(n) = σ.take(n)
# σ1 = # σ2, # σ = # σ0, (σ0.take(n) + σ3) + σ4 = σ0.take(n) + σ2, (σ.take(n) + σ1).take(n) = σ0.take(n).take(n), σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), ¬ # σ0.take(n) < ⌜n⌝ , ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦
Used simplifier rules: ¬ # σ < ⌜n⌝ ⊦ # σ.take(n) = ⌜n⌝ ; (s) ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ ¬ n < n; (s) Used terms: σ0.take(n), σ2, n
| ⊦ ¬ # σ < ⌜n⌝ → (σ + σ0).take(n) = σ.take(n) |
| # σ1 = # σ2, # σ = # σ0, (σ0.take(n) + σ3) + σ4 = σ0.take(n) + σ2, (σ.take(n) + σ1).take(n) = σ0.take(n).take(n), σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), ¬ # σ0.take(n) < ⌜n⌝ , ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦ |
# σ = # σ0, # σ1 = # σ2, (σ0.take(n) + σ3) + σ4 = σ0.take(n) + σ2, (σ.take(n) + σ1).take(n) = σ0.take(n), σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, mon(σσ), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0 ⊦
Used simplifier rules: ⊦ m ≤ m; (s) ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ¬ # σ < ⌜n⌝ ⊦ # σ.take(n) = ⌜n⌝ ; (s) ¬ # σ < ⌜n⌝ ⊦ σ.take(n).take(n) = σ.take(n); (s)
| # σ = # σ0, # σ1 = # σ2, (σ0.take(n) + σ3) + σ4 = σ0.take(n) + σ2, (σ.take(n) + σ1).take(n) = σ0.take(n), σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, mon(σσ), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0 ⊦ |
⊦ ¬ # σ < ⌜n⌝ → (σ + σ0).take(n) = σ.take(n)
Used simplifier rules: ¬ # σ < ⌜n⌝ ⊦ σ.take(n).take(n) = σ.take(n); (s) ¬ # σ < ⌜n⌝ ⊦ # σ.take(n) = ⌜n⌝ ; (s) ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ ¬ n < n; (s) Used terms: σ.take(n), σ1, n
| ⊦ ¬ # σ < ⌜n⌝ → (σ + σ0).take(n) = σ.take(n) |
| # σ ≠ # σ0, σσ ≠ [], mon(σσ), ∀ m. ¬ # σ0 < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m) ⊑ σσ(n)), ∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, # σ ≠ # σ0 ∨ ¬(¬ # σ < ⌜n⌝ → σ.take(n) = σ0.take(n)) ⊦ |
# σ ≠ # σ0, σσ ≠ [], mon(σσ), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)), ∀ m. ¬ # σ0 < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m) ⊑ σσ(n)) ⊦
| # σ ≠ # σ0, σσ ≠ [], mon(σσ), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)), ∀ m. ¬ # σ0 < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m) ⊑ σσ(n)) ⊦ |
∞ = # σ, # σ ≠ # σ0, σσ ≠ [], mon(σσ), ∀ m. ¬ # σ0 < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m) ⊑ σσ(n)), ∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦
⌜m⌝ = # σ, # σ ≠ # σ0, σσ ≠ [], mon(σσ), ∀ m. ¬ # σ0 < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m) ⊑ σσ(n)), ∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦
Used simplifier rules: Natinf freely generated by ∞, ⌝;
| ∞ = # σ, # σ ≠ # σ0, σσ ≠ [], mon(σσ), ∀ m. ¬ # σ0 < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m) ⊑ σσ(n)), ∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦ |
∞ = # σ, σσ ≠ [], ∞ ≠ # σ0, mon(σσ), ∀ m. ¬ # σ0 < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m) ⊑ σσ(n)), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ m. ∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n) ⊦
Used simplifier rules: ⊦ ¬ ∞ < n∞; (s)
| ∞ = # σ, σσ ≠ [], ∞ ≠ # σ0, mon(σσ), ∀ m. ¬ # σ0 < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m) ⊑ σσ(n)), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ m. ∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n) ⊦ |
⊦ n∞ = ∞ ↔ ¬(∃ n. n∞ = ⌜n⌝ )
∞ = # σ, σσ ≠ [], mon(σσ), ∀ m. ∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ m. ¬ # σ0 < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m) ⊑ σσ(n)), ∃ n. # σ0 = ⌜n⌝ ⊦
Used terms: # σ0
| ⊦ n∞ = ∞ ↔ ¬(∃ n. n∞ = ⌜n⌝ ) |
| ∞ = # σ, σσ ≠ [], mon(σσ), ∀ m. ∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ m. ¬ # σ0 < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m) ⊑ σσ(n)), ∃ n. # σ0 = ⌜n⌝ ⊦ |
# σ0 = ⌜n⌝ , ∞ = # σ, σσ ≠ [], mon(σσ), ∀ m. ∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ m. ¬ n < m → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m) ⊑ σσ(n)) ⊦
Used simplifier rules: ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s)
| # σ0 = ⌜n⌝ , ∞ = # σ, σσ ≠ [], mon(σσ), ∀ m. ∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ m. ¬ n < m → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m) ⊑ σσ(n)) ⊦ |
# σ0 = ⌜n⌝ , ∞ = # σ, σσ ≠ [], mon(σσ), ∀ m. ¬ n < m → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m) ⊑ σσ(n)), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∃ n0. ⌜n0⌝ < # σσ ∧ σ.take(n + 1) ⊑ σσ(n0) ⊦
Used terms: n + 1
| # σ0 = ⌜n⌝ , ∞ = # σ, σσ ≠ [], mon(σσ), ∀ m. ¬ n < m → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m) ⊑ σσ(n)), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∃ n0. ⌜n0⌝ < # σσ ∧ σ.take(n + 1) ⊑ σσ(n0) ⊦ |
# σ0 = ⌜n⌝ , ∞ = # σ, σσ ≠ [], ⌜n0⌝ < # σσ, mon(σσ), σ.take(n + 1) ⊑ σσ(n0), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ m. ¬ n < m → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m) ⊑ σσ(n)) ⊦
| # σ0 = ⌜n⌝ , ∞ = # σ, σσ ≠ [], ⌜n0⌝ < # σσ, mon(σσ), σ.take(n + 1) ⊑ σσ(n0), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ m. ¬ n < m → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m) ⊑ σσ(n)) ⊦ |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
# σ0 = ⌜n⌝ , ∞ = # σ, σσ ≠ [], ⌜n0⌝ < # σσ, mon(σσ), ∀ m. ¬ n < m → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m) ⊑ σσ(n)), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∃ σ1. σ.take(n + 1) + σ1 = σσ(n0) ⊦
Used terms: σ.take(n + 1), σσ(n0)
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| # σ0 = ⌜n⌝ , ∞ = # σ, σσ ≠ [], ⌜n0⌝ < # σσ, mon(σσ), ∀ m. ¬ n < m → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m) ⊑ σσ(n)), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∃ σ1. σ.take(n + 1) + σ1 = σσ(n0) ⊦ |
# σ0 = ⌜n⌝ , σ.take(n + 1) + σ1 = σσ(n0), ∞ = # σ, σσ ≠ [], ⌜n0⌝ < # σσ, mon(σσ), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ m. ¬ n < m → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m) ⊑ σσ(n)) ⊦
| # σ0 = ⌜n⌝ , σ.take(n + 1) + σ1 = σσ(n0), ∞ = # σ, σσ ≠ [], ⌜n0⌝ < # σσ, mon(σσ), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ m. ¬ n < m → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m) ⊑ σσ(n)) ⊦ |
# σ0 = ⌜n⌝ , σ.take(n + 1) + σ1 = σσ(n0), ∞ = # σ, σσ ≠ [], ⌜n0⌝ < # σσ, mon(σσ), ⌜n0⌝ < # σσ → σσ(n0) ⊑ σ0, ∀ m. ¬ n < m → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m) ⊑ σσ(n)), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦
Used terms: n0
| # σ0 = ⌜n⌝ , σ.take(n + 1) + σ1 = σσ(n0), ∞ = # σ, σσ ≠ [], ⌜n0⌝ < # σσ, mon(σσ), ⌜n0⌝ < # σσ → σσ(n0) ⊑ σ0, ∀ m. ¬ n < m → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m) ⊑ σσ(n)), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦ |
# σ0 = ⌜n⌝ , σ.take(n + 1) + σ1 = σσ(n0), ∞ = # σ, σσ ≠ [], ⌜n0⌝ < # σσ, mon(σσ), σσ(n0) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ m. ¬ n < m → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m) ⊑ σσ(n)) ⊦
| # σ0 = ⌜n⌝ , σ.take(n + 1) + σ1 = σσ(n0), ∞ = # σ, σσ ≠ [], ⌜n0⌝ < # σσ, mon(σσ), σσ(n0) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ m. ¬ n < m → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m) ⊑ σσ(n)) ⊦ |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
# σ0 = ⌜n⌝ , σ.take(n + 1) + σ1 = σσ(n0), ∞ = # σ, σσ ≠ [], ⌜n0⌝ < # σσ, mon(σσ), ∀ m. ¬ n < m → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m) ⊑ σσ(n)), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∃ σ1. σσ(n0) + σ1 = σ0 ⊦
Used terms: σσ(n0), σ0
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| # σ0 = ⌜n⌝ , σ.take(n + 1) + σ1 = σσ(n0), ∞ = # σ, σσ ≠ [], ⌜n0⌝ < # σσ, mon(σσ), ∀ m. ¬ n < m → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m) ⊑ σσ(n)), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∃ σ1. σσ(n0) + σ1 = σ0 ⊦ |
σ.take(n + 1) + σ1 = σσ(n0), # σσ(n0) + # σ2 = ⌜n⌝ , ∞ = # σ, σσ ≠ [], ⌜n0⌝ < # σσ, mon(σσ), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ m. ¬ n < m → (∃ n. ⌜n⌝ < # σσ ∧ (σσ(n0) + σ2).take(m) ⊑ σσ(n)) ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream-old ⊦ #(σ + σ1) = # σ + # σ1; (s)
| σ.take(n + 1) + σ1 = σσ(n0), # σσ(n0) + # σ2 = ⌜n⌝ , ∞ = # σ, σσ ≠ [], ⌜n0⌝ < # σσ, mon(σσ), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ m. ¬ n < m → (∃ n. ⌜n⌝ < # σσ ∧ (σσ(n0) + σ2).take(m) ⊑ σσ(n)) ⊦ |
Used simplifier rules: ⊦ #(σ + σ1) = # σ + # σ1; (s) ⊦ ¬ ∞ < n∞; (s) ¬ # σ < ⌜n⌝ ⊦ # σ.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 append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream-old ⊦ ⌜n⌝ + n∞ = ⌜n⌝ ↔ n∞ = ⌜0⌝ ; (s) ⊦ ⌜n⌝ + n∞ = ⌜0⌝ ↔ n∞ = ⌜0⌝ ∧ n = 0; (ws) 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
| ⌜m⌝ = # σ, # σ ≠ # σ0, σσ ≠ [], mon(σσ), ∀ m. ¬ # σ0 < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m) ⊑ σσ(n)), ∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦ |
⌜m⌝ = # σ, σσ ≠ [], ⌜m⌝ ≠ # σ0, mon(σσ), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)), ∀ m. ¬ # σ0 < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m) ⊑ σσ(n)) ⊦
| ⌜m⌝ = # σ, σσ ≠ [], ⌜m⌝ ≠ # σ0, mon(σσ), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)), ∀ m. ¬ # σ0 < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m) ⊑ σσ(n)) ⊦ |
⌜m⌝ = # σ, σσ ≠ [], ⌜m⌝ ≠ # σ0, ⌜m⌝ < # σ0, mon(σσ), ∀ m. ¬ # σ0 < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m) ⊑ σσ(n)), ∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦
⌜m⌝ = # σ, σσ ≠ [], ⌜m⌝ ≠ # σ0, mon(σσ), ¬ ⌜m⌝ < # σ0, ∀ m. ¬ # σ0 < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m) ⊑ σσ(n)), ∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦
Used formulas: ⌜m⌝ < # σ0
| ⌜m⌝ = # σ, σσ ≠ [], ⌜m⌝ ≠ # σ0, ⌜m⌝ < # σ0, mon(σσ), ∀ m. ¬ # σ0 < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m) ⊑ σσ(n)), ∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦ |
⌜m⌝ = # σ, σσ ≠ [], ⌜m⌝ ≠ # σ0, ⌜m⌝ < # σ0, mon(σσ), ¬ # σ0 < ⌜m + 1⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m + 1) ⊑ σσ(n)), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)) ⊦
Used terms: m + 1
| ⌜m⌝ = # σ, σσ ≠ [], ⌜m⌝ ≠ # σ0, ⌜m⌝ < # σ0, mon(σσ), ¬ # σ0 < ⌜m + 1⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m + 1) ⊑ σσ(n)), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)) ⊦ |
⌜m⌝ = # σ, σσ ≠ [], ⌜m⌝ ≠ # σ0, ⌜m⌝ < # σ0, ⌜n⌝ < # σσ, mon(σσ), σ0.take(m + 1) ⊑ σσ(n), ∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦
Used simplifier rules: 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)
| ⌜m⌝ = # σ, σσ ≠ [], ⌜m⌝ ≠ # σ0, ⌜m⌝ < # σ0, ⌜n⌝ < # σσ, mon(σσ), σ0.take(m + 1) ⊑ σσ(n), ∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦ |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
⌜m⌝ = # σ, σσ ≠ [], ⌜m⌝ ≠ # σ0, ⌜n⌝ < # σσ, ⌜m⌝ < # σ0, mon(σσ), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)), ∃ σ1. σ0.take(m + 1) + σ1 = σσ(n) ⊦
Used terms: σ0.take(m + 1), σσ(n)
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| ⌜m⌝ = # σ, σσ ≠ [], ⌜m⌝ ≠ # σ0, ⌜n⌝ < # σσ, ⌜m⌝ < # σ0, mon(σσ), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)), ∃ σ1. σ0.take(m + 1) + σ1 = σσ(n) ⊦ |
σ0.take(m + 1) + σ1 = σσ(n), ⌜m⌝ = # σ, σσ ≠ [], ⌜m⌝ ≠ # σ0, ⌜m⌝ < # σ0, ⌜n⌝ < # σσ, mon(σσ), ∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦
| σ0.take(m + 1) + σ1 = σσ(n), ⌜m⌝ = # σ, σσ ≠ [], ⌜m⌝ ≠ # σ0, ⌜m⌝ < # σ0, ⌜n⌝ < # σσ, mon(σσ), ∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦ |
σ0.take(m + 1) + σ1 = σσ(n), ⌜m⌝ = # σ, σσ ≠ [], ⌜m⌝ ≠ # σ0, ⌜n⌝ < # σσ, ⌜m⌝ < # σ0, mon(σσ), ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)) ⊦
Used terms: n
| σ0.take(m + 1) + σ1 = σσ(n), ⌜m⌝ = # σ, σσ ≠ [], ⌜m⌝ ≠ # σ0, ⌜n⌝ < # σσ, ⌜m⌝ < # σ0, mon(σσ), ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)) ⊦ |
σ0.take(m + 1) + σ1 = σσ(n), ⌜m⌝ = # σ, σσ ≠ [], ⌜m⌝ ≠ # σ0, ⌜m⌝ < # σ0, ⌜n⌝ < # σσ, mon(σσ), σσ(n) ⊑ σ, ∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0 ⊦
| σ0.take(m + 1) + σ1 = σσ(n), ⌜m⌝ = # σ, σσ ≠ [], ⌜m⌝ ≠ # σ0, ⌜m⌝ < # σ0, ⌜n⌝ < # σσ, mon(σσ), σσ(n) ⊑ σ, ∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0 ⊦ |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
σ0.take(m + 1) + σ1 = σσ(n), ⌜m⌝ = # σ, σσ ≠ [], ⌜m⌝ ≠ # σ0, ⌜n⌝ < # σσ, ⌜m⌝ < # σ0, mon(σσ), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)), ∃ σ1. σσ(n) + σ1 = σ ⊦
Used terms: σσ(n), σ
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| σ0.take(m + 1) + σ1 = σσ(n), ⌜m⌝ = # σ, σσ ≠ [], ⌜m⌝ ≠ # σ0, ⌜n⌝ < # σσ, ⌜m⌝ < # σ0, mon(σσ), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)), ∃ σ1. σσ(n) + σ1 = σ ⊦ |
σ0.take(m + 1) + σ1 = σσ(n), ⌜m⌝ = # σσ(n) + # σ2, σσ ≠ [], ⌜m⌝ ≠ # σ0, ⌜n⌝ < # σσ, ⌜m⌝ < # σ0, mon(σσ), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ m0. ¬ m < m0 → (∃ n0. ⌜n0⌝ < # σσ ∧ (σσ(n) + σ2).take(m0) ⊑ σσ(n0)) ⊦
Used simplifier rules: ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream-old ⊦ #(σ + σ1) = # σ + # σ1; (s)
| σ0.take(m + 1) + σ1 = σσ(n), ⌜m⌝ = # σσ(n) + # σ2, σσ ≠ [], ⌜m⌝ ≠ # σ0, ⌜n⌝ < # σσ, ⌜m⌝ < # σ0, mon(σσ), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ m0. ¬ m < m0 → (∃ n0. ⌜n0⌝ < # σσ ∧ (σσ(n) + σ2).take(m0) ⊑ σσ(n0)) ⊦ |
Used simplifier rules: ⊦ #(σ + σ1) = # σ + # σ1; (s) ⊦ # σ < ⌜n⌝ + ⌜1⌝ ↔ ¬ ⌜n⌝ < # σ; (s) ¬ # σ < ⌜n⌝ ⊦ # σ.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 append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream-old ⊦ ⌜n⌝ + n∞ = ⌜n⌝ ↔ n∞ = ⌜0⌝ ; (s) ⊦ ⌜n⌝ + n∞ = ⌜0⌝ ↔ n∞ = ⌜0⌝ ∧ n = 0; (ws) 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
| ⌜m⌝ = # σ, σσ ≠ [], ⌜m⌝ ≠ # σ0, mon(σσ), ¬ ⌜m⌝ < # σ0, ∀ m. ¬ # σ0 < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m) ⊑ σσ(n)), ∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦ |
⌜m⌝ = # σ, ⌜m0⌝ = # σ0, σσ ≠ [], ⌜m⌝ ≠ # σ0, mon(σσ), ¬ ⌜m⌝ < # σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)), ∀ m. ¬ # σ0 < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m) ⊑ σσ(n)) ⊦
Used simplifier rules: Natinf freely generated by ∞, ⌝; ⊦ ⌜n⌝ ≠ ∞; (s) ⊦ ⌜m⌝ < ∞; (s)
| ⌜m⌝ = # σ, ⌜m0⌝ = # σ0, σσ ≠ [], ⌜m⌝ ≠ # σ0, mon(σσ), ¬ ⌜m⌝ < # σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)), ∀ m. ¬ # σ0 < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m) ⊑ σσ(n)) ⊦ |
⌜m0⌝ = # σ0, ⌜m⌝ = # σ, m ≠ m0, σσ ≠ [], m0 < m, mon(σσ), ∀ m1. ¬ m0 < m1 → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m1) ⊑ σσ(n)), ∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ m ≠ n → (m < n ↔ ¬ n < m); (ss) ⊦ ⌜n⌝ = ⌜n0⌝ ↔ n = n0; (s)
| ⌜m0⌝ = # σ0, ⌜m⌝ = # σ, m ≠ m0, σσ ≠ [], m0 < m, mon(σσ), ∀ m1. ¬ m0 < m1 → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m1) ⊑ σσ(n)), ∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦ |
⌜m⌝ = # σ, ⌜m0⌝ = # σ0, m ≠ m0, σσ ≠ [], m0 < m, mon(σσ), ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ m1. ¬ m0 < m1 → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m1) ⊑ σσ(n)) ⊦
Used terms: m
| ⌜m⌝ = # σ, ⌜m0⌝ = # σ0, m ≠ m0, σσ ≠ [], m0 < m, mon(σσ), ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ m1. ¬ m0 < m1 → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m1) ⊑ σσ(n)) ⊦ |
⌜m⌝ = # σ, ⌜m0⌝ = # σ0, m ≠ m0, σσ ≠ [], m0 < m, ⌜n⌝ < # σσ, mon(σσ), σ ⊑ σσ(n), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ m1. ¬ m0 < m1 → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m1) ⊑ σσ(n)) ⊦
Used simplifier rules: ⊦ ¬ n < n; (s) ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ # σ = ⌜n⌝ → σ.take(n) = σ; (s)
| ⌜m⌝ = # σ, ⌜m0⌝ = # σ0, m ≠ m0, σσ ≠ [], m0 < m, ⌜n⌝ < # σσ, mon(σσ), σ ⊑ σσ(n), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ m1. ¬ m0 < m1 → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m1) ⊑ σσ(n)) ⊦ |
⊦ σ1 ⊑ σ2 → (σ2 ⊑ σ1 ↔ σ1 = σ2)
⌜m0⌝ = # σ0, ⌜m⌝ = # σ, m ≠ m0, σσ ≠ [], ⌜n⌝ < # σσ, m0 < m, mon(σσ), σ ⊑ σσ(n), ¬ σσ(n) ⊑ σ, ∀ m1. ¬ m0 < m1 → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m1) ⊑ σσ(n)), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦
σσ(n) = σ, ⌜m0⌝ = # σ0, ⌜m⌝ = # σ, m ≠ m0, σσ ≠ [], ⌜n⌝ < # σσ, m0 < m, mon(σσ), σσ(n) ⊑ σ, ∀ m1. ¬ m0 < m1 → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m1) ⊑ σσ(n)), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦
Used terms: σ, σσ(n)
| ⊦ σ1 ⊑ σ2 → (σ2 ⊑ σ1 ↔ σ1 = σ2) |
| ⌜m0⌝ = # σ0, ⌜m⌝ = # σ, m ≠ m0, σσ ≠ [], ⌜n⌝ < # σσ, m0 < m, mon(σσ), σ ⊑ σσ(n), ¬ σσ(n) ⊑ σ, ∀ m1. ¬ m0 < m1 → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m1) ⊑ σσ(n)), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦ |
⌜m⌝ = # σ, ⌜m0⌝ = # σ0, m ≠ m0, σ ≠ σσ(n), σσ ≠ [], m0 < m, ⌜n⌝ < # σσ, mon(σσ), σ ⊑ σσ(n), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ m1. ¬ m0 < m1 → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m1) ⊑ σσ(n)) ⊦
Used simplifier rules: ⊦ σ1 ⊑ σ2 → (σ2 ⊑ σ1 ↔ σ1 = σ2); (s)
| ⌜m⌝ = # σ, ⌜m0⌝ = # σ0, m ≠ m0, σ ≠ σσ(n), σσ ≠ [], m0 < m, ⌜n⌝ < # σσ, mon(σσ), σ ⊑ σσ(n), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ m1. ¬ m0 < m1 → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m1) ⊑ σσ(n)) ⊦ |
Used simplifier rules: ⊦ σ1 ⊑ σ2 → (σ2 ⊑ σ1 ↔ σ1 = σ2); (s) Used terms: n
| σσ(n) = σ, ⌜m0⌝ = # σ0, ⌜m⌝ = # σ, m ≠ m0, σσ ≠ [], ⌜n⌝ < # σσ, m0 < m, mon(σσ), σσ(n) ⊑ σ, ∀ m1. ¬ m0 < m1 → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m1) ⊑ σσ(n)), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦ |
⌜m⌝ = # σσ(n), ⌜m0⌝ = # σ0, m ≠ m0, σσ ≠ [], m0 < m, ⌜n⌝ < # σσ, mon(σσ), ∀ n0. ⌜n0⌝ < # σσ → σσ(n0) ⊑ σσ(n), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ m1. ¬ m0 < m1 → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m1) ⊑ σσ(n)) ⊦
Used simplifier rules: ⊦ σ ⊑ σ; (s)
| ⌜m⌝ = # σσ(n), ⌜m0⌝ = # σ0, m ≠ m0, σσ ≠ [], m0 < m, ⌜n⌝ < # σσ, mon(σσ), ∀ n0. ⌜n0⌝ < # σσ → σσ(n0) ⊑ σσ(n), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ m1. ¬ m0 < m1 → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m1) ⊑ σσ(n)) ⊦ |
⌜m0⌝ = # σ0, ⌜m⌝ = # σσ(n), m ≠ m0, σσ ≠ [], ⌜n⌝ < # σσ, m0 < m, mon(σσ), ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ m1. ¬ m0 < m1 → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m1) ⊑ σσ(n)), ∀ n0. ⌜n0⌝ < # σσ → σσ(n0) ⊑ σσ(n) ⊦
Used terms: n
| ⌜m0⌝ = # σ0, ⌜m⌝ = # σσ(n), m ≠ m0, σσ ≠ [], ⌜n⌝ < # σσ, m0 < m, mon(σσ), ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ m1. ¬ m0 < m1 → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m1) ⊑ σσ(n)), ∀ n0. ⌜n0⌝ < # σσ → σσ(n0) ⊑ σσ(n) ⊦ |
⌜m⌝ = # σσ(n), ⌜m0⌝ = # σ0, m ≠ m0, σσ ≠ [], m0 < m, ⌜n⌝ < # σσ, mon(σσ), σσ(n) ⊑ σ0, ∀ n0. ⌜n0⌝ < # σσ → σσ(n0) ⊑ σσ(n), ∀ m1. ¬ m0 < m1 → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m1) ⊑ σσ(n)) ⊦
| ⌜m⌝ = # σσ(n), ⌜m0⌝ = # σ0, m ≠ m0, σσ ≠ [], m0 < m, ⌜n⌝ < # σσ, mon(σσ), σσ(n) ⊑ σ0, ∀ n0. ⌜n0⌝ < # σσ → σσ(n0) ⊑ σσ(n), ∀ m1. ¬ m0 < m1 → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m1) ⊑ σσ(n)) ⊦ |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
⌜m0⌝ = # σ0, ⌜m⌝ = # σσ(n), m ≠ m0, σσ ≠ [], ⌜n⌝ < # σσ, m0 < m, mon(σσ), ∀ m1. ¬ m0 < m1 → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m1) ⊑ σσ(n)), ∀ n0. ⌜n0⌝ < # σσ → σσ(n0) ⊑ σσ(n), ∃ σ1. σσ(n) + σ1 = σ0 ⊦
Used terms: σσ(n), σ0
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| ⌜m0⌝ = # σ0, ⌜m⌝ = # σσ(n), m ≠ m0, σσ ≠ [], ⌜n⌝ < # σσ, m0 < m, mon(σσ), ∀ m1. ¬ m0 < m1 → (∃ n. ⌜n⌝ < # σσ ∧ σ0.take(m1) ⊑ σσ(n)), ∀ n0. ⌜n0⌝ < # σσ → σσ(n0) ⊑ σσ(n), ∃ σ1. σσ(n) + σ1 = σ0 ⊦ |
⌜m⌝ = # σσ(n), ⌜m0⌝ = ⌜m⌝ + # σ1, m ≠ m0, σσ ≠ [], m0 < m, ⌜n⌝ < # σσ, mon(σσ), ∀ n0. ⌜n0⌝ < # σσ → σσ(n0) ⊑ σσ(n), ∀ m1. ¬ m0 < m1 → (∃ n0. ⌜n0⌝ < # σσ ∧ (σσ(n) + σ1).take(m1) ⊑ σσ(n0)) ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream-old ⊦ #(σ + σ1) = # σ + # σ1; (s)
| ⌜m⌝ = # σσ(n), ⌜m0⌝ = ⌜m⌝ + # σ1, m ≠ m0, σσ ≠ [], m0 < m, ⌜n⌝ < # σσ, mon(σσ), ∀ n0. ⌜n0⌝ < # σσ → σσ(n0) ⊑ σσ(n), ∀ m1. ¬ m0 < m1 → (∃ n0. ⌜n0⌝ < # σσ ∧ (σσ(n) + σ1).take(m1) ⊑ σσ(n0)) ⊦ |
Used simplifier rules: Stream[A] freely generated by ⌝, ⌝; ⊦ # ⌜nf⌝ = ∞; (s) ⊦ ⌜m⌝ + ∞ = ∞; (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 ⊦ ⌜n⌝ ≠ ∞; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ ⌜n⌝ + ⌜m⌝ = ⌜n0⌝ ↔ n + m = n0; (s) lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic ⊦ m = m + n ↔ n = 0; (s) ⊦ # x = 0 ↔ x = []; (s) ⊦ m + m0 < n → ¬ n + n0 < m; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic
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.