| mon(σσ), σσ ≠ [] ⊦ ∃ σ. (∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n))) |
σσ ≠ [], mon(σσ) ⊦ ∃ σ. (∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)))
| σσ ≠ [], mon(σσ) ⊦ ∃ σ. (∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n))) |
σσ ≠ [], mon(σσ) ⊦ ∃ σ. (∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)))
| σσ ≠ [], mon(σσ) ⊦ ∃ σ. (∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n))) |
# σσ = ∞, σσ ≠ [], mon(σσ) ⊦ ∃ σ. (∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)))
# σσ ≠ ∞, σσ ≠ [], mon(σσ) ⊦ ∃ σ. (∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)))
Used formulas: # σσ = ∞
| # σσ = ∞, σσ ≠ [], mon(σσ) ⊦ ∃ σ. (∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n))) |
# σσ = ∞, σσ ≠ [], mon(σσ) ⊦ ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n)))
Used simplifier rules: ⊦ ⌜m⌝ < ∞; (s)
| # σσ = ∞, σσ ≠ [], mon(σσ) ⊦ ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))) |
# σσ = ∞, σσ ≠ [], mon(σσ), ∃ n. # σσ(n) = ∞ ⊦ ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n)))
# σσ = ∞, σσ ≠ [], mon(σσ) ⊦ ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))), ∃ n. # σσ(n) = ∞
Used formulas: ∃ n. # σσ(n) = ∞
| # σσ = ∞, σσ ≠ [], mon(σσ), ∃ n. # σσ(n) = ∞ ⊦ ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))) |
# σσ(n) = ∞, # σσ = ∞, σσ ≠ [], mon(σσ) ⊦ ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n)))
| # σσ(n) = ∞, # σσ = ∞, σσ ≠ [], mon(σσ) ⊦ ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))) |
# σσ = ∞, # σσ(n) = ∞, σσ ≠ [], mon(σσ) ⊦ (∀ n0. σσ(n0) ⊑ σσ(n)) ∧ (∀ m. ¬ # σσ(n) < ⌜m⌝ → (∃ n0. σσ(n).take(m) ⊑ σσ(n0)))
Used terms: σσ(n)
| # σσ = ∞, # σσ(n) = ∞, σσ ≠ [], mon(σσ) ⊦ (∀ n0. σσ(n0) ⊑ σσ(n)) ∧ (∀ m. ¬ # σσ(n) < ⌜m⌝ → (∃ n0. σσ(n).take(m) ⊑ σσ(n0))) |
# σσ = ∞, # σσ(n) = ∞, σσ ≠ [], mon(σσ) ⊦ σσ(n0) ⊑ σσ(n) ∧ (∃ n0. σσ(n).take(m) ⊑ σσ(n0))
Used simplifier rules: ⊦ ¬ ∞ < n∞; (s)
| # σσ = ∞, # σσ(n) = ∞, σσ ≠ [], mon(σσ) ⊦ σσ(n0) ⊑ σσ(n) ∧ (∃ n0. σσ(n).take(m) ⊑ σσ(n0)) |
# σσ(n) = ∞, # σσ = ∞, σσ ≠ [], mon(σσ), ¬ σσ(n0) ⊑ σσ(n) ⊦
# σσ(n) = ∞, # σσ = ∞, σσ ≠ [], mon(σσ) ⊦ ∃ n0. σσ(n).take(m) ⊑ σσ(n0)
| # σσ(n) = ∞, # σσ = ∞, σσ ≠ [], mon(σσ), ¬ σσ(n0) ⊑ σσ(n) ⊦ |
mon(σσ), m ≤ n, ⌜n⌝ < # σσ ⊦ σσ(m) ⊑ σσ(n)
# σσ = ∞, # σσ(n) = ∞, σσ ≠ [], mon(σσ), ¬ σσ(n0) ⊑ σσ(n) ⊦ n0 ≤ n ∧ ⌜n⌝ < # σσ
Used terms: σσ, n0, n
| mon(σσ), m ≤ n, ⌜n⌝ < # σσ ⊦ σσ(m) ⊑ σσ(n) |
| # σσ = ∞, # σσ(n) = ∞, σσ ≠ [], mon(σσ), ¬ σσ(n0) ⊑ σσ(n) ⊦ n0 ≤ n ∧ ⌜n⌝ < # σσ |
# σσ(n) = ∞, # σσ = ∞, σσ ≠ [], n < n0, mon(σσ), ¬ σσ(n0) ⊑ σσ(n) ⊦
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ m ≤ n ↔ ¬ n < m; (ss) ⊦ ⌜m⌝ < ∞; (s)
| # σσ(n) = ∞, # σσ = ∞, σσ ≠ [], n < n0, mon(σσ), ¬ σσ(n0) ⊑ σσ(n) ⊦ |
mon(σσ), m ≤ n, ⌜n⌝ < # σσ ⊦ σσ(m) ⊑ σσ(n)
# σσ = ∞, # σσ(n) = ∞, σσ ≠ [], n < n0, mon(σσ), σσ(n) ⊑ σσ(n0), ¬ σσ(n0) ⊑ σσ(n) ⊦
Used simplifier rules: ⊦ m < n → m ≤ n; (s) ⊦ ⌜m⌝ < ∞; (s) Used terms: σσ, n, n0
| mon(σσ), m ≤ n, ⌜n⌝ < # σσ ⊦ σσ(m) ⊑ σσ(n) |
| # σσ = ∞, # σσ(n) = ∞, σσ ≠ [], n < n0, mon(σσ), σσ(n) ⊑ σσ(n0), ¬ σσ(n0) ⊑ σσ(n) ⊦ |
# σσ(n) = ∞, # σσ = ∞, σσ(n) ≠ σσ(n0), σσ ≠ [], n < n0, mon(σσ), σσ(n) ⊑ σσ(n0) ⊦
Used simplifier rules: ⊦ σ1 ⊑ σ2 → (σ2 ⊑ σ1 ↔ σ1 = σ2); (s)
| # σσ(n) = ∞, # σσ = ∞, σσ(n) ≠ σσ(n0), σσ ≠ [], n < n0, mon(σσ), σσ(n) ⊑ σσ(n0) ⊦ |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
# σσ = ∞, # σσ(n) = ∞, σσ(n) ≠ σσ(n0), σσ ≠ [], n < n0, mon(σσ), ∃ σ1. σσ(n) + σ1 = σσ(n0) ⊦
Used terms: σσ(n), σσ(n0)
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| # σσ = ∞, # σσ(n) = ∞, σσ(n) ≠ σσ(n0), σσ ≠ [], n < n0, mon(σσ), ∃ σ1. σσ(n) + σ1 = σσ(n0) ⊦ |
# σσ(n) = ∞, # σσ = ∞, σσ(n) + σ1 = σσ(n0), σσ(n) ≠ σσ(n0), σσ ≠ [], n < n0, mon(σσ) ⊦
| # σσ(n) = ∞, # σσ = ∞, σσ(n) + σ1 = σσ(n0), σσ(n) ≠ σσ(n0), σσ ≠ [], n < n0, mon(σσ) ⊦ |
Used simplifier rules: Stream[A] freely generated by ⌝, ⌝; ⊦ # ⌜nf⌝ = ∞; (s) ⊦ ⌜nf⌝ + σ = ⌜nf⌝ ; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream-old ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ ⌜n⌝ ≠ ∞; (s)
| # σσ(n) = ∞, # σσ = ∞, σσ ≠ [], mon(σσ) ⊦ ∃ n0. σσ(n).take(m) ⊑ σσ(n0) |
# σσ = ∞, # σσ(n) = ∞, σσ ≠ [], mon(σσ), ¬ σσ(n).take(m) ⊑ σσ(n) ⊦
Used terms: n
| # σσ = ∞, # σσ(n) = ∞, σσ ≠ [], mon(σσ), ¬ σσ(n).take(m) ⊑ σσ(n) ⊦ |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
# σσ(n) = ∞, # σσ = ∞, σσ ≠ [], mon(σσ), ∀ σ1. σσ(n).take(m) + σ1 ≠ σσ(n) ⊦
Used terms: σσ(n).take(m), σσ(n)
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| # σσ(n) = ∞, # σσ = ∞, σσ ≠ [], mon(σσ), ∀ σ1. σσ(n).take(m) + σ1 ≠ σσ(n) ⊦ |
Used simplifier rules: ⊦ ¬ ∞ < n∞; (s) ¬ # σ < ⌜n⌝ ⊦ σ.take(n) + σ.drop(n) = σ ↔ true; (ss) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream-old Used terms: σσ(n).drop(m)
| # σσ = ∞, σσ ≠ [], mon(σσ) ⊦ ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))), ∃ n. # σσ(n) = ∞ |
# σσ = ∞, σσ ≠ [], mon(σσ), ∀ n. ∃ x. σσ(n + 1) = σσ(n) + ⌜x⌝ ⊦ ∃ n. # σσ(n) = ∞, ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n)))
# σσ = ∞, σσ ≠ [], mon(σσ) ⊦ ∀ n. ∃ x. σσ(n + 1) = σσ(n) + ⌜x⌝ , ∃ n. # σσ(n) = ∞, ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n)))
Used formulas: ∀ n. ∃ x. σσ(n + 1) = σσ(n) + ⌜x⌝
| # σσ = ∞, σσ ≠ [], mon(σσ), ∀ n. ∃ x. σσ(n + 1) = σσ(n) + ⌜x⌝ ⊦ ∃ n. # σσ(n) = ∞, ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))) |
# σσ = ∞, σσ ≠ [], mon(σσ), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ⊦ ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))), ∃ n. # σσ(n) = ∞
| # σσ = ∞, σσ ≠ [], mon(σσ), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ⊦ ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))), ∃ n. # σσ(n) = ∞ |
⊦ ∃ σ, ii. ii(0) = 0 ∧ (∀ n. ii(n + 1) = ii(n) + # lf(n) ∧ ¬ # σ < ⌜ii(n + 1)⌝ ∧ σ.drop(ii(n)).take(# lf(n)) = ⌜lf(n)⌝ ) ∧ (∀ m, n. m ≤ n → ii(m) ≤ ii(n)) ∧ (finp(σ) ⊃ ∃ n. # σ = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → lf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1))
# σσ = ∞, σσ ≠ [], mon(σσ), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∃ σ, ii. ii(0) = 0 ∧ (∀ n. ii(n + 1) = ii(n) + # f_Nat->List<A>(n) ∧ ¬ # σ < ⌜ii(n + 1)⌝ ∧ σ.drop(ii(n)).take(# f_Nat->List<A>(n)) = ⌜f_Nat->List<A>(n)⌝ ) ∧ (∀ m, n. m ≤ n → ii(m) ≤ ii(n)) ∧ (finp(σ) ⊃ ∃ n. # σ = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)) ⊦ ∃ n. # σσ(n) = ∞, ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n)))
Used terms: f_Nat->List<A>
| ⊦ ∃ σ, ii. ii(0) = 0 ∧ (∀ n. ii(n + 1) = ii(n) + # lf(n) ∧ ¬ # σ < ⌜ii(n + 1)⌝ ∧ σ.drop(ii(n)).take(# lf(n)) = ⌜lf(n)⌝ ) ∧ (∀ m, n. m ≤ n → ii(m) ≤ ii(n)) ∧ (finp(σ) ⊃ ∃ n. # σ = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → lf(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)) |
| # σσ = ∞, σσ ≠ [], mon(σσ), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∃ σ, ii. ii(0) = 0 ∧ (∀ n. ii(n + 1) = ii(n) + # f_Nat->List<A>(n) ∧ ¬ # σ < ⌜ii(n + 1)⌝ ∧ σ.drop(ii(n)).take(# f_Nat->List<A>(n)) = ⌜f_Nat->List<A>(n)⌝ ) ∧ (∀ m, n. m ≤ n → ii(m) ≤ ii(n)) ∧ (finp(σ) ⊃ ∃ n. # σ = ⌜ii(n)⌝ ∧ (∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ ii(m) = ii(n));∀ n. ∃ m. ii(m) ≤ n ∧ n < ii(m + 1)) ⊦ ∃ n. # σσ(n) = ∞, ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))) |
# σσ = ∞, nnf(0) = 0, σσ ≠ [], mon(σσ), (finp(σ) ⊃ # σ = ⌜nnf(n)⌝ ∧ (∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n));∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1)), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ ¬ # σ < ⌜nnf(n + 1)⌝ ∧ σ.drop(nnf(n)).take(# f_Nat->List<A>(n)) = ⌜f_Nat->List<A>(n)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ⊦ ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))), ∃ n. # σσ(n) = ∞
| # σσ = ∞, nnf(0) = 0, σσ ≠ [], mon(σσ), (finp(σ) ⊃ # σ = ⌜nnf(n)⌝ ∧ (∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n));∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1)), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ ¬ # σ < ⌜nnf(n + 1)⌝ ∧ σ.drop(nnf(n)).take(# f_Nat->List<A>(n)) = ⌜f_Nat->List<A>(n)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ⊦ ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))), ∃ n. # σσ(n) = ∞ |
# σσ = ∞, # σ = ⌜nnf(n)⌝ , nnf(0) = 0, σσ ≠ [], finp(σ), mon(σσ), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ ¬ # σ < ⌜nnf(n + 1)⌝ ∧ σ.drop(nnf(n)).take(# f_Nat->List<A>(n)) = ⌜f_Nat->List<A>(n)⌝ , ∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n) ⊦ ∃ n. # σσ(n) = ∞, ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n)))
# σσ = ∞, nnf(0) = 0, σσ ≠ [], mon(σσ), ¬ finp(σ), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ ¬ # σ < ⌜nnf(n + 1)⌝ ∧ σ.drop(nnf(n)).take(# f_Nat->List<A>(n)) = ⌜f_Nat->List<A>(n)⌝ , ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1) ⊦ ∃ n. # σσ(n) = ∞, ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n)))
| # σσ = ∞, # σ = ⌜nnf(n)⌝ , nnf(0) = 0, σσ ≠ [], finp(σ), mon(σσ), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ ¬ # σ < ⌜nnf(n + 1)⌝ ∧ σ.drop(nnf(n)).take(# f_Nat->List<A>(n)) = ⌜f_Nat->List<A>(n)⌝ , ∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n) ⊦ ∃ n. # σσ(n) = ∞, ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))) |
# σσ = ∞, # x = nnf(n), nnf(0) = 0, σσ ≠ [], mon(σσ), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n), ∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0) ⊦ ∃ n. # σσ(n) = ∞, ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n)))
Used simplifier rules: ⊦ ⌜x⌝ = ⌜x0⌝ ↔ x = x0; (s) ⊦ ⌜x⌝ .take(n) = ⌜x.take(n)⌝ ; (s) ⊦ ⌜x⌝ .drop(n) = ⌜x.drop(n)⌝ ; (s) ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ ⌜n⌝ = ⌜n0⌝ ↔ n = n0; (s) ⊦ finp(σ) ↔ (∃ x. ⌜x⌝ = σ); (as)
| # σσ = ∞, # x = nnf(n), nnf(0) = 0, σσ ≠ [], mon(σσ), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n), ∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0) ⊦ ∃ n. # σσ(n) = ∞, ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))) |
# x = nnf(n), # σσ = ∞, nnf(0) = 0, # σσ(n) ≠ ∞, σσ ≠ [], mon(σσ), ∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0), ∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ⊦ ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))), ∃ n. # σσ(n) = ∞
Used terms: n
| # x = nnf(n), # σσ = ∞, nnf(0) = 0, # σσ(n) ≠ ∞, σσ ≠ [], mon(σσ), ∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0), ∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ⊦ ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))), ∃ n. # σσ(n) = ∞ |
⊦ n∞ = ∞ ↔ ¬(∃ n. n∞ = ⌜n⌝ )
# σσ = ∞, # x = nnf(n), nnf(0) = 0, σσ ≠ [], mon(σσ), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n), ∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0), ∃ n0. # σσ(n) = ⌜n0⌝ ⊦ ∃ n. # σσ(n) = ∞, ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n)))
Used terms: # σσ(n)
| ⊦ n∞ = ∞ ↔ ¬(∃ n. n∞ = ⌜n⌝ ) |
| # σσ = ∞, # x = nnf(n), nnf(0) = 0, σσ ≠ [], mon(σσ), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n), ∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0), ∃ n0. # σσ(n) = ⌜n0⌝ ⊦ ∃ n. # σσ(n) = ∞, ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))) |
# σσ(n) = ⌜n0⌝ , # x = nnf(n), # σσ = ∞, nnf(0) = 0, σσ ≠ [], mon(σσ), ∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0), ∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ⊦ ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))), ∃ n. # σσ(n) = ∞
| # σσ(n) = ⌜n0⌝ , # x = nnf(n), # σσ = ∞, nnf(0) = 0, σσ ≠ [], mon(σσ), ∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0), ∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ⊦ ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))), ∃ n. # σσ(n) = ∞ |
# σσ = ∞, # x = nnf(n), # σσ(n) = ⌜n0⌝ , nnf(0) = 0, σσ ≠ [], mon(σσ), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n), ∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0), ∀ m. n ≤ m → σσ(m) = σσ(n) ⊦ ∃ n. # σσ(n) = ∞, ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n)))
# σσ = ∞, # x = nnf(n), # σσ(n) = ⌜n0⌝ , nnf(0) = 0, σσ ≠ [], mon(σσ), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n), ∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0) ⊦ ∀ m. n ≤ m → σσ(m) = σσ(n), ∃ n. # σσ(n) = ∞, ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n)))
Used formulas: ∀ m. n ≤ m → σσ(m) = σσ(n)
| # σσ = ∞, # x = nnf(n), # σσ(n) = ⌜n0⌝ , nnf(0) = 0, σσ ≠ [], mon(σσ), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n), ∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0), ∀ m. n ≤ m → σσ(m) = σσ(n) ⊦ ∃ n. # σσ(n) = ∞, ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))) |
# σσ(n) = ⌜n0⌝ , # x = nnf(n), # σσ = ∞, nnf(0) = 0, σσ ≠ [], mon(σσ), ∀ m. n ≤ m → σσ(m) = σσ(n), ∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0), ∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ⊦ ∃ n. # σσ(n) = ∞, (∀ n0. σσ(n0) ⊑ σσ(n)) ∧ (∀ m. ¬ # σσ(n) < ⌜m⌝ → (∃ n0. σσ(n).take(m) ⊑ σσ(n0)))
Used terms: σσ(n)
| # σσ(n) = ⌜n0⌝ , # x = nnf(n), # σσ = ∞, nnf(0) = 0, σσ ≠ [], mon(σσ), ∀ m. n ≤ m → σσ(m) = σσ(n), ∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0), ∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ⊦ ∃ n. # σσ(n) = ∞, (∀ n0. σσ(n0) ⊑ σσ(n)) ∧ (∀ m. ¬ # σσ(n) < ⌜m⌝ → (∃ n0. σσ(n).take(m) ⊑ σσ(n0))) |
# σσ(n) = ⌜n0⌝ , # x = nnf(n), # σσ = ∞, nnf(0) = 0, σσ ≠ [], mon(σσ), ∀ m. n ≤ m → σσ(m) = σσ(n), ∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0), ∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ⊦ ∃ n. # σσ(n) = ∞, σσ(n1) ⊑ σσ(n) ∧ (¬ n0 < m → (∃ n0. σσ(n).take(m) ⊑ σσ(n0)))
Used simplifier rules: ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s)
| # σσ(n) = ⌜n0⌝ , # x = nnf(n), # σσ = ∞, nnf(0) = 0, σσ ≠ [], mon(σσ), ∀ m. n ≤ m → σσ(m) = σσ(n), ∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0), ∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ⊦ ∃ n. # σσ(n) = ∞, σσ(n1) ⊑ σσ(n) ∧ (¬ n0 < m → (∃ n0. σσ(n).take(m) ⊑ σσ(n0))) |
# σσ = ∞, # x = nnf(n), # σσ(n) = ⌜n0⌝ , nnf(0) = 0, σσ ≠ [], mon(σσ), ¬ σσ(n1) ⊑ σσ(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n), ∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0), ∀ m. n ≤ m → σσ(m) = σσ(n) ⊦ ∃ n. # σσ(n) = ∞
# σσ = ∞, # x = nnf(n), # σσ(n) = ⌜n0⌝ , nnf(0) = 0, σσ ≠ [], mon(σσ), ¬ n0 < m, ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n), ∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0), ∀ m. n ≤ m → σσ(m) = σσ(n) ⊦ ∃ n. # σσ(n) = ∞, ∃ n0. σσ(n).take(m) ⊑ σσ(n0)
| # σσ = ∞, # x = nnf(n), # σσ(n) = ⌜n0⌝ , nnf(0) = 0, σσ ≠ [], mon(σσ), ¬ σσ(n1) ⊑ σσ(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n), ∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0), ∀ m. n ≤ m → σσ(m) = σσ(n) ⊦ ∃ n. # σσ(n) = ∞ |
# σσ(n) = ⌜n0⌝ , # x = nnf(n), # σσ = ∞, nnf(0) = 0, σσ ≠ [], mon(σσ), ¬ σσ(n1) ⊑ σσ(n), n ≤ n1 → σσ(n1) = σσ(n), ∀ m. n ≤ m → σσ(m) = σσ(n), ∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0), ∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ⊦ ∃ n. # σσ(n) = ∞
Used terms: n1
| # σσ(n) = ⌜n0⌝ , # x = nnf(n), # σσ = ∞, nnf(0) = 0, σσ ≠ [], mon(σσ), ¬ σσ(n1) ⊑ σσ(n), n ≤ n1 → σσ(n1) = σσ(n), ∀ m. n ≤ m → σσ(m) = σσ(n), ∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0), ∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ⊦ ∃ n. # σσ(n) = ∞ |
mon(σσ), m ≤ n, ⌜n⌝ < # σσ ⊦ σσ(m) ⊑ σσ(n)
Used simplifier rules: ⊦ ⌜m⌝ < ∞; (s) ⊦ m ≤ n ↔ ¬ n < m; (ss) ⊦ m < n → m ≤ n; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ m < n → n ≠ 0; (s) ⊦ σ ⊑ σ; (s) Used terms: σσ, n1, n
| mon(σσ), m ≤ n, ⌜n⌝ < # σσ ⊦ σσ(m) ⊑ σσ(n) |
| # σσ = ∞, # x = nnf(n), # σσ(n) = ⌜n0⌝ , nnf(0) = 0, σσ ≠ [], mon(σσ), ¬ n0 < m, ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n), ∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0), ∀ m. n ≤ m → σσ(m) = σσ(n) ⊦ ∃ n. # σσ(n) = ∞, ∃ n0. σσ(n).take(m) ⊑ σσ(n0) |
# σσ(n) = ⌜n0⌝ , # x = nnf(n), # σσ = ∞, nnf(0) = 0, σσ ≠ [], mon(σσ), m ≤ n0, ∀ m. n ≤ m → σσ(m) = σσ(n), ∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0), ∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ⊦ ∃ n0. σσ(n).take(m) ⊑ σσ(n0), ∃ n. # σσ(n) = ∞
Used simplifier rules: ⊦ m < n ↔ ¬ n ≤ m; (ss)
| # σσ(n) = ⌜n0⌝ , # x = nnf(n), # σσ = ∞, nnf(0) = 0, σσ ≠ [], mon(σσ), m ≤ n0, ∀ m. n ≤ m → σσ(m) = σσ(n), ∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0), ∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ⊦ ∃ n0. σσ(n).take(m) ⊑ σσ(n0), ∃ n. # σσ(n) = ∞ |
# σσ = ∞, # x = nnf(n), # σσ(n) = ⌜n0⌝ , nnf(0) = 0, σσ ≠ [], mon(σσ), m ≤ n0, ¬ σσ(n).take(m) ⊑ σσ(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n), ∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0), ∀ m. n ≤ m → σσ(m) = σσ(n) ⊦ ∃ n. # σσ(n) = ∞
Used terms: n
| # σσ = ∞, # x = nnf(n), # σσ(n) = ⌜n0⌝ , nnf(0) = 0, σσ ≠ [], mon(σσ), m ≤ n0, ¬ σσ(n).take(m) ⊑ σσ(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n), ∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0), ∀ m. n ≤ m → σσ(m) = σσ(n) ⊦ ∃ n. # σσ(n) = ∞ |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
# σσ(n) = ⌜n0⌝ , # x = nnf(n), # σσ = ∞, nnf(0) = 0, σσ ≠ [], mon(σσ), m ≤ n0, ∀ m. n ≤ m → σσ(m) = σσ(n), ∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0), ∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ σ1. σσ(n).take(m) + σ1 ≠ σσ(n) ⊦ ∃ n. # σσ(n) = ∞
Used terms: σσ(n).take(m), σσ(n)
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| # σσ(n) = ⌜n0⌝ , # x = nnf(n), # σσ = ∞, nnf(0) = 0, σσ ≠ [], mon(σσ), m ≤ n0, ∀ m. n ≤ m → σσ(m) = σσ(n), ∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0), ∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ σ1. σσ(n).take(m) + σ1 ≠ σσ(n) ⊦ ∃ n. # σσ(n) = ∞ |
Used simplifier rules: ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ m ≤ n → (n < m ↔ false); (s) ¬ # σ < ⌜n⌝ ⊦ σ.take(n) + σ.drop(n) = σ ↔ true; (ss) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream-old Used terms: σσ(n).drop(m)
| # σσ = ∞, # x = nnf(n), # σσ(n) = ⌜n0⌝ , nnf(0) = 0, σσ ≠ [], mon(σσ), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n), ∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0) ⊦ ∀ m. n ≤ m → σσ(m) = σσ(n), ∃ n. # σσ(n) = ∞, ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))) |
# σσ(n) = ⌜n0⌝ , # x = nnf(n), # σσ = ∞, nnf(0) = 0, σσ(m) ≠ σσ(n), σσ ≠ [], mon(σσ), n ≤ m, ∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0), ∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ⊦ ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))), ∃ n. # σσ(n) = ∞
| # σσ(n) = ⌜n0⌝ , # x = nnf(n), # σσ = ∞, nnf(0) = 0, σσ(m) ≠ σσ(n), σσ ≠ [], mon(σσ), n ≤ m, ∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0), ∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ⊦ ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))), ∃ n. # σσ(n) = ∞ |
# σσ = ∞, # x = nnf(n), # σσ(n) = ⌜n0⌝ , nnf(0) = 0, σσ(m) ≠ σσ(n), σσ ≠ [], mon(σσ), n ≤ m, ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n), ∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0) ⊦ ∃ n. # σσ(n) = ∞
| # σσ = ∞, # x = nnf(n), # σσ(n) = ⌜n0⌝ , nnf(0) = 0, σσ(m) ≠ σσ(n), σσ ≠ [], mon(σσ), n ≤ m, ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n), ∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0) ⊦ ∃ n. # σσ(n) = ∞ |
# σσ(n) = ⌜n0⌝ , # x = nnf(n), # σσ = ∞, nnf(0) = 0, σσ(m0.+1) ≠ σσ(n), σσ ≠ [], mon(σσ), n ≤ m0.+1, ∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0), ∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ σσ, x, nnf, n, n0, f_Nat->List<A>. # σσ = ∞ ∧ # x = nnf(n) ∧ # σσ(n) = ⌜n0⌝ ∧ nnf(0) = 0 ∧ σσ(m0) ≠ σσ(n) ∧ σσ ≠ [] ∧ mon(σσ) ∧ n ≤ m0 ∧ (∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ) ∧ (∀ m, n. m ≤ n → nnf(m) ≤ nnf(n)) ∧ (∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n)) ∧ (∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0)) → (∃ n. # σσ(n) = ∞) ⊦ ∃ n. # σσ(n) = ∞
Used simplifier rules: Nat freely generated by 0, +1; ⊦ m ≤ 0 ↔ m = 0; (s)
| # σσ(n) = ⌜n0⌝ , # x = nnf(n), # σσ = ∞, nnf(0) = 0, σσ(m0.+1) ≠ σσ(n), σσ ≠ [], mon(σσ), n ≤ m0.+1, ∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0), ∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ σσ, x, nnf, n, n0, f_Nat->List<A>. # σσ = ∞ ∧ # x = nnf(n) ∧ # σσ(n) = ⌜n0⌝ ∧ nnf(0) = 0 ∧ σσ(m0) ≠ σσ(n) ∧ σσ ≠ [] ∧ mon(σσ) ∧ n ≤ m0 ∧ (∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ) ∧ (∀ m, n. m ≤ n → nnf(m) ≤ nnf(n)) ∧ (∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n)) ∧ (∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0)) → (∃ n. # σσ(n) = ∞) ⊦ ∃ n. # σσ(n) = ∞ |
# σσ = ∞, # x = nnf(n), # σσ(n) = ⌜n0⌝ , nnf(0) = 0, σσ(m0 + 1) ≠ σσ(n), σσ ≠ [], mon(σσ), n ≤ m0 + 1, ∀ σσ, x, nnf, n, n0, f_Nat->List<A>. # σσ = ∞ ∧ # x = nnf(n) ∧ # σσ(n) = ⌜n0⌝ ∧ nnf(0) = 0 ∧ σσ(m0) ≠ σσ(n) ∧ σσ ≠ [] ∧ mon(σσ) ∧ n ≤ m0 ∧ (∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ) ∧ (∀ m, n. m ≤ n → nnf(m) ≤ nnf(n)) ∧ (∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n)) ∧ (∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0)) → (∃ n. # σσ(n) = ∞), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n), ∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0) ⊦ ∃ n. # σσ(n) = ∞
Used simplifier rules: ⊦ m.+1 = m + 1; (s)
| # σσ = ∞, # x = nnf(n), # σσ(n) = ⌜n0⌝ , nnf(0) = 0, σσ(m0 + 1) ≠ σσ(n), σσ ≠ [], mon(σσ), n ≤ m0 + 1, ∀ σσ, x, nnf, n, n0, f_Nat->List<A>. # σσ = ∞ ∧ # x = nnf(n) ∧ # σσ(n) = ⌜n0⌝ ∧ nnf(0) = 0 ∧ σσ(m0) ≠ σσ(n) ∧ σσ ≠ [] ∧ mon(σσ) ∧ n ≤ m0 ∧ (∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ) ∧ (∀ m, n. m ≤ n → nnf(m) ≤ nnf(n)) ∧ (∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n)) ∧ (∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0)) → (∃ n. # σσ(n) = ∞), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n), ∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0) ⊦ ∃ n. # σσ(n) = ∞ |
# σσ(n) = ⌜n0⌝ , # x = nnf(n), # σσ = ∞, nnf(0) = 0, σσ(m0 + 1) ≠ σσ(n), σσ ≠ [], mon(σσ), n ≤ m0 + 1, # σσ = ∞ ∧ # x = nnf(n) ∧ # σσ(n) = ⌜n0⌝ ∧ nnf(0) = 0 ∧ σσ(m0) ≠ σσ(n) ∧ σσ ≠ [] ∧ mon(σσ) ∧ n ≤ m0 ∧ (∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ) ∧ (∀ m, n. m ≤ n → nnf(m) ≤ nnf(n)) ∧ (∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n)) ∧ (∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0)) → (∃ n. # σσ(n) = ∞), ∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0), ∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ⊦ ∃ n. # σσ(n) = ∞
Used terms: σσ, x, nnf, n, n0, f_Nat->List<A>
| # σσ(n) = ⌜n0⌝ , # x = nnf(n), # σσ = ∞, nnf(0) = 0, σσ(m0 + 1) ≠ σσ(n), σσ ≠ [], mon(σσ), n ≤ m0 + 1, # σσ = ∞ ∧ # x = nnf(n) ∧ # σσ(n) = ⌜n0⌝ ∧ nnf(0) = 0 ∧ σσ(m0) ≠ σσ(n) ∧ σσ ≠ [] ∧ mon(σσ) ∧ n ≤ m0 ∧ (∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ) ∧ (∀ m, n. m ≤ n → nnf(m) ≤ nnf(n)) ∧ (∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n)) ∧ (∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0)) → (∃ n. # σσ(n) = ∞), ∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0), ∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ⊦ ∃ n. # σσ(n) = ∞ |
# σσ = ∞, # x = nnf(n), # σσ(n) = ⌜n0⌝ , nnf(0) = 0, σσ(m0 + 1) ≠ σσ(n), σσ ≠ [], mon(σσ), n ≤ m0 + 1, ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n), ∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0) ⊦ ∃ n. # σσ(n) = ∞, σσ(m0) ≠ σσ(n) ∧ n ≤ m0
| # σσ = ∞, # x = nnf(n), # σσ(n) = ⌜n0⌝ , nnf(0) = 0, σσ(m0 + 1) ≠ σσ(n), σσ ≠ [], mon(σσ), n ≤ m0 + 1, ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n), ∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0) ⊦ ∃ n. # σσ(n) = ∞, σσ(m0) ≠ σσ(n) ∧ n ≤ m0 |
# σσ(n) = ⌜n0⌝ , # x = nnf(n), # σσ = ∞, x.drop(nnf(m0)).take(# f_Nat->List<A>(m0)) = f_Nat->List<A>(m0), nnf(0) = 0, nnf(m0 + 1) = nnf(m0) + # f_Nat->List<A>(m0), σσ(m0 + 1) ≠ σσ(n), σσ ≠ [], mon(σσ), n ≤ m0 + 1, ¬ nnf(n) < nnf(m0 + 1), ∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0), ∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ⊦ ∃ n. # σσ(n) = ∞, σσ(m0) ≠ σσ(n) ∧ n ≤ m0
Used terms: m0
| # σσ(n) = ⌜n0⌝ , # x = nnf(n), # σσ = ∞, x.drop(nnf(m0)).take(# f_Nat->List<A>(m0)) = f_Nat->List<A>(m0), nnf(0) = 0, nnf(m0 + 1) = nnf(m0) + # f_Nat->List<A>(m0), σσ(m0 + 1) ≠ σσ(n), σσ ≠ [], mon(σσ), n ≤ m0 + 1, ¬ nnf(n) < nnf(m0 + 1), ∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0), ∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ⊦ ∃ n. # σσ(n) = ∞, σσ(m0) ≠ σσ(n) ∧ n ≤ m0 |
# σσ = ∞, # x = nnf(n), # σσ(n) = ⌜n0⌝ , x.drop(nnf(m0)).take(# f_Nat->List<A>(m0)) = f_Nat->List<A>(m0), nnf(m0 + 1) = nnf(m0) + # f_Nat->List<A>(m0), nnf(0) = 0, σσ(m0 + 1) ≠ σσ(n), σσ ≠ [], mon(σσ), n ≤ m0 + 1, nnf(m0 + 1) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n), ∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0) ⊦ ∃ n. # σσ(n) = ∞, σσ(m0) ≠ σσ(n) ∧ n ≤ m0
Used simplifier rules: ⊦ m < n ↔ ¬ n ≤ m; (ss)
| # σσ = ∞, # x = nnf(n), # σσ(n) = ⌜n0⌝ , x.drop(nnf(m0)).take(# f_Nat->List<A>(m0)) = f_Nat->List<A>(m0), nnf(m0 + 1) = nnf(m0) + # f_Nat->List<A>(m0), nnf(0) = 0, σσ(m0 + 1) ≠ σσ(n), σσ ≠ [], mon(σσ), n ≤ m0 + 1, nnf(m0 + 1) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n), ∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0) ⊦ ∃ n. # σσ(n) = ∞, σσ(m0) ≠ σσ(n) ∧ n ≤ m0 |
# σσ(n) = ⌜n0⌝ , # x = nnf(n), # σσ = ∞, x.drop(nnf(m0)).take(# f_Nat->List<A>(m0)) = f_Nat->List<A>(m0), σσ(m0 + 1) = σσ(m0) + ⌜f_Nat->List<A>(m0)⌝ , nnf(0) = 0, nnf(m0 + 1) = nnf(m0) + # f_Nat->List<A>(m0), σσ(m0 + 1) ≠ σσ(n), σσ ≠ [], mon(σσ), nnf(m0 + 1) ≤ nnf(n), n ≤ m0 + 1, ∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0), ∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ⊦ ∃ n. # σσ(n) = ∞, σσ(m0) ≠ σσ(n) ∧ n ≤ m0
Used terms: m0
| # σσ(n) = ⌜n0⌝ , # x = nnf(n), # σσ = ∞, x.drop(nnf(m0)).take(# f_Nat->List<A>(m0)) = f_Nat->List<A>(m0), σσ(m0 + 1) = σσ(m0) + ⌜f_Nat->List<A>(m0)⌝ , nnf(0) = 0, nnf(m0 + 1) = nnf(m0) + # f_Nat->List<A>(m0), σσ(m0 + 1) ≠ σσ(n), σσ ≠ [], mon(σσ), nnf(m0 + 1) ≤ nnf(n), n ≤ m0 + 1, ∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0), ∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ⊦ ∃ n. # σσ(n) = ∞, σσ(m0) ≠ σσ(n) ∧ n ≤ m0 |
# σσ = ∞, # x = nnf(n), # σσ(n) = ⌜n0⌝ , x.drop(nnf(m0)).take(# f_Nat->List<A>(m0)) = f_Nat->List<A>(m0), σσ(m0 + 1) = σσ(m0) + ⌜f_Nat->List<A>(m0)⌝ , nnf(m0 + 1) = nnf(m0) + # f_Nat->List<A>(m0), nnf(0) = 0, σσ(m0 + 1) ≠ σσ(n), σσ ≠ [], mon(σσ), n ≤ m0 + 1, nnf(m0 + 1) ≤ nnf(n), n ≤ m0 → f_Nat->List<A>(m0) = [] ∧ nnf(m0) = nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n), ∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0) ⊦ ∃ n. # σσ(n) = ∞, σσ(m0) ≠ σσ(n) ∧ n ≤ m0
Used terms: m0
| # σσ = ∞, # x = nnf(n), # σσ(n) = ⌜n0⌝ , x.drop(nnf(m0)).take(# f_Nat->List<A>(m0)) = f_Nat->List<A>(m0), σσ(m0 + 1) = σσ(m0) + ⌜f_Nat->List<A>(m0)⌝ , nnf(m0 + 1) = nnf(m0) + # f_Nat->List<A>(m0), nnf(0) = 0, σσ(m0 + 1) ≠ σσ(n), σσ ≠ [], mon(σσ), n ≤ m0 + 1, nnf(m0 + 1) ≤ nnf(n), n ≤ m0 → f_Nat->List<A>(m0) = [] ∧ nnf(m0) = nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ m. n ≤ m → f_Nat->List<A>(m) = [] ∧ nnf(m) = nnf(n), ∀ n0. nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0) ∧ ¬ nnf(n) < nnf(n0 + 1) ∧ x.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0) ⊦ ∃ n. # σσ(n) = ∞, σσ(m0) ≠ σσ(n) ∧ n ≤ m0 |
Used simplifier rules: ⊦ m ≤ n ↔ ¬ n < m; (ss) ⊦ m < n → (n ≤ m + 1 ↔ n = m + 1); (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic ⊦ # x = n → x.drop(n) = []; (s) ⊦ x.take(0) = []; (s) ⊦ # [] = 0; (s) ⊦ n + 0 = n; (s) ⊦ ⌜[]⌝ = []; (s) ⊦ σ + [] = σ; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream-old Used formulas: n ≤ m0
| # σσ = ∞, nnf(0) = 0, σσ ≠ [], mon(σσ), ¬ finp(σ), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ ¬ # σ < ⌜nnf(n + 1)⌝ ∧ σ.drop(nnf(n)).take(# f_Nat->List<A>(n)) = ⌜f_Nat->List<A>(n)⌝ , ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1) ⊦ ∃ n. # σσ(n) = ∞, ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))) |
# σσ = ∞, nnf(0) = 0, σσ ≠ [], mon(σσ), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n) ⊦ ∃ n. # σσ(n) = ∞, ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n)))
Used simplifier rules: ⊦ ⌜x⌝ = ⌜x0⌝ ↔ x = x0; (s) ⊦ ⌜nf⌝ .take(n) = ⌜nf.take(n)⌝ ; (s) ⊦ ⌜nf⌝ .drop(n) = ⌜nf.drop(n)⌝ ; (s) ⊦ ¬ ∞ < n∞; (s) ⊦ # ⌜nf⌝ = ∞; (s) ⊦ finp(σ) ↔ ¬(∃ nf. ⌜nf⌝ = σ); (ss)
| # σσ = ∞, nnf(0) = 0, σσ ≠ [], mon(σσ), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n) ⊦ ∃ n. # σσ(n) = ∞, ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))) |
# σσ = ∞, nnf(0) = 0, σσ ≠ [], mon(σσ), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ n. σσ(n) = σσ(0) + ⌜nf.take(nnf(n))⌝ ⊦ ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))), ∃ n. # σσ(n) = ∞
# σσ = ∞, nnf(0) = 0, σσ ≠ [], mon(σσ), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ⊦ ∀ n. σσ(n) = σσ(0) + ⌜nf.take(nnf(n))⌝ , ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))), ∃ n. # σσ(n) = ∞
Used formulas: ∀ n. σσ(n) = σσ(0) + ⌜nf.take(nnf(n))⌝
| # σσ = ∞, nnf(0) = 0, σσ ≠ [], mon(σσ), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ n. σσ(n) = σσ(0) + ⌜nf.take(nnf(n))⌝ ⊦ ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))), ∃ n. # σσ(n) = ∞ |
# σσ = ∞, nnf(0) = 0, σσ ≠ [], mon(σσ), ∀ n. σσ(n) = σσ(0) + ⌜nf.take(nnf(n))⌝ , ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n) ⊦ ∃ n. # σσ(n) = ∞, (∀ n. σσ(n) ⊑ σσ(0) + ⌜nf⌝ ) ∧ (∀ m. ¬ #(σσ(0) + ⌜nf⌝ ) < ⌜m⌝ → (∃ n. (σσ(0) + ⌜nf⌝ ).take(m) ⊑ σσ(n)))
Used terms: σσ(0) + ⌜nf⌝
| # σσ = ∞, nnf(0) = 0, σσ ≠ [], mon(σσ), ∀ n. σσ(n) = σσ(0) + ⌜nf.take(nnf(n))⌝ , ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n) ⊦ ∃ n. # σσ(n) = ∞, (∀ n. σσ(n) ⊑ σσ(0) + ⌜nf⌝ ) ∧ (∀ m. ¬ #(σσ(0) + ⌜nf⌝ ) < ⌜m⌝ → (∃ n. (σσ(0) + ⌜nf⌝ ).take(m) ⊑ σσ(n))) |
# σσ = ∞, nnf(0) = 0, σσ ≠ [], mon(σσ), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ n. σσ(n) = σσ(0) + ⌜nf.take(nnf(n))⌝ ⊦ ∃ n. # σσ(n) = ∞, σσ(n) ⊑ σσ(0) + ⌜nf⌝ ∧ (∃ n. (σσ(0) + ⌜nf⌝ ).take(m) ⊑ σσ(n))
Used simplifier rules: ⊦ ¬ ∞ < n∞; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream-old 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∞ + ∞ = ∞; (s) ⊦ # ⌜nf⌝ = ∞; (s) ⊦ #(σ + σ1) = # σ + # σ1; (s)
| # σσ = ∞, nnf(0) = 0, σσ ≠ [], mon(σσ), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ n. σσ(n) = σσ(0) + ⌜nf.take(nnf(n))⌝ ⊦ ∃ n. # σσ(n) = ∞, σσ(n) ⊑ σσ(0) + ⌜nf⌝ ∧ (∃ n. (σσ(0) + ⌜nf⌝ ).take(m) ⊑ σσ(n)) |
# σσ = ∞, nnf(0) = 0, σσ ≠ [], mon(σσ), ¬ σσ(n) ⊑ σσ(0) + ⌜nf⌝ , ∀ n. σσ(n) = σσ(0) + ⌜nf.take(nnf(n))⌝ , ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n) ⊦ ∃ n. # σσ(n) = ∞
# σσ = ∞, nnf(0) = 0, σσ ≠ [], mon(σσ), ∀ n. σσ(n) = σσ(0) + ⌜nf.take(nnf(n))⌝ , ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n) ⊦ ∃ n. # σσ(n) = ∞, ∃ n. (σσ(0) + ⌜nf⌝ ).take(m) ⊑ σσ(n)
| # σσ = ∞, nnf(0) = 0, σσ ≠ [], mon(σσ), ¬ σσ(n) ⊑ σσ(0) + ⌜nf⌝ , ∀ n. σσ(n) = σσ(0) + ⌜nf.take(nnf(n))⌝ , ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n) ⊦ ∃ n. # σσ(n) = ∞ |
# σσ = ∞, σσ(n) = σσ(0) + ⌜nf.take(nnf(n))⌝ , nnf(0) = 0, σσ ≠ [], mon(σσ), ¬ σσ(n) ⊑ σσ(0) + ⌜nf⌝ , ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ n. σσ(n) = σσ(0) + ⌜nf.take(nnf(n))⌝ ⊦ ∃ n. # σσ(n) = ∞
Used terms: n
| # σσ = ∞, σσ(n) = σσ(0) + ⌜nf.take(nnf(n))⌝ , nnf(0) = 0, σσ ≠ [], mon(σσ), ¬ σσ(n) ⊑ σσ(0) + ⌜nf⌝ , ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ n. σσ(n) = σσ(0) + ⌜nf.take(nnf(n))⌝ ⊦ ∃ n. # σσ(n) = ∞ |
# σσ = ∞, nnf(0) = 0, σσ ≠ [], mon(σσ), ¬ σσ(0) + ⌜nf.take(nnf(n))⌝ ⊑ σσ(0) + ⌜nf⌝ , ∀ n. σσ(n) = σσ(0) + ⌜nf.take(nnf(n))⌝ , ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n) ⊦ ∃ n. # σσ(n) = ∞
| # σσ = ∞, nnf(0) = 0, σσ ≠ [], mon(σσ), ¬ σσ(0) + ⌜nf.take(nnf(n))⌝ ⊑ σσ(0) + ⌜nf⌝ , ∀ n. σσ(n) = σσ(0) + ⌜nf.take(nnf(n))⌝ , ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n) ⊦ ∃ n. # σσ(n) = ∞ |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
# σσ = ∞, nnf(0) = 0, σσ ≠ [], mon(σσ), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ n. σσ(n) = σσ(0) + ⌜nf.take(nnf(n))⌝ , ∀ σ1. (σσ(0) + ⌜nf.take(nnf(n))⌝ ) + σ1 ≠ σσ(0) + ⌜nf⌝ ⊦ ∃ n. # σσ(n) = ∞
Used terms: σσ(0) + ⌜nf.take(nnf(n))⌝ , σσ(0) + ⌜nf⌝
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| # σσ = ∞, nnf(0) = 0, σσ ≠ [], mon(σσ), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ n. σσ(n) = σσ(0) + ⌜nf.take(nnf(n))⌝ , ∀ σ1. (σσ(0) + ⌜nf.take(nnf(n))⌝ ) + σ1 ≠ σσ(0) + ⌜nf⌝ ⊦ ∃ n. # σσ(n) = ∞ |
Used simplifier rules: ⊦ σ + σ1 = σ + σ2 ↔ σ1 = σ2 ∨ # σ = ∞; (ws) ⊦ ⌜nf.take(n)⌝ + ⌜nf.drop(n)⌝ = ⌜nf⌝ ↔ true; (ss) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream-old Used terms: ⌜nf.drop(nnf(n))⌝
| # σσ = ∞, nnf(0) = 0, σσ ≠ [], mon(σσ), ∀ n. σσ(n) = σσ(0) + ⌜nf.take(nnf(n))⌝ , ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n) ⊦ ∃ n. # σσ(n) = ∞, ∃ n. (σσ(0) + ⌜nf⌝ ).take(m) ⊑ σσ(n) |
# σσ = ∞, nnf(0) = 0, # σσ(0) ≠ ∞, σσ ≠ [], mon(σσ), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ n. σσ(n) = σσ(0) + ⌜nf.take(nnf(n))⌝ ⊦ ∃ n. (σσ(0) + ⌜nf⌝ ).take(m) ⊑ σσ(n), ∃ n. # σσ(n) = ∞
Used terms: 0
| # σσ = ∞, nnf(0) = 0, # σσ(0) ≠ ∞, σσ ≠ [], mon(σσ), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ n. σσ(n) = σσ(0) + ⌜nf.take(nnf(n))⌝ ⊦ ∃ n. (σσ(0) + ⌜nf⌝ ).take(m) ⊑ σσ(n), ∃ n. # σσ(n) = ∞ |
⊦ n∞ = ∞ ↔ ¬(∃ n. n∞ = ⌜n⌝ )
# σσ = ∞, nnf(0) = 0, σσ ≠ [], mon(σσ), ∀ n. σσ(n) = σσ(0) + ⌜nf.take(nnf(n))⌝ , ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∃ n. # σσ(0) = ⌜n⌝ ⊦ ∃ n. # σσ(n) = ∞, ∃ n. (σσ(0) + ⌜nf⌝ ).take(m) ⊑ σσ(n)
Used terms: # σσ(0)
| ⊦ n∞ = ∞ ↔ ¬(∃ n. n∞ = ⌜n⌝ ) |
| # σσ = ∞, nnf(0) = 0, σσ ≠ [], mon(σσ), ∀ n. σσ(n) = σσ(0) + ⌜nf.take(nnf(n))⌝ , ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∃ n. # σσ(0) = ⌜n⌝ ⊦ ∃ n. # σσ(n) = ∞, ∃ n. (σσ(0) + ⌜nf⌝ ).take(m) ⊑ σσ(n) |
# σσ(0) = ⌜n⌝ , # σσ = ∞, nnf(0) = 0, σσ ≠ [], mon(σσ), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ n. σσ(n) = σσ(0) + ⌜nf.take(nnf(n))⌝ ⊦ ∃ n. (σσ(0) + ⌜nf⌝ ).take(m) ⊑ σσ(n), ∃ n. # σσ(n) = ∞
| # σσ(0) = ⌜n⌝ , # σσ = ∞, nnf(0) = 0, σσ ≠ [], mon(σσ), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ n. σσ(n) = σσ(0) + ⌜nf.take(nnf(n))⌝ ⊦ ∃ n. (σσ(0) + ⌜nf⌝ ).take(m) ⊑ σσ(n), ∃ n. # σσ(n) = ∞ |
# σσ = ∞, # σσ(0) = ⌜n⌝ , nnf(0) = 0, σσ ≠ [], m < n, mon(σσ), ∀ n. σσ(n) = σσ(0) + ⌜nf.take(nnf(n))⌝ , ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n) ⊦ ∃ n. # σσ(n) = ∞, ∃ n. (σσ(0) + ⌜nf⌝ ).take(m) ⊑ σσ(n)
# σσ = ∞, # σσ(0) = ⌜n⌝ , nnf(0) = 0, σσ ≠ [], mon(σσ), ¬ m < n, ∀ n. σσ(n) = σσ(0) + ⌜nf.take(nnf(n))⌝ , ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n) ⊦ ∃ n. # σσ(n) = ∞, ∃ n. (σσ(0) + ⌜nf⌝ ).take(m) ⊑ σσ(n)
Used formulas: m < n
| # σσ = ∞, # σσ(0) = ⌜n⌝ , nnf(0) = 0, σσ ≠ [], m < n, mon(σσ), ∀ n. σσ(n) = σσ(0) + ⌜nf.take(nnf(n))⌝ , ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n) ⊦ ∃ n. # σσ(n) = ∞, ∃ n. (σσ(0) + ⌜nf⌝ ).take(m) ⊑ σσ(n) |
# σσ(0) = ⌜n⌝ , # σσ = ∞, nnf(0) = 0, σσ ≠ [], m < n, mon(σσ), ¬ (σσ(0) + ⌜nf⌝ ).take(m) ⊑ σσ(0), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ n. σσ(n) = σσ(0) + ⌜nf.take(nnf(n))⌝ ⊦ ∃ n. # σσ(n) = ∞
Used terms: 0
| # σσ(0) = ⌜n⌝ , # σσ = ∞, nnf(0) = 0, σσ ≠ [], m < n, mon(σσ), ¬ (σσ(0) + ⌜nf⌝ ).take(m) ⊑ σσ(0), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ n. σσ(n) = σσ(0) + ⌜nf.take(nnf(n))⌝ ⊦ ∃ n. # σσ(n) = ∞ |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
# σσ = ∞, # σσ(0) = ⌜n⌝ , nnf(0) = 0, σσ ≠ [], m < n, mon(σσ), ∀ n. σσ(n) = σσ(0) + ⌜nf.take(nnf(n))⌝ , ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ σ1. (σσ(0) + ⌜nf⌝ ).take(m) + σ1 ≠ σσ(0) ⊦ ∃ n. # σσ(n) = ∞
Used terms: (σσ(0) + ⌜nf⌝ ).take(m), σσ(0)
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| # σσ = ∞, # σσ(0) = ⌜n⌝ , nnf(0) = 0, σσ ≠ [], m < n, mon(σσ), ∀ n. σσ(n) = σσ(0) + ⌜nf.take(nnf(n))⌝ , ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ σ1. (σσ(0) + ⌜nf⌝ ).take(m) + σ1 ≠ σσ(0) ⊦ ∃ n. # σσ(n) = ∞ |
# σσ(0) = ⌜n⌝ , # σσ = ∞, nnf(0) = 0, (σσ(0) + ⌜nf⌝ ).take(m) + σσ(0).drop(m) ≠ σσ(0), σσ ≠ [], m < n, mon(σσ), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ n. σσ(n) = σσ(0) + ⌜nf.take(nnf(n))⌝ ⊦ ∃ n. # σσ(n) = ∞
Used terms: σσ(0).drop(m)
| # σσ(0) = ⌜n⌝ , # σσ = ∞, nnf(0) = 0, (σσ(0) + ⌜nf⌝ ).take(m) + σσ(0).drop(m) ≠ σσ(0), σσ ≠ [], m < n, mon(σσ), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ n. σσ(n) = σσ(0) + ⌜nf.take(nnf(n))⌝ ⊦ ∃ n. # σσ(n) = ∞ |
⊦ ¬ # σ < ⌜n⌝ → (σ + σ0).take(n) = σ.take(n)
Used simplifier rules: ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ m < n → ¬ n < m; (s) ¬ # σ < ⌜n⌝ ⊦ σ.take(n) + σ.drop(n) = σ ↔ true; (ss) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream-old f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic ⊦ m < n → n ≠ 0; (s) Used terms: σσ(0), ⌜nf⌝ , m
| ⊦ ¬ # σ < ⌜n⌝ → (σ + σ0).take(n) = σ.take(n) |
| # σσ = ∞, # σσ(0) = ⌜n⌝ , nnf(0) = 0, σσ ≠ [], mon(σσ), ¬ m < n, ∀ n. σσ(n) = σσ(0) + ⌜nf.take(nnf(n))⌝ , ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n) ⊦ ∃ n. # σσ(n) = ∞, ∃ n. (σσ(0) + ⌜nf⌝ ).take(m) ⊑ σσ(n) |
# σσ(0) = ⌜n⌝ , # σσ = ∞, nnf(0) = 0, σσ ≠ [], mon(σσ), n ≤ m, ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ n. σσ(n) = σσ(0) + ⌜nf.take(nnf(n))⌝ ⊦ ∃ n. (σσ(0) + ⌜nf⌝ ).take(m) ⊑ σσ(n), ∃ n. # σσ(n) = ∞
Used simplifier rules: ⊦ m < n ↔ ¬ n ≤ m; (ss)
| # σσ(0) = ⌜n⌝ , # σσ = ∞, nnf(0) = 0, σσ ≠ [], mon(σσ), n ≤ m, ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ n. σσ(n) = σσ(0) + ⌜nf.take(nnf(n))⌝ ⊦ ∃ n. (σσ(0) + ⌜nf⌝ ).take(m) ⊑ σσ(n), ∃ n. # σσ(n) = ∞ |
# σσ = ∞, # σσ(0) = ⌜n⌝ , nnf(0) = 0, σσ ≠ [], mon(σσ), n ≤ m, ∀ n. σσ(n) = σσ(0) + ⌜nf.take(nnf(n))⌝ , ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∃ m0. nnf(m0) ≤ m - n ∧ m - n < nnf(m0 + 1) ⊦ ∃ n. # σσ(n) = ∞, ∃ n. (σσ(0) + ⌜nf⌝ ).take(m) ⊑ σσ(n)
Used terms: m - n
| # σσ = ∞, # σσ(0) = ⌜n⌝ , nnf(0) = 0, σσ ≠ [], mon(σσ), n ≤ m, ∀ n. σσ(n) = σσ(0) + ⌜nf.take(nnf(n))⌝ , ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∃ m0. nnf(m0) ≤ m - n ∧ m - n < nnf(m0 + 1) ⊦ ∃ n. # σσ(n) = ∞, ∃ n. (σσ(0) + ⌜nf⌝ ).take(m) ⊑ σσ(n) |
# σσ(0) = ⌜n⌝ , # σσ = ∞, nnf(0) = 0, σσ ≠ [], nnf(m0) < nnf(m0 + 1), m < nnf(m0 + 1) + n, mon(σσ), n ≤ m, nnf(m0) + n ≤ m, ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ n. σσ(n) = σσ(0) + ⌜nf.take(nnf(n))⌝ ⊦ ∃ n. (σσ(0) + ⌜nf⌝ ).take(m) ⊑ σσ(n), ∃ n. # σσ(n) = ∞
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m < m + n ↔ n ≠ 0; (s) ⊦ m + n < m + n0 ↔ n < n0; (s) fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat n0 ≤ n ⊦ n - n0 < m ↔ n < m + n0; (s) ⊦ m ≤ n → (n < m ↔ false); (s) ⊦ m ≤ n ↔ ¬ n < m; (ss) n0 ≤ n ⊦ m ≤ n - n0 ↔ m + n0 ≤ n; (s)
| # σσ(0) = ⌜n⌝ , # σσ = ∞, nnf(0) = 0, σσ ≠ [], nnf(m0) < nnf(m0 + 1), m < nnf(m0 + 1) + n, mon(σσ), n ≤ m, nnf(m0) + n ≤ m, ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ n. σσ(n) = σσ(0) + ⌜nf.take(nnf(n))⌝ ⊦ ∃ n. (σσ(0) + ⌜nf⌝ ).take(m) ⊑ σσ(n), ∃ n. # σσ(n) = ∞ |
# σσ = ∞, # σσ(0) = ⌜n⌝ , σσ(m0) = σσ(0) + ⌜nf.take(nnf(m0))⌝ , nnf(0) = 0, σσ ≠ [], m < nnf(m0 + 1) + n, nnf(m0) < nnf(m0 + 1), mon(σσ), nnf(m0) + n ≤ m, n ≤ m, ∀ n. σσ(n) = σσ(0) + ⌜nf.take(nnf(n))⌝ , ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n) ⊦ ∃ n. # σσ(n) = ∞, ∃ n. (σσ(0) + ⌜nf⌝ ).take(m) ⊑ σσ(n)
Used terms: m0
| # σσ = ∞, # σσ(0) = ⌜n⌝ , σσ(m0) = σσ(0) + ⌜nf.take(nnf(m0))⌝ , nnf(0) = 0, σσ ≠ [], m < nnf(m0 + 1) + n, nnf(m0) < nnf(m0 + 1), mon(σσ), nnf(m0) + n ≤ m, n ≤ m, ∀ n. σσ(n) = σσ(0) + ⌜nf.take(nnf(n))⌝ , ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n) ⊦ ∃ n. # σσ(n) = ∞, ∃ n. (σσ(0) + ⌜nf⌝ ).take(m) ⊑ σσ(n) |
# σσ(0) = ⌜n⌝ , # σσ = ∞, σσ(m0) = σσ(0) + ⌜nf.take(nnf(m0))⌝ , σσ(m0 + 1) = σσ(0) + ⌜nf.take(nnf(m0 + 1))⌝ , nnf(0) = 0, σσ ≠ [], nnf(m0) < nnf(m0 + 1), m < nnf(m0 + 1) + n, mon(σσ), n ≤ m, nnf(m0) + n ≤ m, ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ⊦ ∃ n. (σσ(0) + ⌜nf⌝ ).take(m) ⊑ σσ(n), ∃ n. # σσ(n) = ∞
Used terms: m0 + 1
| # σσ(0) = ⌜n⌝ , # σσ = ∞, σσ(m0) = σσ(0) + ⌜nf.take(nnf(m0))⌝ , σσ(m0 + 1) = σσ(0) + ⌜nf.take(nnf(m0 + 1))⌝ , nnf(0) = 0, σσ ≠ [], nnf(m0) < nnf(m0 + 1), m < nnf(m0 + 1) + n, mon(σσ), n ≤ m, nnf(m0) + n ≤ m, ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ⊦ ∃ n. (σσ(0) + ⌜nf⌝ ).take(m) ⊑ σσ(n), ∃ n. # σσ(n) = ∞ |
# σσ = ∞, # σσ(0) = ⌜n⌝ , σσ(m0 + 1) = σσ(0) + ⌜nf.take(nnf(m0 + 1))⌝ , σσ(m0) = σσ(0) + ⌜nf.take(nnf(m0))⌝ , nnf(0) = 0, σσ ≠ [], m < nnf(m0 + 1) + n, nnf(m0) < nnf(m0 + 1), mon(σσ), nnf(m0) + n ≤ m, n ≤ m, ¬ (σσ(0) + ⌜nf⌝ ).take(m) ⊑ σσ(m0 + 1), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n) ⊦ ∃ n. # σσ(n) = ∞
Used terms: m0 + 1
| # σσ = ∞, # σσ(0) = ⌜n⌝ , σσ(m0 + 1) = σσ(0) + ⌜nf.take(nnf(m0 + 1))⌝ , σσ(m0) = σσ(0) + ⌜nf.take(nnf(m0))⌝ , nnf(0) = 0, σσ ≠ [], m < nnf(m0 + 1) + n, nnf(m0) < nnf(m0 + 1), mon(σσ), nnf(m0) + n ≤ m, n ≤ m, ¬ (σσ(0) + ⌜nf⌝ ).take(m) ⊑ σσ(m0 + 1), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n) ⊦ ∃ n. # σσ(n) = ∞ |
# σσ(0) = ⌜n⌝ , # σσ = ∞, σσ(m0) = σσ(0) + ⌜nf.take(nnf(m0))⌝ , nnf(0) = 0, σσ ≠ [], nnf(m0) < nnf(m0 + 1), m < nnf(m0 + 1) + n, mon(σσ), n ≤ m, nnf(m0) + n ≤ m, ¬ (σσ(0) + ⌜nf⌝ ).take(m) ⊑ σσ(0) + ⌜nf.take(nnf(m0 + 1))⌝ , ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ⊦ ∃ n. # σσ(n) = ∞
| # σσ(0) = ⌜n⌝ , # σσ = ∞, σσ(m0) = σσ(0) + ⌜nf.take(nnf(m0))⌝ , nnf(0) = 0, σσ ≠ [], nnf(m0) < nnf(m0 + 1), m < nnf(m0 + 1) + n, mon(σσ), n ≤ m, nnf(m0) + n ≤ m, ¬ (σσ(0) + ⌜nf⌝ ).take(m) ⊑ σσ(0) + ⌜nf.take(nnf(m0 + 1))⌝ , ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ⊦ ∃ n. # σσ(n) = ∞ |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
# σσ = ∞, # σσ(0) = ⌜n⌝ , σσ(m0) = σσ(0) + ⌜nf.take(nnf(m0))⌝ , nnf(0) = 0, σσ ≠ [], m < nnf(m0 + 1) + n, nnf(m0) < nnf(m0 + 1), mon(σσ), nnf(m0) + n ≤ m, n ≤ m, ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ σ1. (σσ(0) + ⌜nf⌝ ).take(m) + σ1 ≠ σσ(0) + ⌜nf.take(nnf(m0 + 1))⌝ ⊦ ∃ n. # σσ(n) = ∞
Used terms: (σσ(0) + ⌜nf⌝ ).take(m), σσ(0) + ⌜nf.take(nnf(m0 + 1))⌝
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| # σσ = ∞, # σσ(0) = ⌜n⌝ , σσ(m0) = σσ(0) + ⌜nf.take(nnf(m0))⌝ , nnf(0) = 0, σσ ≠ [], m < nnf(m0 + 1) + n, nnf(m0) < nnf(m0 + 1), mon(σσ), nnf(m0) + n ≤ m, n ≤ m, ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ σ1. (σσ(0) + ⌜nf⌝ ).take(m) + σ1 ≠ σσ(0) + ⌜nf.take(nnf(m0 + 1))⌝ ⊦ ∃ n. # σσ(n) = ∞ |
# σσ(0) = ⌜n⌝ , # σσ = ∞, σσ(m0) = σσ(0) + ⌜nf.take(nnf(m0))⌝ , nnf(0) = 0, (σσ(0) + ⌜nf⌝ ).take(m) + ⌜nf⌝ .take(nnf(m0 + 1)).drop(m - n) ≠ σσ(0) + ⌜nf.take(nnf(m0 + 1))⌝ , σσ ≠ [], nnf(m0) < nnf(m0 + 1), m < nnf(m0 + 1) + n, mon(σσ), n ≤ m, nnf(m0) + n ≤ m, ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ⊦ ∃ n. # σσ(n) = ∞
Used terms: ⌜nf⌝ .take(nnf(m0 + 1)).drop(m - n)
| # σσ(0) = ⌜n⌝ , # σσ = ∞, σσ(m0) = σσ(0) + ⌜nf.take(nnf(m0))⌝ , nnf(0) = 0, (σσ(0) + ⌜nf⌝ ).take(m) + ⌜nf⌝ .take(nnf(m0 + 1)).drop(m - n) ≠ σσ(0) + ⌜nf.take(nnf(m0 + 1))⌝ , σσ ≠ [], nnf(m0) < nnf(m0 + 1), m < nnf(m0 + 1) + n, mon(σσ), n ≤ m, nnf(m0) + n ≤ m, ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ⊦ ∃ n. # σσ(n) = ∞ |
# σσ = ∞, # σσ(0) = ⌜n⌝ , σσ(m0) = σσ(0) + ⌜nf.take(nnf(m0))⌝ , nnf(0) = 0, (σσ(0) + ⌜nf⌝ ).take(m) + ⌜nf.take(nnf(m0 + 1)).drop(m - n)⌝ ≠ σσ(0) + ⌜nf.take(nnf(m0 + 1))⌝ , σσ ≠ [], m < nnf(m0 + 1) + n, nnf(m0) < nnf(m0 + 1), mon(σσ), nnf(m0) + n ≤ m, n ≤ m, ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n) ⊦ ∃ n. # σσ(n) = ∞
Used simplifier rules: ⊦ ⌜x⌝ .drop(n) = ⌜x.drop(n)⌝ ; (s) ⊦ ⌜nf⌝ .take(n) = ⌜nf.take(n)⌝ ; (s)
| # σσ = ∞, # σσ(0) = ⌜n⌝ , σσ(m0) = σσ(0) + ⌜nf.take(nnf(m0))⌝ , nnf(0) = 0, (σσ(0) + ⌜nf⌝ ).take(m) + ⌜nf.take(nnf(m0 + 1)).drop(m - n)⌝ ≠ σσ(0) + ⌜nf.take(nnf(m0 + 1))⌝ , σσ ≠ [], m < nnf(m0 + 1) + n, nnf(m0) < nnf(m0 + 1), mon(σσ), nnf(m0) + n ≤ m, n ≤ m, ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n) ⊦ ∃ n. # σσ(n) = ∞ |
# σσ(0) = ⌜n⌝ , # σσ = ∞, σσ(m0) = σσ(0) + ⌜nf.take(nnf(m0))⌝ , m = n1 + n, nnf(0) = 0, (σσ(0) + ⌜nf⌝ ).take(m) + ⌜nf.take(nnf(m0 + 1)).drop(n1)⌝ ≠ σσ(0) + ⌜nf.take(nnf(m0 + 1))⌝ , σσ ≠ [], nnf(m0) < nnf(m0 + 1), m < nnf(m0 + 1) + n, mon(σσ), n ≤ m, nnf(m0) + n ≤ m, ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ⊦ ∃ n. # σσ(n) = ∞
Used simplifier rules: n ≤ m ⊦ n0 = m - n ↔ m = n0 + n; (elim) Used terms: m, n, n1
| # σσ(0) = ⌜n⌝ , # σσ = ∞, σσ(m0) = σσ(0) + ⌜nf.take(nnf(m0))⌝ , m = n1 + n, nnf(0) = 0, (σσ(0) + ⌜nf⌝ ).take(m) + ⌜nf.take(nnf(m0 + 1)).drop(n1)⌝ ≠ σσ(0) + ⌜nf.take(nnf(m0 + 1))⌝ , σσ ≠ [], nnf(m0) < nnf(m0 + 1), m < nnf(m0 + 1) + n, mon(σσ), n ≤ m, nnf(m0) + n ≤ m, ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ⊦ ∃ n. # σσ(n) = ∞ |
# σσ = ∞, # σσ(0) = ⌜n⌝ , σσ(m0) = σσ(0) + ⌜nf.take(nnf(m0))⌝ , nnf(0) = 0, (σσ(0) + ⌜nf⌝ ).take(n1 + n) + ⌜nf.take(nnf(m0 + 1)).drop(n1)⌝ ≠ σσ(0) + ⌜nf.take(nnf(m0 + 1))⌝ , σσ ≠ [], n1 < nnf(m0 + 1), nnf(m0) < nnf(m0 + 1), mon(σσ), nnf(m0) ≤ n1, ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n) ⊦ ∃ n. # σσ(n) = ∞
Used simplifier rules: fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m + n < m + n0 ↔ n < n0; (s) ⊦ m ≤ m + n; (s) ⊦ m + n ≤ m + n0 ↔ n ≤ n0; (s)
| # σσ = ∞, # σσ(0) = ⌜n⌝ , σσ(m0) = σσ(0) + ⌜nf.take(nnf(m0))⌝ , nnf(0) = 0, (σσ(0) + ⌜nf⌝ ).take(n1 + n) + ⌜nf.take(nnf(m0 + 1)).drop(n1)⌝ ≠ σσ(0) + ⌜nf.take(nnf(m0 + 1))⌝ , σσ ≠ [], n1 < nnf(m0 + 1), nnf(m0) < nnf(m0 + 1), mon(σσ), nnf(m0) ≤ n1, ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n) ⊦ ∃ n. # σσ(n) = ∞ |
⊦ σ0 = σ1 ↔ # σ0 = # σ1 ∧ (∀ n. ⌜n⌝ < # σ0 → σ0(n) = σ1(n))
# σσ(0) = ⌜n⌝ , # σσ = ∞, σσ(m0) = σσ(0) + ⌜nf.take(nnf(m0))⌝ , nnf(0) = 0, σσ ≠ [], nnf(m0) < nnf(m0 + 1), n1 < nnf(m0 + 1), mon(σσ), nnf(m0) ≤ n1, ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , #((σσ(0) + ⌜nf⌝ ).take(n1 + n) + ⌜nf.take(nnf(m0 + 1)).drop(n1)⌝ ) ≠ #(σσ(0) + ⌜nf.take(nnf(m0 + 1))⌝ ) ∨ (∃ n0. ¬ ( ⌜n0⌝ < #((σσ(0) + ⌜nf⌝ ).take(n1 + n) + ⌜nf.take(nnf(m0 + 1)).drop(n1)⌝ ) → ((σσ(0) + ⌜nf⌝ ).take(n1 + n) + ⌜nf.take(nnf(m0 + 1)).drop(n1)⌝ )(n0) = (σσ(0) + ⌜nf.take(nnf(m0 + 1))⌝ )(n0))) ⊦ ∃ n. # σσ(n) = ∞
Used terms: (σσ(0) + ⌜nf⌝ ).take(n1 + n) + ⌜nf.take(nnf(m0 + 1)).drop(n1)⌝ , σσ(0) + ⌜nf.take(nnf(m0 + 1))⌝
| ⊦ σ0 = σ1 ↔ # σ0 = # σ1 ∧ (∀ n. ⌜n⌝ < # σ0 → σ0(n) = σ1(n)) |
| # σσ(0) = ⌜n⌝ , # σσ = ∞, σσ(m0) = σσ(0) + ⌜nf.take(nnf(m0))⌝ , nnf(0) = 0, σσ ≠ [], nnf(m0) < nnf(m0 + 1), n1 < nnf(m0 + 1), mon(σσ), nnf(m0) ≤ n1, ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , #((σσ(0) + ⌜nf⌝ ).take(n1 + n) + ⌜nf.take(nnf(m0 + 1)).drop(n1)⌝ ) ≠ #(σσ(0) + ⌜nf.take(nnf(m0 + 1))⌝ ) ∨ (∃ n0. ¬ ( ⌜n0⌝ < #((σσ(0) + ⌜nf⌝ ).take(n1 + n) + ⌜nf.take(nnf(m0 + 1)).drop(n1)⌝ ) → ((σσ(0) + ⌜nf⌝ ).take(n1 + n) + ⌜nf.take(nnf(m0 + 1)).drop(n1)⌝ )(n0) = (σσ(0) + ⌜nf.take(nnf(m0 + 1))⌝ )(n0))) ⊦ ∃ n. # σσ(n) = ∞ |
# σσ(0) = ⌜n⌝ , # σσ = ∞, σσ(m0) = σσ(0) + ⌜nf.take(nnf(m0))⌝ , nnf(0) = 0, ((σσ(0) + ⌜nf⌝ ).take(n1 + n) + ⌜nf.take(nnf(m0 + 1)).drop(n1)⌝ )(n0) ≠ (σσ(0) + ⌜nf.take(nnf(m0 + 1))⌝ )(n0), σσ ≠ [], nnf(m0) < nnf(m0 + 1), n1 < nnf(m0 + 1), n0 < nnf(m0 + 1) + n, mon(σσ), nnf(m0) ≤ n1, ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ⊦ ∃ 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 c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ n < m → (m - n) + n = m; (s) ⊦ ⌜n⌝ + ⌜m⌝ = ⌜n0⌝ ↔ n + m = n0; (s) ⊦ ⌜n⌝ + n∞1 = ⌜n⌝ + n∞2 ↔ n∞1 = n∞2; (s) ⊦ ⌜n1⌝ < ⌜n0⌝ + ⌜n⌝ + ⌜m⌝ ↔ n1 < n0 + n + m; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream-old ⊦ # nf.take(n) = n; (s) ¬ # x < n ⊦ # x.drop(n) = # x - n; (s) ⊦ m < n → ¬ n < m; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ ⌜m + n⌝ = ⌜m⌝ + ⌜n⌝ ; (s) ¬ # σ < ⌜n⌝ ⊦ # σ.take(n) = ⌜n⌝ ; (s) ⊦ ¬ ∞ < n∞; (s) ⊦ n∞ + ∞ = ∞; (s) ⊦ # ⌜nf⌝ = ∞; (s) ⊦ #(σ + σ1) = # σ + # σ1; (s) ⊦ # ⌜nf.take(n)⌝ = ⌜n⌝ ; (s)
| # σσ(0) = ⌜n⌝ , # σσ = ∞, σσ(m0) = σσ(0) + ⌜nf.take(nnf(m0))⌝ , nnf(0) = 0, ((σσ(0) + ⌜nf⌝ ).take(n1 + n) + ⌜nf.take(nnf(m0 + 1)).drop(n1)⌝ )(n0) ≠ (σσ(0) + ⌜nf.take(nnf(m0 + 1))⌝ )(n0), σσ ≠ [], nnf(m0) < nnf(m0 + 1), n1 < nnf(m0 + 1), n0 < nnf(m0 + 1) + n, mon(σσ), nnf(m0) ≤ n1, ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ⊦ ∃ n. # σσ(n) = ∞ |
⊦ ⌜m⌝ < # σ → (σ + σ1)(m) = σ(m)
# σσ = ∞, # σσ(0) = ⌜n⌝ , σσ(m0) = σσ(0) + ⌜nf.take(nnf(m0))⌝ , nnf(0) = 0, ((σσ(0) + ⌜nf⌝ ).take(n1 + n) + ⌜nf.take(nnf(m0 + 1)).drop(n1)⌝ )(n0) ≠ (σσ(0) + ⌜nf.take(nnf(m0 + 1))⌝ )(n0), σσ ≠ [], n0 < nnf(m0 + 1) + n, n1 < nnf(m0 + 1), nnf(m0) < nnf(m0 + 1), mon(σσ), nnf(m0) ≤ n1, ¬ ⌜n0⌝ < # σσ(0), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n) ⊦ ∃ n. # σσ(n) = ∞
# σσ = ∞, # σσ(0) = ⌜n⌝ , σσ(m0) = σσ(0) + ⌜nf.take(nnf(m0))⌝ , nnf(0) = 0, ((σσ(0) + ⌜nf⌝ ).take(n1 + n) + ⌜nf.take(nnf(m0 + 1)).drop(n1)⌝ )(n0) ≠ σσ(0)(n0), σσ ≠ [], n0 < nnf(m0 + 1) + n, n1 < nnf(m0 + 1), nnf(m0) < nnf(m0 + 1), ⌜n0⌝ < # σσ(0), mon(σσ), nnf(m0) ≤ n1, ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n) ⊦ ∃ n. # σσ(n) = ∞
Used terms: σσ(0), ⌜nf.take(nnf(m0 + 1))⌝ , n0
| ⊦ ⌜m⌝ < # σ → (σ + σ1)(m) = σ(m) |
| # σσ = ∞, # σσ(0) = ⌜n⌝ , σσ(m0) = σσ(0) + ⌜nf.take(nnf(m0))⌝ , nnf(0) = 0, ((σσ(0) + ⌜nf⌝ ).take(n1 + n) + ⌜nf.take(nnf(m0 + 1)).drop(n1)⌝ )(n0) ≠ (σσ(0) + ⌜nf.take(nnf(m0 + 1))⌝ )(n0), σσ ≠ [], n0 < nnf(m0 + 1) + n, n1 < nnf(m0 + 1), nnf(m0) < nnf(m0 + 1), mon(σσ), nnf(m0) ≤ n1, ¬ ⌜n0⌝ < # σσ(0), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n) ⊦ ∃ n. # σσ(n) = ∞ |
# σσ = ∞, # σσ(0) = ⌜n⌝ , σσ(m0) = σσ(0) + ⌜nf.take(nnf(m0))⌝ , nnf(0) = 0, ((σσ(0) + ⌜nf⌝ ).take(n1 + n) + ⌜nf.take(nnf(m0 + 1)).drop(n1)⌝ )(n0) ≠ nf(n0 - n), σσ ≠ [], n0 < nnf(m0 + 1) + n, n1 < nnf(m0 + 1), nnf(m0) < nnf(m0 + 1), mon(σσ), nnf(m0) ≤ n1, n ≤ n0, ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n) ⊦ ∃ n. # σσ(n) = ∞
Used simplifier rules: ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) m < n ⊦ nf.take(n)(m) = nf(m); (s) ⊦ m < n → (n ≤ m ↔ false); (s) n0 ≤ n ⊦ n - n0 < m ↔ n < m + n0; (s) ⊦ m ≤ n ↔ ¬ n < m; (ss) ⊦ ⌜n⌝ .n = n; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream-old ⊦ ⌜x⌝ (n) = x(n); (s) ⊦ ¬ ⌜m⌝ < # σ → (σ + σ1)(m) = σ1(m - (# σ).n); (s)
| # σσ = ∞, # σσ(0) = ⌜n⌝ , σσ(m0) = σσ(0) + ⌜nf.take(nnf(m0))⌝ , nnf(0) = 0, ((σσ(0) + ⌜nf⌝ ).take(n1 + n) + ⌜nf.take(nnf(m0 + 1)).drop(n1)⌝ )(n0) ≠ nf(n0 - n), σσ ≠ [], n0 < nnf(m0 + 1) + n, n1 < nnf(m0 + 1), nnf(m0) < nnf(m0 + 1), mon(σσ), nnf(m0) ≤ n1, n ≤ n0, ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n) ⊦ ∃ n. # σσ(n) = ∞ |
# σσ(0) = ⌜n⌝ , # σσ = ∞, σσ(m0) = σσ(0) + ⌜nf.take(nnf(m0))⌝ , n0 = n2 + n, nnf(0) = 0, ((σσ(0) + ⌜nf⌝ ).take(n1 + n) + ⌜nf.take(nnf(m0 + 1)).drop(n1)⌝ )(n0) ≠ nf(n2), σσ ≠ [], nnf(m0) < nnf(m0 + 1), n1 < nnf(m0 + 1), n0 < nnf(m0 + 1) + n, mon(σσ), n ≤ n0, nnf(m0) ≤ n1, ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ⊦ ∃ n. # σσ(n) = ∞
Used simplifier rules: n ≤ m ⊦ n0 = m - n ↔ m = n0 + n; (elim) Used terms: n0, n, n2
| # σσ(0) = ⌜n⌝ , # σσ = ∞, σσ(m0) = σσ(0) + ⌜nf.take(nnf(m0))⌝ , n0 = n2 + n, nnf(0) = 0, ((σσ(0) + ⌜nf⌝ ).take(n1 + n) + ⌜nf.take(nnf(m0 + 1)).drop(n1)⌝ )(n0) ≠ nf(n2), σσ ≠ [], nnf(m0) < nnf(m0 + 1), n1 < nnf(m0 + 1), n0 < nnf(m0 + 1) + n, mon(σσ), n ≤ n0, nnf(m0) ≤ n1, ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ⊦ ∃ n. # σσ(n) = ∞ |
# σσ = ∞, # σσ(0) = ⌜n⌝ , σσ(m0) = σσ(0) + ⌜nf.take(nnf(m0))⌝ , nnf(0) = 0, ((σσ(0) + ⌜nf⌝ ).take(n1 + n) + ⌜nf.take(nnf(m0 + 1)).drop(n1)⌝ )(n2 + n) ≠ nf(n2), σσ ≠ [], n1 < nnf(m0 + 1), nnf(m0) < nnf(m0 + 1), n2 < nnf(m0 + 1), mon(σσ), nnf(m0) ≤ n1, ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n) ⊦ ∃ n. # σσ(n) = ∞
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m + n < m + n0 ↔ n < n0; (s) ⊦ m ≤ m + n; (s)
| # σσ = ∞, # σσ(0) = ⌜n⌝ , σσ(m0) = σσ(0) + ⌜nf.take(nnf(m0))⌝ , nnf(0) = 0, ((σσ(0) + ⌜nf⌝ ).take(n1 + n) + ⌜nf.take(nnf(m0 + 1)).drop(n1)⌝ )(n2 + n) ≠ nf(n2), σσ ≠ [], n1 < nnf(m0 + 1), nnf(m0) < nnf(m0 + 1), n2 < nnf(m0 + 1), mon(σσ), nnf(m0) ≤ n1, ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n) ⊦ ∃ n. # σσ(n) = ∞ |
⊦ ⌜m⌝ < # σ → (σ + σ1)(m) = σ(m)
# σσ(0) = ⌜n⌝ , # σσ = ∞, σσ(m0) = σσ(0) + ⌜nf.take(nnf(m0))⌝ , nnf(0) = 0, ((σσ(0) + ⌜nf⌝ ).take(n1 + n) + ⌜nf.take(nnf(m0 + 1)).drop(n1)⌝ )(n2 + n) ≠ nf(n2), σσ ≠ [], n2 < nnf(m0 + 1), nnf(m0) < nnf(m0 + 1), n1 < nnf(m0 + 1), mon(σσ), nnf(m0) ≤ n1, ¬ ⌜n2 + n⌝ < # (σσ(0) + ⌜nf⌝ ).take(n1 + n), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ⊦ ∃ n. # σσ(n) = ∞
# σσ(0) = ⌜n⌝ , # σσ = ∞, σσ(m0) = σσ(0) + ⌜nf.take(nnf(m0))⌝ , nnf(0) = 0, (σσ(0) + ⌜nf⌝ ).take(n1 + n)(n2 + n) ≠ nf(n2), σσ ≠ [], n2 < nnf(m0 + 1), nnf(m0) < nnf(m0 + 1), n1 < nnf(m0 + 1), ⌜n2 + n⌝ < # (σσ(0) + ⌜nf⌝ ).take(n1 + n), mon(σσ), nnf(m0) ≤ n1, ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ⊦ ∃ n. # σσ(n) = ∞
Used terms: (σσ(0) + ⌜nf⌝ ).take(n1 + n), ⌜nf.take(nnf(m0 + 1)).drop(n1)⌝ , n2 + n
| ⊦ ⌜m⌝ < # σ → (σ + σ1)(m) = σ(m) |
| # σσ(0) = ⌜n⌝ , # σσ = ∞, σσ(m0) = σσ(0) + ⌜nf.take(nnf(m0))⌝ , nnf(0) = 0, ((σσ(0) + ⌜nf⌝ ).take(n1 + n) + ⌜nf.take(nnf(m0 + 1)).drop(n1)⌝ )(n2 + n) ≠ nf(n2), σσ ≠ [], n2 < nnf(m0 + 1), nnf(m0) < nnf(m0 + 1), n1 < nnf(m0 + 1), mon(σσ), nnf(m0) ≤ n1, ¬ ⌜n2 + n⌝ < # (σσ(0) + ⌜nf⌝ ).take(n1 + n), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ⊦ ∃ n. # σσ(n) = ∞ |
# σσ = ∞, # σσ(0) = ⌜n⌝ , σσ(m0) = σσ(0) + ⌜nf.take(nnf(m0))⌝ , nnf(0) = 0, nf(n1 + (n2 - n1)) ≠ nf(n2), σσ ≠ [], nnf(m0) < nnf(m0 + 1), n2 < nnf(m0 + 1), n1 < nnf(m0 + 1), mon(σσ), nnf(m0) ≤ n1, n1 ≤ n2, nnf(m0) ≤ n2, ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n) ⊦ ∃ n. # σσ(n) = ∞
Used simplifier rules: let: ⊦ n ≤ n0 ∧ n0 ≤ n1 → n ≤ n1; (forward) from specification nat fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat m < n ⊦ nf.take(n)(m) = nf(m); (s) ⊦ m < n → (n ≤ m ↔ false); (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ n < m → (m - n) + n = m; (s) ⊦ m ≠ n → (m ≤ n ↔ m < n); (s) ⊦ m ≤ n → (n - m = 0 ↔ n = m); (s) ⊦ m < m + n ↔ n ≠ 0; (s) fle: ⊦ m < n ∧ n ≤ n0 → m < n0; (forward) from specification nat ⊦ m < n ↔ ¬ n ≤ m; (ss) m + m0 < # x ⊦ x.drop(m)(m0) = x(m + m0); (s) ⊦ # nf.take(n) = 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 ⊦ m + n < m + n0 ↔ n < n0; (s) ⊦ ⌜n⌝ + ⌜m⌝ < ⌜n0⌝ + ⌜n1⌝ ↔ n + m < n0 + n1; (s) ⊦ ⌜m + n⌝ = ⌜m⌝ + ⌜n⌝ ; (s) ¬ # σ < ⌜n⌝ ⊦ # σ.take(n) = ⌜n⌝ ; (s) ⊦ ¬ ∞ < n∞; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream-old ⊦ n∞ + ∞ = ∞; (s) ⊦ # ⌜nf⌝ = ∞; (s) ⊦ #(σ + σ1) = # σ + # σ1; (s) ⊦ ⌜x⌝ (n) = x(n); (s) ⊦ m + n - n + n1 = m - n1; (s) ⊦ ⌜n⌝ .n = n; (s) n∞ ≠ ∞ ⊦ (⌜m⌝ + n∞).n = m + n∞.n; (s) ⊦ ⌜n⌝ ≠ ∞; (s) ⊦ ¬ ⌜m⌝ < # σ → (σ + σ1)(m) = σ1(m - (# σ).n); (s)
| # σσ = ∞, # σσ(0) = ⌜n⌝ , σσ(m0) = σσ(0) + ⌜nf.take(nnf(m0))⌝ , nnf(0) = 0, nf(n1 + (n2 - n1)) ≠ nf(n2), σσ ≠ [], nnf(m0) < nnf(m0 + 1), n2 < nnf(m0 + 1), n1 < nnf(m0 + 1), mon(σσ), nnf(m0) ≤ n1, n1 ≤ n2, nnf(m0) ≤ n2, ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n) ⊦ ∃ n. # σσ(n) = ∞ |
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic n ≤ m ⊦ n0 = m - n ↔ m = n0 + n; (elim) Used terms: n2, n1, n3
| # σσ(0) = ⌜n⌝ , # σσ = ∞, σσ(m0) = σσ(0) + ⌜nf.take(nnf(m0))⌝ , nnf(0) = 0, (σσ(0) + ⌜nf⌝ ).take(n1 + n)(n2 + n) ≠ nf(n2), σσ ≠ [], n2 < nnf(m0 + 1), nnf(m0) < nnf(m0 + 1), n1 < nnf(m0 + 1), ⌜n2 + n⌝ < # (σσ(0) + ⌜nf⌝ ).take(n1 + n), mon(σσ), nnf(m0) ≤ n1, ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ⊦ ∃ n. # σσ(n) = ∞ |
# σσ(0) = ⌜n⌝ , # σσ = ∞, σσ(m0) = σσ(0) + ⌜nf.take(nnf(m0))⌝ , nnf(0) = 0, (σσ(0) + ⌜nf⌝ )(n2 + n) ≠ nf(n2), σσ ≠ [], n2 < n1, n2 < nnf(m0 + 1), nnf(m0) < nnf(m0 + 1), n1 < nnf(m0 + 1), n2 + 1 < nnf(m0 + 1), mon(σσ), nnf(m0) ≤ n1, ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ⊦ ∃ n. # σσ(n) = ∞
Used simplifier rules: ⊦ m.+1 = m + 1; (s) ⊦ m < n → n ≠ 0; (s) trans-Nat: ⊦ n < n0 ∧ n0 < n1 → n < n1; (forward) from specification nat-basic lf: ⊦ m < n ∧ n < n0 → m.+1 < n0; (forward) from specification nat-basic f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic m < n, ¬ # σ < ⌜n⌝ ⊦ σ.take(n)(m) = σ(m); (s) ⊦ ¬ ∞ < 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) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream-old 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∞ + ∞ = ∞; (s) ⊦ # ⌜nf⌝ = ∞; (s) ⊦ #(σ + σ1) = # σ + # σ1; (s) ⊦ m + n < m + n0 ↔ n < n0; (s) ⊦ ⌜n⌝ + ⌜m⌝ < ⌜n0⌝ + ⌜n1⌝ ↔ n + m < n0 + n1; (s) ¬ # σ < ⌜n⌝ ⊦ # σ.take(n) = ⌜n⌝ ; (s)
| # σσ(0) = ⌜n⌝ , # σσ = ∞, σσ(m0) = σσ(0) + ⌜nf.take(nnf(m0))⌝ , nnf(0) = 0, (σσ(0) + ⌜nf⌝ )(n2 + n) ≠ nf(n2), σσ ≠ [], n2 < n1, n2 < nnf(m0 + 1), nnf(m0) < nnf(m0 + 1), n1 < nnf(m0 + 1), n2 + 1 < nnf(m0 + 1), mon(σσ), nnf(m0) ≤ n1, ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ⊦ ∃ n. # σσ(n) = ∞ |
⊦ ⌜m⌝ < # σ → (σ + σ1)(m) = σ(m)
Used simplifier rules: ⊦ ⌜m + n⌝ = ⌜m⌝ + ⌜n⌝ ; (s) ⊦ ⌜n⌝ + ⌜m⌝ < ⌜n0⌝ ↔ n + m < n0; (s) ⊦ ¬ m + n < m; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic 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⌝ < # σ → (σ + σ1)(m) = σ1(m - (# σ).n); (s) ⊦ ⌜nf⌝ (n) = nf(n); (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream-old ⊦ ⌜n⌝ .n = n; (s) ⊦ m + n - m = n; (s) Used terms: σσ(0), ⌜nf⌝ , n2 + n
| ⊦ ⌜m⌝ < # σ → (σ + σ1)(m) = σ(m) |
| # σσ = ∞, # σσ(0) = ⌜n⌝ , σσ(m0) = σσ(0) + ⌜nf.take(nnf(m0))⌝ , nnf(0) = 0, ((σσ(0) + ⌜nf⌝ ).take(n1 + n) + ⌜nf.take(nnf(m0 + 1)).drop(n1)⌝ )(n0) ≠ σσ(0)(n0), σσ ≠ [], n0 < nnf(m0 + 1) + n, n1 < nnf(m0 + 1), nnf(m0) < nnf(m0 + 1), ⌜n0⌝ < # σσ(0), mon(σσ), nnf(m0) ≤ n1, ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n) ⊦ ∃ n. # σσ(n) = ∞ |
# σσ(0) = ⌜n⌝ , # σσ = ∞, σσ(m0) = σσ(0) + ⌜nf.take(nnf(m0))⌝ , nnf(0) = 0, ((σσ(0) + ⌜nf⌝ ).take(n1 + n) + ⌜nf.take(nnf(m0 + 1)).drop(n1)⌝ )(n0) ≠ σσ(0)(n0), σσ ≠ [], n0 < n, nnf(m0) < nnf(m0 + 1), n1 < nnf(m0 + 1), n0 < nnf(m0 + 1) + n, mon(σσ), nnf(m0) ≤ n1, ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ⊦ ∃ 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)
| # σσ(0) = ⌜n⌝ , # σσ = ∞, σσ(m0) = σσ(0) + ⌜nf.take(nnf(m0))⌝ , nnf(0) = 0, ((σσ(0) + ⌜nf⌝ ).take(n1 + n) + ⌜nf.take(nnf(m0 + 1)).drop(n1)⌝ )(n0) ≠ σσ(0)(n0), σσ ≠ [], n0 < n, nnf(m0) < nnf(m0 + 1), n1 < nnf(m0 + 1), n0 < nnf(m0 + 1) + n, mon(σσ), nnf(m0) ≤ n1, ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ⊦ ∃ n. # σσ(n) = ∞ |
⊦ ¬ ⌜m⌝ < # σ → (σ + σ1)(m) = σ1(m - (# σ).n)
# σσ = ∞, # σσ(0) = ⌜n⌝ , σσ(m0) = σσ(0) + ⌜nf.take(nnf(m0))⌝ , nnf(0) = 0, ((σσ(0) + ⌜nf⌝ ).take(n1 + n) + ⌜nf.take(nnf(m0 + 1)).drop(n1)⌝ )(n0) ≠ σσ(0)(n0), σσ ≠ [], ⌜n0⌝ < # (σσ(0) + ⌜nf⌝ ).take(n1 + n), n0 < nnf(m0 + 1) + n, n1 < nnf(m0 + 1), nnf(m0) < nnf(m0 + 1), n0 < n, mon(σσ), nnf(m0) ≤ n1, ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n) ⊦ ∃ n. # σσ(n) = ∞
Used simplifier rules: ⊦ ⌜n⌝ ≠ ∞; (s) n∞ ≠ ∞ ⊦ (⌜m⌝ + n∞).n = m + n∞.n; (s) ⊦ ⌜n⌝ .n = n; (s) ⊦ ⌜x⌝ (n) = x(n); (s) ⊦ #(σ + σ1) = # σ + # σ1; (s) ⊦ # ⌜nf⌝ = ∞; (s) ⊦ n∞ + ∞ = ∞; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream-old ⊦ ¬ ∞ < 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 ⊦ m < n → ⌜m⌝ < ⌜n⌝ + n∞0; (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) + ⌜nf⌝ ).take(n1 + n), ⌜nf.take(nnf(m0 + 1)).drop(n1)⌝ , n0
| ⊦ ¬ ⌜m⌝ < # σ → (σ + σ1)(m) = σ1(m - (# σ).n) |
| # σσ = ∞, # σσ(0) = ⌜n⌝ , σσ(m0) = σσ(0) + ⌜nf.take(nnf(m0))⌝ , nnf(0) = 0, ((σσ(0) + ⌜nf⌝ ).take(n1 + n) + ⌜nf.take(nnf(m0 + 1)).drop(n1)⌝ )(n0) ≠ σσ(0)(n0), σσ ≠ [], ⌜n0⌝ < # (σσ(0) + ⌜nf⌝ ).take(n1 + n), n0 < nnf(m0 + 1) + n, n1 < nnf(m0 + 1), nnf(m0) < nnf(m0 + 1), n0 < n, mon(σσ), nnf(m0) ≤ n1, ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n) ⊦ ∃ n. # σσ(n) = ∞ |
# σσ(0) = ⌜n⌝ , # σσ = ∞, σσ(m0) = σσ(0) + ⌜nf.take(nnf(m0))⌝ , nnf(0) = 0, (σσ(0) + ⌜nf⌝ )(n0) ≠ σσ(0)(n0), σσ ≠ [], n0 < n, nnf(m0) < nnf(m0 + 1), n1 < nnf(m0 + 1), n0 < nnf(m0 + 1) + n, mon(σσ), nnf(m0) ≤ n1, ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ⊦ ∃ 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 ⊦ m < n → ⌜m⌝ < ⌜n⌝ + n∞0; (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) ¬ # σ < ⌜n⌝ ⊦ # σ.take(n) = ⌜n⌝ ; (s) ⊦ ¬ ∞ < n∞; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream-old ⊦ n∞ + ∞ = ∞; (s) ⊦ # ⌜nf⌝ = ∞; (s) ⊦ #(σ + σ1) = # σ + # σ1; (s) m < n, ¬ # σ < ⌜n⌝ ⊦ σ.take(n)(m) = σ(m); (s) ⊦ ¬ m + n < m; (s) ⊦ m + n < m0 → m + n < m0 + n0; (s) fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ ⌜m⌝ < # σ → (σ + σ1)(m) = σ(m); (s)
| # σσ(0) = ⌜n⌝ , # σσ = ∞, σσ(m0) = σσ(0) + ⌜nf.take(nnf(m0))⌝ , nnf(0) = 0, (σσ(0) + ⌜nf⌝ )(n0) ≠ σσ(0)(n0), σσ ≠ [], n0 < n, nnf(m0) < nnf(m0 + 1), n1 < nnf(m0 + 1), n0 < nnf(m0 + 1) + n, mon(σσ), nnf(m0) ≤ n1, ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ⊦ ∃ n. # σσ(n) = ∞ |
⊦ ⌜m⌝ < # σ → (σ + σ1)(m) = σ(m)
Used simplifier rules: ⊦ ¬ ⌜m⌝ < # σ → (σ + σ1)(m) = σ1(m - (# σ).n); (s) ⊦ ⌜nf⌝ (n) = nf(n); (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream-old ⊦ ⌜n⌝ .n = n; (s) ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ m < n → (n ≤ m ↔ false); (s) Used terms: σσ(0), ⌜nf⌝ , n0
| ⊦ ⌜m⌝ < # σ → (σ + σ1)(m) = σ(m) |
| # σσ = ∞, nnf(0) = 0, σσ ≠ [], mon(σσ), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ⊦ ∀ n. σσ(n) = σσ(0) + ⌜nf.take(nnf(n))⌝ , ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))), ∃ n. # σσ(n) = ∞ |
# σσ = ∞, nnf(0) = 0, σσ(n) ≠ σσ(0) + ⌜nf.take(nnf(n))⌝ , σσ ≠ [], mon(σσ), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n) ⊦ ∃ n. # σσ(n) = ∞, ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n)))
| # σσ = ∞, nnf(0) = 0, σσ(n) ≠ σσ(0) + ⌜nf.take(nnf(n))⌝ , σσ ≠ [], mon(σσ), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n) ⊦ ∃ n. # σσ(n) = ∞, ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))) |
# σσ = ∞, nnf(0) = 0, σσ(n0.+1) ≠ σσ(0) + ⌜nf.take(nnf(n0.+1))⌝ , σσ ≠ [], mon(σσ), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ σσ, nnf, nf, f_Nat->List<A>. # σσ = ∞ ∧ nnf(0) = 0 ∧ σσ(n0) ≠ σσ(0) + ⌜nf.take(nnf(n0))⌝ ∧ σσ ≠ [] ∧ mon(σσ) ∧ (∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ) ∧ (∀ m, n. m ≤ n → nnf(m) ≤ nnf(n)) ∧ (∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1)) ∧ (∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n)) → (∃ n. # σσ(n) = ∞) ∨ (∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n)))) ⊦ ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))), ∃ n. # σσ(n) = ∞
Used simplifier rules: Nat freely generated by 0, +1; ⊦ σ + σ0 = σ ↔ σ0 = [] ∨ # σ = ∞; (s) ⊦ ⌜x⌝ = [] ↔ x = []; (s) ⊦ nf.take(n) = [] ↔ n = 0; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream-old
| # σσ = ∞, nnf(0) = 0, σσ(n0.+1) ≠ σσ(0) + ⌜nf.take(nnf(n0.+1))⌝ , σσ ≠ [], mon(σσ), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ σσ, nnf, nf, f_Nat->List<A>. # σσ = ∞ ∧ nnf(0) = 0 ∧ σσ(n0) ≠ σσ(0) + ⌜nf.take(nnf(n0))⌝ ∧ σσ ≠ [] ∧ mon(σσ) ∧ (∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ) ∧ (∀ m, n. m ≤ n → nnf(m) ≤ nnf(n)) ∧ (∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1)) ∧ (∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n)) → (∃ n. # σσ(n) = ∞) ∨ (∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n)))) ⊦ ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))), ∃ n. # σσ(n) = ∞ |
# σσ = ∞, nnf(0) = 0, σσ(n0 + 1) ≠ σσ(0) + ⌜nf.take(nnf(n0 + 1))⌝ , σσ ≠ [], mon(σσ), ∀ σσ, nnf, nf, f_Nat->List<A>. # σσ = ∞ ∧ nnf(0) = 0 ∧ σσ(n0) ≠ σσ(0) + ⌜nf.take(nnf(n0))⌝ ∧ σσ ≠ [] ∧ mon(σσ) ∧ (∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ) ∧ (∀ m, n. m ≤ n → nnf(m) ≤ nnf(n)) ∧ (∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1)) ∧ (∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n)) → (∃ n. # σσ(n) = ∞) ∨ (∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n)))), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n) ⊦ ∃ n. # σσ(n) = ∞, ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n)))
Used simplifier rules: ⊦ m.+1 = m + 1; (s)
| # σσ = ∞, nnf(0) = 0, σσ(n0 + 1) ≠ σσ(0) + ⌜nf.take(nnf(n0 + 1))⌝ , σσ ≠ [], mon(σσ), ∀ σσ, nnf, nf, f_Nat->List<A>. # σσ = ∞ ∧ nnf(0) = 0 ∧ σσ(n0) ≠ σσ(0) + ⌜nf.take(nnf(n0))⌝ ∧ σσ ≠ [] ∧ mon(σσ) ∧ (∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ) ∧ (∀ m, n. m ≤ n → nnf(m) ≤ nnf(n)) ∧ (∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1)) ∧ (∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n)) → (∃ n. # σσ(n) = ∞) ∨ (∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n)))), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n) ⊦ ∃ n. # σσ(n) = ∞, ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))) |
# σσ = ∞, nnf(0) = 0, σσ(n0 + 1) ≠ σσ(0) + ⌜nf.take(nnf(n0 + 1))⌝ , σσ ≠ [], mon(σσ), # σσ = ∞ ∧ nnf(0) = 0 ∧ σσ(n0) ≠ σσ(0) + ⌜nf.take(nnf(n0))⌝ ∧ σσ ≠ [] ∧ mon(σσ) ∧ (∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ) ∧ (∀ m, n. m ≤ n → nnf(m) ≤ nnf(n)) ∧ (∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1)) ∧ (∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n)) → (∃ n. # σσ(n) = ∞) ∨ (∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n)))), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ⊦ ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))), ∃ n. # σσ(n) = ∞
Used terms: σσ, nnf, nf, f_Nat->List<A>
| # σσ = ∞, nnf(0) = 0, σσ(n0 + 1) ≠ σσ(0) + ⌜nf.take(nnf(n0 + 1))⌝ , σσ ≠ [], mon(σσ), # σσ = ∞ ∧ nnf(0) = 0 ∧ σσ(n0) ≠ σσ(0) + ⌜nf.take(nnf(n0))⌝ ∧ σσ ≠ [] ∧ mon(σσ) ∧ (∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ) ∧ (∀ m, n. m ≤ n → nnf(m) ≤ nnf(n)) ∧ (∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1)) ∧ (∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n)) → (∃ n. # σσ(n) = ∞) ∨ (∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n)))), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ⊦ ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))), ∃ n. # σσ(n) = ∞ |
# σσ = ∞, σσ(n0) = σσ(0) + ⌜nf.take(nnf(n0))⌝ , nnf(0) = 0, σσ(n0 + 1) ≠ σσ(0) + ⌜nf.take(nnf(n0 + 1))⌝ , σσ ≠ [], mon(σσ), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n) ⊦ ∃ n. # σσ(n) = ∞, ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n)))
| # σσ = ∞, σσ(n0) = σσ(0) + ⌜nf.take(nnf(n0))⌝ , nnf(0) = 0, σσ(n0 + 1) ≠ σσ(0) + ⌜nf.take(nnf(n0 + 1))⌝ , σσ ≠ [], mon(σσ), ∀ n0. σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n) ⊦ ∃ n. # σσ(n) = ∞, ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))) |
# σσ = ∞, σσ(n0) = σσ(0) + ⌜nf.take(nnf(n0))⌝ , σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , nnf(0) = 0, σσ(n0 + 1) ≠ σσ(0) + ⌜nf.take(nnf(n0 + 1))⌝ , σσ ≠ [], mon(σσ), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n) ⊦ ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))), ∃ n. # σσ(n) = ∞
Used terms: n0
| # σσ = ∞, σσ(n0) = σσ(0) + ⌜nf.take(nnf(n0))⌝ , σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , nnf(0) = 0, σσ(n0 + 1) ≠ σσ(0) + ⌜nf.take(nnf(n0 + 1))⌝ , σσ ≠ [], mon(σσ), ∀ n. nnf(n + 1) = nnf(n) + # f_Nat->List<A>(n) ∧ nf.drop(nnf(n)).take(# f_Nat->List<A>(n)) = f_Nat->List<A>(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n) ⊦ ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))), ∃ n. # σσ(n) = ∞ |
# σσ = ∞, nf.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0), σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , σσ(n0) = σσ(0) + ⌜nf.take(nnf(n0))⌝ , nnf(0) = 0, nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0), σσ(n0 + 1) ≠ σσ(0) + ⌜nf.take(nnf(n0 + 1))⌝ , σσ ≠ [], mon(σσ), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1) ⊦ ∃ n. # σσ(n) = ∞, ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n)))
Used terms: n0
| # σσ = ∞, nf.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0), σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , σσ(n0) = σσ(0) + ⌜nf.take(nnf(n0))⌝ , nnf(0) = 0, nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0), σσ(n0 + 1) ≠ σσ(0) + ⌜nf.take(nnf(n0 + 1))⌝ , σσ ≠ [], mon(σσ), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1) ⊦ ∃ n. # σσ(n) = ∞, ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))) |
# σσ = ∞, nf.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0), σσ(n0) = σσ(0) + ⌜nf.take(nnf(n0))⌝ , σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0), nnf(0) = 0, σσ(n0 + 1) ≠ σσ(0) + ⌜nf.take(nnf(n0 + 1))⌝ , σσ ≠ [], mon(σσ), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n) ⊦ ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))), ∃ n. # σσ(n) = ∞
| # σσ = ∞, nf.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0), σσ(n0) = σσ(0) + ⌜nf.take(nnf(n0))⌝ , σσ(n0 + 1) = σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ , nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0), nnf(0) = 0, σσ(n0 + 1) ≠ σσ(0) + ⌜nf.take(nnf(n0 + 1))⌝ , σσ ≠ [], mon(σσ), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n) ⊦ ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))), ∃ n. # σσ(n) = ∞ |
# σσ = ∞, nf.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0), σσ(n0) = σσ(0) + ⌜nf.take(nnf(n0))⌝ , nnf(0) = 0, nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0), σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ≠ σσ(0) + ⌜nf.take(nnf(n0 + 1))⌝ , σσ ≠ [], mon(σσ), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1) ⊦ ∃ n. # σσ(n) = ∞, ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n)))
| # σσ = ∞, nf.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0), σσ(n0) = σσ(0) + ⌜nf.take(nnf(n0))⌝ , nnf(0) = 0, nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0), σσ(n0) + ⌜f_Nat->List<A>(n0)⌝ ≠ σσ(0) + ⌜nf.take(nnf(n0 + 1))⌝ , σσ ≠ [], mon(σσ), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1) ⊦ ∃ n. # σσ(n) = ∞, ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))) |
# σσ = ∞, nf.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0), nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0), nnf(0) = 0, (σσ(0) + ⌜nf.take(nnf(n0))⌝ ) + ⌜f_Nat->List<A>(n0)⌝ ≠ σσ(0) + ⌜nf.take(nnf(n0 + 1))⌝ , σσ ≠ [], mon(σσ), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n) ⊦ ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))), ∃ n. # σσ(n) = ∞
| # σσ = ∞, nf.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0), nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0), nnf(0) = 0, (σσ(0) + ⌜nf.take(nnf(n0))⌝ ) + ⌜f_Nat->List<A>(n0)⌝ ≠ σσ(0) + ⌜nf.take(nnf(n0 + 1))⌝ , σσ ≠ [], mon(σσ), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n) ⊦ ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))), ∃ n. # σσ(n) = ∞ |
# σσ = ∞, nf.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0), nnf(0) = 0, nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0), # σσ(0) ≠ ∞, nf.take(nnf(n0)) + f_Nat->List<A>(n0) ≠ nf.take(nnf(n0 + 1)), σσ ≠ [], mon(σσ), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1) ⊦ ∃ n. # σσ(n) = ∞, ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n)))
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream-old ⊦ ⌜x⌝ + ⌜y⌝ = ⌜z⌝ ↔ x + y = z; (s) ⊦ σ + σ1 = σ + σ2 ↔ σ1 = σ2 ∨ # σ = ∞; (ws)
| # σσ = ∞, nf.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) = f_Nat->List<A>(n0), nnf(0) = 0, nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0), # σσ(0) ≠ ∞, nf.take(nnf(n0)) + f_Nat->List<A>(n0) ≠ nf.take(nnf(n0 + 1)), σσ ≠ [], mon(σσ), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1) ⊦ ∃ n. # σσ(n) = ∞, ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))) |
# σσ = ∞, nnf(n0 + 1) = nnf(n0) + # nf.drop(nnf(n0)).take(# f_Nat->List<A>(n0)), nnf(0) = 0, # σσ(0) ≠ ∞, nf.take(nnf(n0)) + nf.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) ≠ nf.take(nnf(n0 + 1)), σσ ≠ [], mon(σσ), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n) ⊦ ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))), ∃ n. # σσ(n) = ∞
| # σσ = ∞, nnf(n0 + 1) = nnf(n0) + # nf.drop(nnf(n0)).take(# f_Nat->List<A>(n0)), nnf(0) = 0, # σσ(0) ≠ ∞, nf.take(nnf(n0)) + nf.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) ≠ nf.take(nnf(n0 + 1)), σσ ≠ [], mon(σσ), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n) ⊦ ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))), ∃ n. # σσ(n) = ∞ |
# σσ = ∞, nnf(0) = 0, nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0), # σσ(0) ≠ ∞, nf.take(nnf(n0)) + nf.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) ≠ nf.take(nnf(n0 + 1)), σσ ≠ [], mon(σσ), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1) ⊦ ∃ n. # σσ(n) = ∞, ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n)))
Used simplifier rules: ⊦ # nf.take(n) = n; (s)
| # σσ = ∞, nnf(0) = 0, nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0), # σσ(0) ≠ ∞, nf.take(nnf(n0)) + nf.drop(nnf(n0)).take(# f_Nat->List<A>(n0)) ≠ nf.take(nnf(n0 + 1)), σσ ≠ [], mon(σσ), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1) ⊦ ∃ n. # σσ(n) = ∞, ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))) |
⊦ x = y ↔ # x = # y ∧ (∀ n. n < # x → x(n) = y(n))
# σσ = ∞, nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0), nnf(0) = 0, # σσ(0) ≠ ∞, σσ ≠ [], mon(σσ), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), #(nf.take(nnf(n0)) + nf.drop(nnf(n0)).take(# f_Nat->List<A>(n0))) ≠ # nf.take(nnf(n0 + 1)) ∨ (∃ n. ¬ ( n < #(nf.take(nnf(n0)) + nf.drop(nnf(n0)).take(# f_Nat->List<A>(n0))) → (nf.take(nnf(n0)) + nf.drop(nnf(n0)).take(# f_Nat->List<A>(n0)))(n) = nf.take(nnf(n0 + 1))(n))) ⊦ ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))), ∃ n. # σσ(n) = ∞
Used terms: nf.take(nnf(n0 + 1)), nf.take(nnf(n0)) + nf.drop(nnf(n0)).take(# f_Nat->List<A>(n0))
| ⊦ x = y ↔ # x = # y ∧ (∀ n. n < # x → x(n) = y(n)) |
| # σσ = ∞, nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0), nnf(0) = 0, # σσ(0) ≠ ∞, σσ ≠ [], mon(σσ), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), #(nf.take(nnf(n0)) + nf.drop(nnf(n0)).take(# f_Nat->List<A>(n0))) ≠ # nf.take(nnf(n0 + 1)) ∨ (∃ n. ¬ ( n < #(nf.take(nnf(n0)) + nf.drop(nnf(n0)).take(# f_Nat->List<A>(n0))) → (nf.take(nnf(n0)) + nf.drop(nnf(n0)).take(# f_Nat->List<A>(n0)))(n) = nf.take(nnf(n0 + 1))(n))) ⊦ ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))), ∃ n. # σσ(n) = ∞ |
# σσ = ∞, nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0), nnf(0) = 0, # σσ(0) ≠ ∞, (nf.take(nnf(n0)) + nf.drop(nnf(n0)).take(# f_Nat->List<A>(n0)))(n) ≠ nf(n), σσ ≠ [], n < nnf(n0 + 1), mon(σσ), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n) ⊦ ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))), ∃ n. # σσ(n) = ∞
Used simplifier rules: ⊦ m < n → n ≠ 0; (s) lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic m < n ⊦ nf.take(n)(m) = nf(m); (s) ⊦ m ≤ n → (n < m ↔ false); (s) fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat ⊦ m < n ↔ ¬ n ≤ m; (ss) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ # nf.take(n) = n; (s) ⊦ #(x + y) = # x + # y; (s)
| # σσ = ∞, nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0), nnf(0) = 0, # σσ(0) ≠ ∞, (nf.take(nnf(n0)) + nf.drop(nnf(n0)).take(# f_Nat->List<A>(n0)))(n) ≠ nf(n), σσ ≠ [], n < nnf(n0 + 1), mon(σσ), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n) ⊦ ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))), ∃ n. # σσ(n) = ∞ |
⊦ n < # x → (x + y)(n) = x(n)
# σσ = ∞, nnf(0) = 0, nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0), # σσ(0) ≠ ∞, (nf.take(nnf(n0)) + nf.drop(nnf(n0)).take(# f_Nat->List<A>(n0)))(n) ≠ nf(n), σσ ≠ [], n < nnf(n0 + 1), mon(σσ), ¬ n < # nf.take(nnf(n0)), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1) ⊦ ∃ n. # σσ(n) = ∞, ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n)))
Used simplifier rules: ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ # nf.take(n) = n; (s) ⊦ m ≤ n → (n < m ↔ false); (s) m < n ⊦ nf.take(n)(m) = nf(m); (s) Used terms: n, nf.drop(nnf(n0)).take(# f_Nat->List<A>(n0)), nf.take(nnf(n0))
| ⊦ n < # x → (x + y)(n) = x(n) |
| # σσ = ∞, nnf(0) = 0, nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0), # σσ(0) ≠ ∞, (nf.take(nnf(n0)) + nf.drop(nnf(n0)).take(# f_Nat->List<A>(n0)))(n) ≠ nf(n), σσ ≠ [], n < nnf(n0 + 1), mon(σσ), ¬ n < # nf.take(nnf(n0)), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n), ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1) ⊦ ∃ n. # σσ(n) = ∞, ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))) |
# σσ = ∞, nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0), nnf(0) = 0, # σσ(0) ≠ ∞, nf.drop(nnf(n0)).take(# f_Nat->List<A>(n0))(n - nnf(n0)) ≠ nf(n), f_Nat->List<A>(n0) ≠ [], σσ ≠ [], n < nnf(n0 + 1), nnf(n0) < nnf(n0 + 1), mon(σσ), nnf(n0) ≤ n, ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n) ⊦ ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))), ∃ n. # σσ(n) = ∞
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ # x = 0 ↔ x = []; (s) ⊦ m < m + n ↔ n ≠ 0; (s) lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic fle-01: ⊦ m ≤ n ∧ n < n0 → m < n0; (forward) from specification nat ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ # nf.take(n) = n; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ¬ n < # x → (x + y)(n) = y(n - # x); (s)
| # σσ = ∞, nnf(n0 + 1) = nnf(n0) + # f_Nat->List<A>(n0), nnf(0) = 0, # σσ(0) ≠ ∞, nf.drop(nnf(n0)).take(# f_Nat->List<A>(n0))(n - nnf(n0)) ≠ nf(n), f_Nat->List<A>(n0) ≠ [], σσ ≠ [], n < nnf(n0 + 1), nnf(n0) < nnf(n0 + 1), mon(σσ), nnf(n0) ≤ n, ∀ n. ∃ m. nnf(m) ≤ n ∧ n < nnf(m + 1), ∀ m, n. m ≤ n → nnf(m) ≤ nnf(n) ⊦ ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))), ∃ n. # σσ(n) = ∞ |
Used simplifier rules: ⊦ m < n ↔ ¬ n ≤ m; (ss) ⊦ m ≤ m + n; (s) lf-01: ⊦ m < n ∧ n = n0 → m < n0; (forward) from specification nat-basic ⊦ m + n < m + n0 ↔ n < n0; (s) ⊦ m ≤ n → (n < m ↔ false); (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic m < n ⊦ nf.take(n)(m) = nf(m); (s) ⊦ nf.drop(n)(m) = nf(m + n); (s) n ≤ m ⊦ n0 = m - n ↔ m = n0 + n; (elim) Used terms: n, nnf(n0), n1
| # σσ = ∞, σσ ≠ [], mon(σσ) ⊦ ∀ n. ∃ x. σσ(n + 1) = σσ(n) + ⌜x⌝ , ∃ n. # σσ(n) = ∞, ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))) |
# σσ = ∞, σσ ≠ [], mon(σσ) ⊦ ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))), ∃ n. # σσ(n) = ∞, ∃ x. σσ(n + 1) = σσ(n) + ⌜x⌝
| # σσ = ∞, σσ ≠ [], mon(σσ) ⊦ ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))), ∃ n. # σσ(n) = ∞, ∃ x. σσ(n + 1) = σσ(n) + ⌜x⌝ |
⊦ mon(σσ) ↔ (∀ n. ⌜n⌝ + ⌜1⌝ < # σσ → σσ(n) ⊑ σσ(n + 1))
# σσ = ∞, σσ ≠ [], ∀ n. ⌜n⌝ + ⌜1⌝ < # σσ → σσ(n) ⊑ σσ(n + 1) ⊦ ∃ x. σσ(n + 1) = σσ(n) + ⌜x⌝ , ∃ n. # σσ(n) = ∞, ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n)))
Used terms: σσ
| ⊦ mon(σσ) ↔ (∀ n. ⌜n⌝ + ⌜1⌝ < # σσ → σσ(n) ⊑ σσ(n + 1)) |
| # σσ = ∞, σσ ≠ [], ∀ n. ⌜n⌝ + ⌜1⌝ < # σσ → σσ(n) ⊑ σσ(n + 1) ⊦ ∃ x. σσ(n + 1) = σσ(n) + ⌜x⌝ , ∃ n. # σσ(n) = ∞, ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))) |
# σσ = ∞, σσ ≠ [], ∀ n0. σσ(n0) ⊑ σσ(n0 + 1) ⊦ ∃ x. σσ(n + 1) = σσ(n) + ⌜x⌝ , ∃ n. # σσ(n) = ∞, ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(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⌝ ≠ ∞; (s) ⊦ ⌜m⌝ + n∞ = ∞ ↔ n∞ = ∞; (s) ⊦ n∞ < ∞ ↔ n∞ ≠ ∞; (s)
| # σσ = ∞, σσ ≠ [], ∀ n0. σσ(n0) ⊑ σσ(n0 + 1) ⊦ ∃ x. σσ(n + 1) = σσ(n) + ⌜x⌝ , ∃ n. # σσ(n) = ∞, ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))) |
# σσ = ∞, σσ ≠ [], σσ(n) ⊑ σσ(n + 1) ⊦ ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))), ∃ n. # σσ(n) = ∞, ∃ x. σσ(n + 1) = σσ(n) + ⌜x⌝
Used terms: n
| # σσ = ∞, σσ ≠ [], σσ(n) ⊑ σσ(n + 1) ⊦ ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))), ∃ n. # σσ(n) = ∞, ∃ x. σσ(n + 1) = σσ(n) + ⌜x⌝ |
# σσ = ∞, σσ ≠ [], σσ(n) ⊑ σσ(n + 1) ⊦ ∃ x. σσ(n + 1) = σσ(n) + ⌜x⌝ , ∃ n. # σσ(n) = ∞, ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n)))
| # σσ = ∞, σσ ≠ [], σσ(n) ⊑ σσ(n + 1) ⊦ ∃ x. σσ(n + 1) = σσ(n) + ⌜x⌝ , ∃ n. # σσ(n) = ∞, ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))) |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
# σσ = ∞, σσ ≠ [], ∃ σ1. σσ(n) + σ1 = σσ(n + 1) ⊦ ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))), ∃ n. # σσ(n) = ∞, ∃ x. σσ(n + 1) = σσ(n) + ⌜x⌝
Used terms: σσ(n), σσ(n + 1)
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| # σσ = ∞, σσ ≠ [], ∃ σ1. σσ(n) + σ1 = σσ(n + 1) ⊦ ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))), ∃ n. # σσ(n) = ∞, ∃ x. σσ(n + 1) = σσ(n) + ⌜x⌝ |
# σσ = ∞, σσ(n) + σ1 = σσ(n + 1), σσ ≠ [] ⊦ ∃ x. σσ(n + 1) = σσ(n) + ⌜x⌝ , ∃ n. # σσ(n) = ∞, ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n)))
| # σσ = ∞, σσ(n) + σ1 = σσ(n + 1), σσ ≠ [] ⊦ ∃ x. σσ(n + 1) = σσ(n) + ⌜x⌝ , ∃ n. # σσ(n) = ∞, ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))) |
# σσ = ∞, σσ(n) + ⌜x⌝ = σσ(n + 1), σσ ≠ [] ⊦ ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))), ∃ n. # σσ(n) = ∞, ∃ x. σσ(n + 1) = σσ(n) + ⌜x⌝
# σσ = ∞, σσ(n) + ⌜nf⌝ = σσ(n + 1), σσ ≠ [] ⊦ ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))), ∃ n. # σσ(n) = ∞, ∃ x. σσ(n + 1) = σσ(n) + ⌜x⌝
Used simplifier rules: Stream[A] freely generated by ⌝, ⌝;
| # σσ = ∞, σσ(n) + ⌜x⌝ = σσ(n + 1), σσ ≠ [] ⊦ ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))), ∃ n. # σσ(n) = ∞, ∃ x. σσ(n + 1) = σσ(n) + ⌜x⌝ |
Used terms: x
| # σσ = ∞, σσ(n) + ⌜nf⌝ = σσ(n + 1), σσ ≠ [] ⊦ ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))), ∃ n. # σσ(n) = ∞, ∃ x. σσ(n + 1) = σσ(n) + ⌜x⌝ |
# σσ = ∞, σσ(n) + ⌜nf⌝ = σσ(n + 1), # σσ(n + 1) ≠ ∞, σσ ≠ [] ⊦ ∃ x. σσ(n + 1) = σσ(n) + ⌜x⌝ , ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n)))
Used terms: n + 1
| # σσ = ∞, σσ(n) + ⌜nf⌝ = σσ(n + 1), # σσ(n + 1) ≠ ∞, σσ ≠ [] ⊦ ∃ x. σσ(n + 1) = σσ(n) + ⌜x⌝ , ∃ σ. (∀ n. σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. σ.take(m) ⊑ σσ(n))) |
Used simplifier rules: ⊦ #(σ + σ1) = # σ + # σ1; (s) ⊦ # ⌜nf⌝ = ∞; (s) ⊦ n∞ + ∞ = ∞; (s) add-assoc: ⊦ (n∞ + n∞1) + n∞2 = n∞ + n∞1 + n∞2; from specification nat-inf add-comm: ⊦ n∞1 + n∞2 = n∞2 + n∞1; from specification nat-inf append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream-old
| # σσ ≠ ∞, σσ ≠ [], mon(σσ) ⊦ ∃ σ. (∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n))) |
⊦ n∞ = ∞ ↔ ¬(∃ n. n∞ = ⌜n⌝ )
σσ ≠ [], mon(σσ), ∃ n. # σσ = ⌜n⌝ ⊦ ∃ σ. (∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)))
Used terms: # σσ
| ⊦ n∞ = ∞ ↔ ¬(∃ n. n∞ = ⌜n⌝ ) |
| σσ ≠ [], mon(σσ), ∃ n. # σσ = ⌜n⌝ ⊦ ∃ σ. (∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n))) |
# σσ = ⌜n⌝ , σσ ≠ [], mon(σσ) ⊦ ∃ σ. (∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)))
| # σσ = ⌜n⌝ , σσ ≠ [], mon(σσ) ⊦ ∃ σ. (∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n))) |
# σσ = ⌜n⌝ , n = n0.+1, σσ ≠ [], mon(σσ) ⊦ ∃ σ. (∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n)))
Used simplifier rules: Nat freely generated by 0, +1; ⊦ # σ = ⌜0⌝ ↔ σ = []; (s)
| # σσ = ⌜n⌝ , n = n0.+1, σσ ≠ [], mon(σσ) ⊦ ∃ σ. (∀ n. ⌜n⌝ < # σσ → σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ⌜n⌝ < # σσ ∧ σ.take(m) ⊑ σσ(n))) |
# σσ = ⌜n0⌝ + ⌜1⌝ , σσ ≠ [], mon(σσ) ⊦ ∃ σ. (∀ n. ¬ n0 < n → σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ¬ n0 < n ∧ σ.take(m) ⊑ σσ(n)))
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m < n + 1 ↔ ¬ n < m; (s) ⊦ n∞ = ⌜m⌝ + ⌜n0⌝ → (⌜n⌝ < n∞ ↔ n < m + n0); (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 ⊦ ⌜m + n⌝ = ⌜m⌝ + ⌜n⌝ ; (s) ⊦ m.+1 = m + 1; (s)
| # σσ = ⌜n0⌝ + ⌜1⌝ , σσ ≠ [], mon(σσ) ⊦ ∃ σ. (∀ n. ¬ n0 < n → σσ(n) ⊑ σ) ∧ (∀ m. ¬ # σ < ⌜m⌝ → (∃ n. ¬ n0 < n ∧ σ.take(m) ⊑ σσ(n))) |
# σσ = ⌜n0⌝ + ⌜1⌝ , σσ ≠ [], mon(σσ) ⊦ (∀ n. ¬ n0 < n → σσ(n) ⊑ σσ(n0)) ∧ (∀ m. ¬ # σσ(n0) < ⌜m⌝ → (∃ n. ¬ n0 < n ∧ σσ(n0).take(m) ⊑ σσ(n)))
Used terms: σσ(n0)
| # σσ = ⌜n0⌝ + ⌜1⌝ , σσ ≠ [], mon(σσ) ⊦ (∀ n. ¬ n0 < n → σσ(n) ⊑ σσ(n0)) ∧ (∀ m. ¬ # σσ(n0) < ⌜m⌝ → (∃ n. ¬ n0 < n ∧ σσ(n0).take(m) ⊑ σσ(n))) |
# σσ = ⌜n0⌝ + ⌜1⌝ , σσ ≠ [], mon(σσ) ⊦ (¬ n0 < n → σσ(n) ⊑ σσ(n0)) ∧ (¬ # σσ(n0) < ⌜m⌝ → (∃ n. ¬ n0 < n ∧ σσ(n0).take(m) ⊑ σσ(n)))
| # σσ = ⌜n0⌝ + ⌜1⌝ , σσ ≠ [], mon(σσ) ⊦ (¬ n0 < n → σσ(n) ⊑ σσ(n0)) ∧ (¬ # σσ(n0) < ⌜m⌝ → (∃ n. ¬ n0 < n ∧ σσ(n0).take(m) ⊑ σσ(n))) |
# σσ = ⌜n0⌝ + ⌜1⌝ , σσ ≠ [], mon(σσ), ¬ n0 < n, ¬ σσ(n) ⊑ σσ(n0) ⊦
# σσ = ⌜n0⌝ + ⌜1⌝ , σσ ≠ [], mon(σσ), ¬ # σσ(n0) < ⌜m⌝ ⊦ ∃ n. ¬ n0 < n ∧ σσ(n0).take(m) ⊑ σσ(n)
| # σσ = ⌜n0⌝ + ⌜1⌝ , σσ ≠ [], mon(σσ), ¬ n0 < n, ¬ σσ(n) ⊑ σσ(n0) ⊦ |
# σσ = ⌜n0⌝ + ⌜1⌝ , σσ ≠ [], mon(σσ), n ≤ n0, ¬ σσ(n) ⊑ σσ(n0) ⊦
Used simplifier rules: ⊦ m < n ↔ ¬ n ≤ m; (ss)
| # σσ = ⌜n0⌝ + ⌜1⌝ , σσ ≠ [], mon(σσ), n ≤ n0, ¬ σσ(n) ⊑ σσ(n0) ⊦ |
mon(σσ), m ≤ n, ⌜n⌝ < # σσ ⊦ σσ(m) ⊑ σσ(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∞ = ⌜m⌝ + ⌜n0⌝ → (⌜n⌝ < n∞ ↔ n < m + n0); (s) ⊦ m < n + 1 ↔ ¬ n < m; (s) ⊦ ¬ n < n; (s) a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic c: ⊦ m + n = n + m; from specification nat-basic Used terms: σσ, n, n0
| mon(σσ), m ≤ n, ⌜n⌝ < # σσ ⊦ σσ(m) ⊑ σσ(n) |
| # σσ = ⌜n0⌝ + ⌜1⌝ , σσ ≠ [], mon(σσ), ¬ # σσ(n0) < ⌜m⌝ ⊦ ∃ n. ¬ n0 < n ∧ σσ(n0).take(m) ⊑ σσ(n) |
# σσ = ⌜n0⌝ + ⌜1⌝ , σσ ≠ [], mon(σσ), ¬ # σσ(n0) < ⌜m⌝ ⊦ ∃ n. ¬ n0 < n ∧ σσ(n0).take(m) ⊑ σσ(n)
| # σσ = ⌜n0⌝ + ⌜1⌝ , σσ ≠ [], mon(σσ), ¬ # σσ(n0) < ⌜m⌝ ⊦ ∃ n. ¬ n0 < n ∧ σσ(n0).take(m) ⊑ σσ(n) |
# σσ = ⌜n0⌝ + ⌜1⌝ , σσ ≠ [], mon(σσ), ¬ # σσ(n0) < ⌜m⌝ ⊦ ¬ n0 < n0 ∧ σσ(n0).take(m) ⊑ σσ(n0)
Used terms: n0
| # σσ = ⌜n0⌝ + ⌜1⌝ , σσ ≠ [], mon(σσ), ¬ # σσ(n0) < ⌜m⌝ ⊦ ¬ n0 < n0 ∧ σσ(n0).take(m) ⊑ σσ(n0) |
# σσ = ⌜n0⌝ + ⌜1⌝ , σσ ≠ [], mon(σσ), ¬ # σσ(n0) < ⌜m⌝ , ¬ σσ(n0).take(m) ⊑ σσ(n0) ⊦
Used simplifier rules: ⊦ ¬ n < n; (s)
| # σσ = ⌜n0⌝ + ⌜1⌝ , σσ ≠ [], mon(σσ), ¬ # σσ(n0) < ⌜m⌝ , ¬ σσ(n0).take(m) ⊑ σσ(n0) ⊦ |
⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0)
# σσ = ⌜n0⌝ + ⌜1⌝ , σσ ≠ [], mon(σσ), ¬ # σσ(n0) < ⌜m⌝ , ∀ σ1. σσ(n0).take(m) + σ1 ≠ σσ(n0) ⊦
Used terms: σσ(n0).take(m), σσ(n0)
| ⊦ σ ⊑ σ0 ↔ (∃ σ1. σ + σ1 = σ0) |
| # σσ = ⌜n0⌝ + ⌜1⌝ , σσ ≠ [], mon(σσ), ¬ # σσ(n0) < ⌜m⌝ , ∀ σ1. σσ(n0).take(m) + σ1 ≠ σσ(n0) ⊦ |
Used simplifier rules: ¬ # σ < ⌜n⌝ ⊦ σ.take(n) + σ.drop(n) = σ ↔ true; (ss) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream-old Used terms: σσ(n0).drop(m)
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.