| 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
| # σ = # σ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(σσ), ⌜σ0.take(n)⌝ ⊑ σσ(n0), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∃ σ1. ⌜σ.take(n)⌝ + σ1 = σσ(n0) ⊦
Used terms: ⌜σ.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(σσ), ⌜σ0.take(n)⌝ ⊑ σσ(n0), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∃ σ1. ⌜σ.take(n)⌝ + σ1 = σσ(n0) ⊦ |
# σ = # σ0, ⌜σ.take(n)⌝ + σ3 = σσ(n0), ⌜σ.take(n)⌝ + σ2 = σσ(n1), σσ(n1) + σ1 = σσ(n0), σ.take(n) ≠ σ0.take(n), σσ ≠ [], n1 < n0, ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), ⌜σ0.take(n)⌝ ⊑ σσ(n0), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦
| # σ = # σ0, ⌜σ.take(n)⌝ + σ3 = σσ(n0), ⌜σ.take(n)⌝ + σ2 = σσ(n1), σσ(n1) + σ1 = σσ(n0), σ.take(n) ≠ σ0.take(n), σσ ≠ [], n1 < n0, ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), ⌜σ0.take(n)⌝ ⊑ σσ(n0), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦ |
# σ = # σ0, (⌜σ.take(n)⌝ + σ2) + σ1 = σσ(n0), ⌜σ.take(n)⌝ + σ3 = σσ(n0), σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, n1 < n0, mon(σσ), ⌜σ0.take(n)⌝ ⊑ σσ(n0), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0 ⊦
| # σ = # σ0, (⌜σ.take(n)⌝ + σ2) + σ1 = σσ(n0), ⌜σ.take(n)⌝ + σ3 = σσ(n0), σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, n1 < n0, mon(σσ), ⌜σ0.take(n)⌝ ⊑ σσ(n0), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0 ⊦ |
# σ = # σ0, (⌜σ.take(n)⌝ + σ2) + σ1 = ⌜σ.take(n)⌝ + σ3, σ.take(n) ≠ σ0.take(n), σσ ≠ [], n1 < n0, ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), ⌜σ0.take(n)⌝ ⊑ ⌜σ.take(n)⌝ + σ3, ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦
| # σ = # σ0, (⌜σ.take(n)⌝ + σ2) + σ1 = ⌜σ.take(n)⌝ + σ3, σ.take(n) ≠ σ0.take(n), σσ ≠ [], n1 < n0, ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), ⌜σ0.take(n)⌝ ⊑ ⌜σ.take(n)⌝ + σ3, ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦ |
# σ = # σ0, σ.take(n) ≠ σ0.take(n), σσ ≠ [], n1 < n0, ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), ⌜σ0.take(n)⌝ ⊑ ⌜σ.take(n)⌝ + σ2 + σ1, ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ ⌜x⌝ + σ0 = ⌜x⌝ + σ1 ↔ σ0 = σ1; (s)
| # σ = # σ0, σ.take(n) ≠ σ0.take(n), σσ ≠ [], n1 < n0, ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), ⌜σ0.take(n)⌝ ⊑ ⌜σ.take(n)⌝ + σ2 + σ1, ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦ |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
# σ = # σ0, σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, n1 < n0, mon(σσ), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∃ σ3. ⌜σ0.take(n)⌝ + σ3 = ⌜σ.take(n)⌝ + σ2 + σ1 ⊦
Used terms: ⌜σ0.take(n)⌝ , ⌜σ.take(n)⌝ + σ2 + σ1
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| # σ = # σ0, σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, n1 < n0, mon(σσ), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∃ σ3. ⌜σ0.take(n)⌝ + σ3 = ⌜σ.take(n)⌝ + σ2 + σ1 ⊦ |
# σ = # σ0, ⌜σ0.take(n)⌝ + σ3 = ⌜σ.take(n)⌝ + σ2 + σ1, σ.take(n) ≠ σ0.take(n), σσ ≠ [], n1 < n0, ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), ¬ # σ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(σσ), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦ |
⊦ σ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), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, n1 < n0, mon(σσ), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ 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), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, n1 < n0, mon(σσ), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n0. ¬ #(⌜σ0.take(n)⌝ + σ3) < ⌜n0⌝ → (⌜σ0.take(n)⌝ + σ3).take(n0) = (⌜σ.take(n)⌝ + σ2 + σ1).take(n0) ⊦ |
# σ = # σ0, # σ3 = # σ2 + # σ1, σ.take(n) ≠ σ0.take(n), σσ ≠ [], n1 < n0, ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n2. ¬ ⌜n⌝ + # σ3 < ⌜n2⌝ → (⌜σ0.take(n)⌝ + σ3).take(n2) = (⌜σ.take(n)⌝ + σ2 + σ1).take(n2) ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ¬ # σ < ⌜n⌝ ⊦ # σ.take(n) = n; (s) ⊦ # ⌜σ.take(n)⌝ = ⌜# σ.take(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, # σ3 = # σ2 + # σ1, σ.take(n) ≠ σ0.take(n), σσ ≠ [], n1 < n0, ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n2. ¬ ⌜n⌝ + # σ3 < ⌜n2⌝ → (⌜σ0.take(n)⌝ + σ3).take(n2) = (⌜σ.take(n)⌝ + σ2 + σ1).take(n2) ⊦ |
# σ3 = # σ2 + # σ1, # σ = # σ0, σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, n1 < n0, mon(σσ), ¬ # σ0 < ⌜n⌝ , ¬ ⌜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
| # σ3 = # σ2 + # σ1, # σ = # σ0, σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, n1 < n0, mon(σσ), ¬ # σ0 < ⌜n⌝ , ¬ ⌜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)
| # σ = # σ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)⌝ .take(n) = (⌜σ.take(n)⌝ + σ2 + σ1).take(n), σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, n1 < n0, mon(σσ), ¬ # ⌜σ0.take(n)⌝ < ⌜n⌝ , ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0 ⊦
Used simplifier rules: ⊦ # σ < ⌜n⌝ → (σ + σ0).take(n) = σ.l + σ0.take(n - # σ.l); (s) ⊦ ⌜x⌝ .l = x; (s) ⊦ m - m = 0; (s) ⊦ σ.take(0) = []; (s) ⊦ x + [] = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ # ⌜σ.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) |
| # σ3 = # σ2 + # σ1, # σ = # σ0, ⌜σ0.take(n)⌝ .take(n) = (⌜σ.take(n)⌝ + σ2 + σ1).take(n), σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, n1 < n0, mon(σσ), ¬ # ⌜σ0.take(n)⌝ < ⌜n⌝ , ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0 ⊦ |
# σ = # σ0, # σ3 = # σ2 + # σ1, σ0.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: ⊦ m ≤ m; (s) ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ¬ # σ < ⌜n⌝ ⊦ # σ.take(n) = n; (s) ⊦ # ⌜σ.take(n)⌝ = ⌜# σ.take(n)⌝ ; (s) ¬ # σ < ⌜n⌝ ⊦ σ.take(n).take(n) = σ.take(n); (s) ⊦ ⌜x⌝ .take(n) = x.take(n); (s)
| # σ = # σ0, # σ3 = # σ2 + # σ1, σ0.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)
Used simplifier rules: ⊦ ⌜x⌝ .take(n) = x.take(n); (s) ¬ # σ < ⌜n⌝ ⊦ σ.take(n).take(n) = σ.take(n); (s) ⊦ # σ < ⌜n⌝ → (σ + σ0).take(n) = σ.l + σ0.take(n - # σ.l); (s) ⊦ ⌜x⌝ .l = x; (s) ¬ # σ < ⌜n⌝ ⊦ # σ.take(n) = n; (s) ⊦ m - m = 0; (s) ⊦ σ.take(0) = []; (s) ⊦ x + [] = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream Used terms: ⌜σ.take(n)⌝ , σ2 + σ1, 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
| # σ = # σ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(σσ), ⌜σ.take(n)⌝ ⊑ σσ(n1), ⌜σ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) ≠ σ0.take(n), σσ ≠ [], ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), ⌜σ.take(n)⌝ ⊑ σσ(n1), ⌜σ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)⌝ + σ1 = σσ(n1), σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, mon(σσ), σσ(n0) ⊑ σσ(n1), ⌜σ0.take(n)⌝ ⊑ σσ(n0), ⌜σ.take(n)⌝ ⊑ σσ(n1), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0 ⊦
| # σ = # σ0, ⌜σ0.take(n)⌝ + σ1 = σσ(n1), σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, mon(σσ), σσ(n0) ⊑ σσ(n1), ⌜σ0.take(n)⌝ ⊑ σσ(n0), ⌜σ.take(n)⌝ ⊑ σσ(n1), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0 ⊦ |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
# σ = # σ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. ⌜σ.take(n)⌝ + σ1 = σσ(n1) ⊦
Used terms: ⌜σ.take(n)⌝ , σσ(n1)
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| # σ = # σ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. ⌜σ.take(n)⌝ + σ1 = σσ(n1) ⊦ |
# σ = # σ0, ⌜σ.take(n)⌝ + σ2 = σσ(n1), ⌜σ0.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, ⌜σ.take(n)⌝ + σ2 = σσ(n1), ⌜σ0.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, ⌜σ0.take(n)⌝ + σ1 = σσ(n1), ⌜σ.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, ⌜σ0.take(n)⌝ + σ1 = σσ(n1), ⌜σ.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), ⌜σ.take(n)⌝ + σ2 = σσ(n1), ⌜σ0.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), ⌜σ.take(n)⌝ + σ2 = σσ(n1), ⌜σ0.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, ⌜σ0.take(n)⌝ + σ1 = σσ(n1), ⌜σ.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, ⌜σ0.take(n)⌝ + σ1 = σσ(n1), ⌜σ.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), ⌜σ.take(n)⌝ + σ2 = σσ(n1), ⌜σ0.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), ⌜σ.take(n)⌝ + σ2 = σσ(n1), ⌜σ0.take(n)⌝ + σ1 = σσ(n1), σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, mon(σσ), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0 ⊦ |
# σ = # σ0, ⌜σ0.take(n)⌝ + σ1 = ⌜σ.take(n)⌝ + σ2, ⌜σ0.take(n)⌝ + σ3 = σσ(n0), σσ(n0) + σ4 = ⌜σ.take(n)⌝ + σ2, σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦
| # σ = # σ0, ⌜σ0.take(n)⌝ + σ1 = ⌜σ.take(n)⌝ + σ2, ⌜σ0.take(n)⌝ + σ3 = σσ(n0), σσ(n0) + σ4 = ⌜σ.take(n)⌝ + σ2, σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦ |
# σ = # σ0, σσ(n0) + σ4 = ⌜σ.take(n)⌝ + σ2, ⌜σ0.take(n)⌝ + σ3 = σσ(n0), ⌜σ0.take(n)⌝ + σ1 = σσ(n0) + σ4, σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, mon(σσ), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0 ⊦
| # σ = # σ0, σσ(n0) + σ4 = ⌜σ.take(n)⌝ + σ2, ⌜σ0.take(n)⌝ + σ3 = σσ(n0), ⌜σ0.take(n)⌝ + σ1 = σσ(n0) + σ4, σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, mon(σσ), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0 ⊦ |
# σ = # σ0, ⌜σ0.take(n)⌝ + σ1 = (⌜σ0.take(n)⌝ + σ3) + σ4, (⌜σ0.take(n)⌝ + σ3) + σ4 = ⌜σ.take(n)⌝ + σ2, σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦
| # σ = # σ0, ⌜σ0.take(n)⌝ + σ1 = (⌜σ0.take(n)⌝ + σ3) + σ4, (⌜σ0.take(n)⌝ + σ3) + σ4 = ⌜σ.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 = ⌜σ.take(n)⌝ + σ2, σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ ⌜x⌝ + σ0 = ⌜x⌝ + σ1 ↔ σ0 = σ1; (s)
| # σ = # σ0, (⌜σ0.take(n)⌝ + σ3) + σ4 = ⌜σ.take(n)⌝ + σ2, σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦ |
⊦ σ0 = σ1 ↔ # σ0 = # σ1 ∧ (∀ n. ¬ # σ0 < ⌜n⌝ → σ0.take(n) = σ1.take(n))
#((⌜σ0.take(n)⌝ + σ3) + σ4) = #(⌜σ.take(n)⌝ + σ2), # σ = # σ0, σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, mon(σσ), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n0. ¬ #((⌜σ0.take(n)⌝ + σ3) + σ4) < ⌜n0⌝ → ((⌜σ0.take(n)⌝ + σ3) + σ4).take(n0) = (⌜σ.take(n)⌝ + σ2).take(n0) ⊦
Used terms: (⌜σ0.take(n)⌝ + σ3) + σ4, ⌜σ.take(n)⌝ + σ2
| ⊦ σ0 = σ1 ↔ # σ0 = # σ1 ∧ (∀ n. ¬ # σ0 < ⌜n⌝ → σ0.take(n) = σ1.take(n)) |
| #((⌜σ0.take(n)⌝ + σ3) + σ4) = #(⌜σ.take(n)⌝ + σ2), # σ = # σ0, σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, mon(σσ), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n0. ¬ #((⌜σ0.take(n)⌝ + σ3) + σ4) < ⌜n0⌝ → ((⌜σ0.take(n)⌝ + σ3) + σ4).take(n0) = (⌜σ.take(n)⌝ + σ2).take(n0) ⊦ |
# σ = # σ0, # σ3 + # σ4 = # σ2, σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n2. ¬ ⌜n⌝ + # σ2 < ⌜n2⌝ → ((⌜σ0.take(n)⌝ + σ3) + σ4).take(n2) = (⌜σ.take(n)⌝ + σ2).take(n2) ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ #(σ + σ1) = # σ + # σ1; (s) ¬ # σ < ⌜n⌝ ⊦ # σ.take(n) = n; (s) ⊦ # ⌜σ.take(n)⌝ = ⌜# σ.take(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⌝ + n∞1 = ⌜n⌝ + n∞2 ↔ n∞1 = n∞2; (s)
| # σ = # σ0, # σ3 + # σ4 = # σ2, σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n2. ¬ ⌜n⌝ + # σ2 < ⌜n2⌝ → ((⌜σ0.take(n)⌝ + σ3) + σ4).take(n2) = (⌜σ.take(n)⌝ + σ2).take(n2) ⊦ |
# σ = # σ0, # σ3 + # σ4 = # σ2, σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, mon(σσ), ¬ # σ0 < ⌜n⌝ , ¬ ⌜n⌝ + # σ2 < ⌜n⌝ → ((⌜σ0.take(n)⌝ + σ3) + σ4).take(n) = (⌜σ.take(n)⌝ + σ2).take(n), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0 ⊦
Used terms: n
| # σ = # σ0, # σ3 + # σ4 = # σ2, σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, mon(σσ), ¬ # σ0 < ⌜n⌝ , ¬ ⌜n⌝ + # σ2 < ⌜n⌝ → ((⌜σ0.take(n)⌝ + σ3) + σ4).take(n) = (⌜σ.take(n)⌝ + σ2).take(n), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0 ⊦ |
# σ = # σ0, # σ3 + # σ4 = # σ2, ((⌜σ0.take(n)⌝ + σ3) + σ4).take(n) = (⌜σ.take(n)⌝ + σ2).take(n), σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜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)
| # σ = # σ0, # σ3 + # σ4 = # σ2, ((⌜σ0.take(n)⌝ + σ3) + σ4).take(n) = (⌜σ.take(n)⌝ + σ2).take(n), σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦ |
⊦ ¬ # σ < ⌜n⌝ → (σ + σ0).take(n) = σ.take(n)
# σ = # σ0, # σ3 + # σ4 = # σ2, (⌜σ0.take(n)⌝ + σ3).take(n) = (⌜σ.take(n)⌝ + σ2).take(n), σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, mon(σσ), ¬ #(⌜σ0.take(n)⌝ + σ3) < ⌜n⌝ , ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0 ⊦
Used simplifier rules: ⊦ # σ < ⌜n⌝ → (σ + σ0).take(n) = σ.l + σ0.take(n - # σ.l); (s) ⊦ #(σ + σ1) = # σ + # σ1; (s) ⊦ # ⌜σ.take(n)⌝ = ⌜# σ.take(n)⌝ ; (s) ¬ # σ < ⌜n⌝ ⊦ # σ.take(n) = n; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ ¬ 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: ⌜σ0.take(n)⌝ + σ3, σ4, n
| ⊦ ¬ # σ < ⌜n⌝ → (σ + σ0).take(n) = σ.take(n) |
| # σ = # σ0, # σ3 + # σ4 = # σ2, (⌜σ0.take(n)⌝ + σ3).take(n) = (⌜σ.take(n)⌝ + σ2).take(n), σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, mon(σσ), ¬ #(⌜σ0.take(n)⌝ + σ3) < ⌜n⌝ , ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0 ⊦ |
# σ = # σ0, # σ3 + # σ4 = # σ2, (⌜σ0.take(n)⌝ + σ3).take(n) = (⌜σ.take(n)⌝ + σ2).take(n), σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜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 ¬ # σ < ⌜n⌝ ⊦ # σ.take(n) = n; (s) ⊦ # ⌜σ.take(n)⌝ = ⌜# σ.take(n)⌝ ; (s) ⊦ #(σ + σ1) = # σ + # σ1; (s)
| # σ = # σ0, # σ3 + # σ4 = # σ2, (⌜σ0.take(n)⌝ + σ3).take(n) = (⌜σ.take(n)⌝ + σ2).take(n), σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦ |
⊦ ¬ # σ < ⌜n⌝ → (σ + σ0).take(n) = σ.take(n)
# σ = # σ0, # σ3 + # σ4 = # σ2, ⌜σ0.take(n)⌝ .take(n) = (⌜σ.take(n)⌝ + σ2).take(n), σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, mon(σσ), ¬ # ⌜σ0.take(n)⌝ < ⌜n⌝ , ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0 ⊦
Used simplifier rules: ⊦ # σ < ⌜n⌝ → (σ + σ0).take(n) = σ.l + σ0.take(n - # σ.l); (s) ⊦ ⌜x⌝ .l = x; (s) ⊦ m - m = 0; (s) ⊦ σ.take(0) = []; (s) ⊦ x + [] = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ # ⌜σ.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, # σ3 + # σ4 = # σ2, ⌜σ0.take(n)⌝ .take(n) = (⌜σ.take(n)⌝ + σ2).take(n), σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n0⌝ < # σσ, ⌜n1⌝ < # σσ, mon(σσ), ¬ # ⌜σ0.take(n)⌝ < ⌜n⌝ , ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0 ⊦ |
# σ = # σ0, # σ3 + # σ4 = # σ2, σ0.take(n) = (⌜σ.take(n)⌝ + σ2).take(n), σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜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) ⊦ # ⌜σ.take(n)⌝ = ⌜# σ.take(n)⌝ ; (s) ¬ # σ < ⌜n⌝ ⊦ σ.take(n).take(n) = σ.take(n); (s) ⊦ ⌜x⌝ .take(n) = x.take(n); (s)
| # σ = # σ0, # σ3 + # σ4 = # σ2, σ0.take(n) = (⌜σ.take(n)⌝ + σ2).take(n), σ.take(n) ≠ σ0.take(n), σσ ≠ [], ⌜n1⌝ < # σσ, ⌜n0⌝ < # σσ, mon(σσ), ¬ # σ0 < ⌜n⌝ , ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦ |
⊦ ¬ # σ < ⌜n⌝ → (σ + σ0).take(n) = σ.take(n)
Used simplifier rules: ⊦ ⌜x⌝ .take(n) = x.take(n); (s) ¬ # σ < ⌜n⌝ ⊦ σ.take(n).take(n) = σ.take(n); (s) ⊦ # σ < ⌜n⌝ → (σ + σ0).take(n) = σ.l + σ0.take(n - # σ.l); (s) ⊦ ⌜x⌝ .l = x; (s) ¬ # σ < ⌜n⌝ ⊦ # σ.take(n) = n; (s) ⊦ m - m = 0; (s) ⊦ σ.take(0) = []; (s) ⊦ x + [] = x; (s) a: ⊦ (x + y) + z = x + y + z; from specification list append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream Used terms: ⌜σ.take(n)⌝ , σ2, 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 ⊦ #(σ + σ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) ⊦ # ⌜σ.take(n)⌝ = ⌜# σ.take(n)⌝ ; (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 ⊦ ⌜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 ⊦ #(σ + σ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) ⊦ # ⌜σ.take(n)⌝ = ⌜# σ.take(n)⌝ ; (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 ⊦ ⌜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)) ⊦ |
⌜m0⌝ = # σ0, ⌜m⌝ = # σ, m ≠ m0, σσ ≠ [], ⌜n⌝ < # σσ, m0 < m, mon(σσ), σ ⊑ σσ(n), ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ m1. ¬ m0 < m1 → (∃ n. ⌜n⌝ < # σσ ∧ ⌜σ0.take(m1)⌝ ⊑ σσ(n)), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦
Used terms: n
| ⌜m0⌝ = # σ0, ⌜m⌝ = # σ, m ≠ m0, σσ ≠ [], ⌜n⌝ < # σσ, m0 < m, mon(σσ), σ ⊑ σσ(n), ⌜n⌝ < # σσ → σσ(n) ⊑ σ0, ∀ m1. ¬ m0 < m1 → (∃ n. ⌜n⌝ < # σσ ∧ ⌜σ0.take(m1)⌝ ⊑ σσ(n)), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦ |
⌜m⌝ = # σ, ⌜m0⌝ = # σ0, m ≠ m0, σσ ≠ [], m0 < m, ⌜n⌝ < # σσ, mon(σσ), σ ⊑ σσ(n), σσ(n) ⊑ σ0, σ ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ m1. ¬ m0 < m1 → (∃ n. ⌜n⌝ < # σσ ∧ ⌜σ0.take(m1)⌝ ⊑ σσ(n)) ⊦
Used simplifier rules: leq-trans: ⊦ σ ⊑ σ1 ∧ σ1 ⊑ σ2 → σ ⊑ σ2; (forward) from specification stream
| ⌜m⌝ = # σ, ⌜m0⌝ = # σ0, m ≠ m0, σσ ≠ [], m0 < m, ⌜n⌝ < # σσ, mon(σσ), σ ⊑ σσ(n), σσ(n) ⊑ σ0, σ ⊑ σ0, ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∀ m1. ¬ m0 < m1 → (∃ n. ⌜n⌝ < # σσ ∧ ⌜σ0.take(m1)⌝ ⊑ σσ(n)) ⊦ |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
⌜m0⌝ = # σ0, ⌜m⌝ = # σ, m ≠ m0, σσ ≠ [], ⌜n⌝ < # σσ, m0 < m, mon(σσ), σσ(n) ⊑ σ0, σ ⊑ σσ(n), ∀ m1. ¬ m0 < m1 → (∃ n. ⌜n⌝ < # σσ ∧ ⌜σ0.take(m1)⌝ ⊑ σσ(n)), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∃ σ1. σ + σ1 = σ0 ⊦
Used terms: σ, σ0
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| ⌜m0⌝ = # σ0, ⌜m⌝ = # σ, m ≠ m0, σσ ≠ [], ⌜n⌝ < # σσ, m0 < m, mon(σσ), σσ(n) ⊑ σ0, σ ⊑ σσ(n), ∀ m1. ¬ m0 < m1 → (∃ n. ⌜n⌝ < # σσ ∧ ⌜σ0.take(m1)⌝ ⊑ σσ(n)), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ, ∃ σ1. σ + σ1 = σ0 ⊦ |
⌜m0⌝ = ⌜m⌝ + # σ1, ⌜m⌝ = # σ, m ≠ m0, σσ ≠ [], ⌜n⌝ < # σσ, m0 < m, mon(σσ), σσ(n) ⊑ σ + σ1, σ ⊑ σσ(n), ∀ m1. ¬ m0 < m1 → (∃ n. ⌜n⌝ < # σσ ∧ ⌜(σ + σ1).take(m1)⌝ ⊑ σσ(n)), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream ⊦ σ1 ⊑ σ1 + σ2; (s) leq-trans: ⊦ σ ⊑ σ1 ∧ σ1 ⊑ σ2 → σ ⊑ σ2; (forward) from specification stream ⊦ #(σ + σ1) = # σ + # σ1; (s)
| ⌜m0⌝ = ⌜m⌝ + # σ1, ⌜m⌝ = # σ, m ≠ m0, σσ ≠ [], ⌜n⌝ < # σσ, m0 < m, mon(σσ), σσ(n) ⊑ σ + σ1, σ ⊑ σσ(n), ∀ m1. ¬ m0 < m1 → (∃ n. ⌜n⌝ < # σσ ∧ ⌜(σ + σ1).take(m1)⌝ ⊑ σσ(n)), ∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ ⊦ |
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 leq-trans: ⊦ σ ⊑ σ1 ∧ σ1 ⊑ σ2 → σ ⊑ σ2; (forward) from specification stream ⊦ 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.