| ⊦ mon<(nσ) → (mon<(rem(nσ, np)) ↔ true) |
¬(mon<(rem(nσ, np)) ↔ true), mon<(nσ) ⊦
| ¬(mon<(rem(nσ, np)) ↔ true), mon<(nσ) ⊦ |
mon<(nσ), ¬ mon<(rem(nσ, np)) ⊦
| mon<(nσ), ¬ mon<(rem(nσ, np)) ⊦ |
nσ = ⌜nl⌝ , mon<(nσ), ¬ mon<(rem(nσ, np)) ⊦
nσ = ⌜nnf⌝ , mon<(nσ), ¬ mon<(rem(nσ, np)) ⊦
Used simplifier rules: Stream('a) freely generated by ⌜ ⌝, ⌜ ⌝;;
| nσ = ⌜nl⌝ , mon<(nσ), ¬ mon<(rem(nσ, np)) ⊦ |
mon<(⌜nl⌝ ), ¬ mon<(rem(⌜nl⌝ , np)) ⊦
| mon<(⌜nl⌝ ), ¬ mon<(rem(⌜nl⌝ , np)) ⊦ |
mon<(⌜nl⌝ ), ¬ mon<(rem(⌜nl⌝ , np)), ∀ nl0, np. # nl0 < # nl → mon<(⌜nl0⌝ ) ∧ ¬ mon<(rem(⌜nl0⌝ , np)) → false ⊦
Used simplifier rules: <; (wellfounded) Used terms: # nl
| mon<(⌜nl⌝ ), ¬ mon<(rem(⌜nl⌝ , np)), ∀ nl0, np. # nl0 < # nl → mon<(⌜nl0⌝ ) ∧ ¬ mon<(rem(⌜nl0⌝ , np)) → false ⊦ |
nl ≠ [], mon<(⌜nl⌝ ), ¬ mon<(rem(⌜nl⌝ , np)), ∀ nl0, np. # nl0 < # nl → mon<(⌜nl0⌝ ) ∧ ¬ mon<(rem(⌜nl0⌝ , np)) → false ⊦
Used simplifier rules: ⊦ ⌜[]⌝ = []; (s) ⊦ rem([], np) = []; (s) Used formulas: nl = []
| nl ≠ [], mon<(⌜nl⌝ ), ¬ mon<(rem(⌜nl⌝ , np)), ∀ nl0, np. # nl0 < # nl → mon<(⌜nl0⌝ ) ∧ ¬ mon<(rem(⌜nl0⌝ , np)) → false ⊦ |
⊦ x = [] ↔ ¬(∃ y, a. x = y + a ')
mon<(⌜nl⌝ ), ¬ mon<(rem(⌜nl⌝ , np)), ∃ y, a. nl = y + a ', ∀ nl0, np. # nl0 < # nl → mon<(⌜nl0⌝ ) ∧ ¬ mon<(rem(⌜nl0⌝ , np)) → false ⊦
Used terms: nl
| ⊦ x = [] ↔ ¬(∃ y, a. x = y + a ') |
| mon<(⌜nl⌝ ), ¬ mon<(rem(⌜nl⌝ , np)), ∃ y, a. nl = y + a ', ∀ nl0, np. # nl0 < # nl → mon<(⌜nl0⌝ ) ∧ ¬ mon<(rem(⌜nl0⌝ , np)) → false ⊦ |
mon<(⌜nl0⌝ + ⌜n '⌝ ), ¬ mon<(rem(⌜nl0⌝ , np) + (np(# nl0) ⊃ [];⌜n '⌝ )), ∀ nl1, np. # nl1 < #(nl0 + n ') → mon<(⌜nl1⌝ ) ∧ ¬ mon<(rem(⌜nl1⌝ , np)) → false ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream-old ⊦ rem(⌜x⌝ + ⌜a '⌝ , np) = rem(⌜x⌝ , np) + (np(# x) ⊃ [];⌜a '⌝ ); (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ ⌜x + y⌝ = ⌜x⌝ + ⌜y⌝ ; (s)
| mon<(⌜nl0⌝ + ⌜n '⌝ ), ¬ mon<(rem(⌜nl0⌝ , np) + (np(# nl0) ⊃ [];⌜n '⌝ )), ∀ nl1, np. # nl1 < #(nl0 + n ') → mon<(⌜nl1⌝ ) ∧ ¬ mon<(rem(⌜nl1⌝ , np)) → false ⊦ |
mon<(⌜nl0⌝ + ⌜n '⌝ ), np(# nl0), ¬ mon<(rem(⌜nl0⌝ , np) + []), ∀ nl1, np. # nl1 < #(nl0 + n ') → mon<(⌜nl1⌝ ) ∧ ¬ mon<(rem(⌜nl1⌝ , np)) → false ⊦
mon<(⌜nl0⌝ + ⌜n '⌝ ), ¬ mon<(rem(⌜nl0⌝ , np) + ⌜n '⌝ ), ¬ np(# nl0), ∀ nl1, np. # nl1 < #(nl0 + n ') → mon<(⌜nl1⌝ ) ∧ ¬ mon<(rem(⌜nl1⌝ , np)) → false ⊦
| mon<(⌜nl0⌝ + ⌜n '⌝ ), np(# nl0), ¬ mon<(rem(⌜nl0⌝ , np) + []), ∀ nl1, np. # nl1 < #(nl0 + n ') → mon<(⌜nl1⌝ ) ∧ ¬ mon<(rem(⌜nl1⌝ , np)) → false ⊦ |
mon<(⌜nl0⌝ + ⌜n '⌝ ), np(# nl0), ¬ mon<(rem(⌜nl0⌝ , np)), ∀ nl1, np. # nl1 < #(nl0 + n ') → mon<(⌜nl1⌝ ) ∧ ¬ mon<(rem(⌜nl1⌝ , np)) → false ⊦
Used simplifier rules: append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream-old ⊦ σ + [] = σ; (s)
| mon<(⌜nl0⌝ + ⌜n '⌝ ), np(# nl0), ¬ mon<(rem(⌜nl0⌝ , np)), ∀ nl1, np. # nl1 < #(nl0 + n ') → mon<(⌜nl1⌝ ) ∧ ¬ mon<(rem(⌜nl1⌝ , np)) → false ⊦ |
Used simplifier rules: monls-append1: ⊦ mon<(⌜nl⌝ + ⌜nl0⌝ ) → (mon<(⌜nl⌝ ) ↔ true); append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream-old ⊦ #(x + y) = # x + # y; (s) ⊦ # a ' = 0 +1; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ 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: nl0, np
| mon<(⌜nl0⌝ + ⌜n '⌝ ), ¬ mon<(rem(⌜nl0⌝ , np) + ⌜n '⌝ ), ¬ np(# nl0), ∀ nl1, np. # nl1 < #(nl0 + n ') → mon<(⌜nl1⌝ ) ∧ ¬ mon<(rem(⌜nl1⌝ , np)) → false ⊦ |
mon<(⌜nl0⌝ + ⌜n '⌝ ), ¬ mon<(rem(⌜nl0⌝ , np) + ⌜n '⌝ ), ¬ np(# nl0), ∀ nl1, np. # nl1 < #(nl0 + n ') → mon<(⌜nl1⌝ ) ∧ ¬ mon<(rem(⌜nl1⌝ , np)) → false ⊦
| mon<(⌜nl0⌝ + ⌜n '⌝ ), ¬ mon<(rem(⌜nl0⌝ , np) + ⌜n '⌝ ), ¬ np(# nl0), ∀ nl1, np. # nl1 < #(nl0 + n ') → mon<(⌜nl1⌝ ) ∧ ¬ mon<(rem(⌜nl1⌝ , np)) → false ⊦ |
mon<(⌜nl0⌝ + ⌜n '⌝ ), ¬ mon<(rem(⌜nl0⌝ , np) + ⌜n '⌝ ), ¬ np(# nl0), ∀ nl1, np. # nl1 < #(nl0 + n ') → mon<(⌜nl1⌝ ) ∧ ¬ mon<(rem(⌜nl1⌝ , np)) → false ⊦ mon<(⌜nl0⌝ ) ∧ ¬ mon<(rem(⌜nl0⌝ , np))
Used simplifier rules: ⊦ #(x + y) = # x + # y; (s) ⊦ # a ' = 0 +1; (s) a: ⊦ (x + y) + z = x + y + z; from specification list ⊦ 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: nl0, np
| mon<(⌜nl0⌝ + ⌜n '⌝ ), ¬ mon<(rem(⌜nl0⌝ , np) + ⌜n '⌝ ), ¬ np(# nl0), ∀ nl1, np. # nl1 < #(nl0 + n ') → mon<(⌜nl1⌝ ) ∧ ¬ mon<(rem(⌜nl1⌝ , np)) → false ⊦ mon<(⌜nl0⌝ ) ∧ ¬ mon<(rem(⌜nl0⌝ , np)) |
⊦ mon<(nσ) ↔ (∀ n. ⌜n⌝ + ⌜1⌝ < # nσ → nσ[n] < nσ[n + 1])
mon<(⌜nl0⌝ + ⌜n '⌝ ), ¬ np(# nl0), ∃ n0. ¬(⌜n0⌝ + ⌜1⌝ < #(rem(⌜nl0⌝ , np) + ⌜n '⌝ ) → (rem(⌜nl0⌝ , np) + ⌜n '⌝ )[n0] < (rem(⌜nl0⌝ , np) + ⌜n '⌝ )[n0 + 1]), ∀ nl1, np. # nl1 < #(nl0 + n ') → mon<(⌜nl1⌝ ) ∧ ¬ mon<(rem(⌜nl1⌝ , np)) → false ⊦ mon<(⌜nl0⌝ ) ∧ ¬ mon<(rem(⌜nl0⌝ , np))
Used terms: rem(⌜nl0⌝ , np) + ⌜n '⌝
| ⊦ mon<(nσ) ↔ (∀ n. ⌜n⌝ + ⌜1⌝ < # nσ → nσ[n] < nσ[n + 1]) |
| mon<(⌜nl0⌝ + ⌜n '⌝ ), ¬ np(# nl0), ∃ n0. ¬(⌜n0⌝ + ⌜1⌝ < #(rem(⌜nl0⌝ , np) + ⌜n '⌝ ) → (rem(⌜nl0⌝ , np) + ⌜n '⌝ )[n0] < (rem(⌜nl0⌝ , np) + ⌜n '⌝ )[n0 + 1]), ∀ nl1, np. # nl1 < #(nl0 + n ') → mon<(⌜nl1⌝ ) ∧ ¬ mon<(rem(⌜nl1⌝ , np)) → false ⊦ mon<(⌜nl0⌝ ) ∧ ¬ mon<(rem(⌜nl0⌝ , np)) |
⌜n0⌝ < # rem(⌜nl0⌝ , np), mon<(⌜nl0⌝ + ⌜n '⌝ ), (rem(⌜nl0⌝ , np) + ⌜n '⌝ )[n0 + 1] ≤ rem(⌜nl0⌝ , np)[n0], ¬ np(# nl0), ∀ nl1, np. # nl1 < #(nl0 + n ') → mon<(⌜nl1⌝ ) ∧ ¬ mon<(rem(⌜nl1⌝ , np)) → false ⊦ mon<(⌜nl0⌝ ) ∧ ¬ mon<(rem(⌜nl0⌝ , np))
Used simplifier rules: ⊦ m < n ↔ ¬ n ≤ m; (ss) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream-old ⊦ ⌜m⌝ < # σ → (σ + σ1)[m] = σ[m]; (s) add-comm: ⊦ n∞1 + n∞2 = n∞2 + n∞1; from specification nat-inf add-assoc: ⊦ (n∞ + n∞1) + n∞2 = n∞ + n∞1 + n∞2; from specification nat-inf ⊦ ⌜n⌝ + n∞1 < ⌜n⌝ + n∞2 ↔ n∞1 < n∞2; (s) ⊦ # a ' = 0 +1; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ #(σ + σ1) = # σ + # σ1; (s)
| ⌜n0⌝ < # rem(⌜nl0⌝ , np), mon<(⌜nl0⌝ + ⌜n '⌝ ), (rem(⌜nl0⌝ , np) + ⌜n '⌝ )[n0 + 1] ≤ rem(⌜nl0⌝ , np)[n0], ¬ np(# nl0), ∀ nl1, np. # nl1 < #(nl0 + n ') → mon<(⌜nl1⌝ ) ∧ ¬ mon<(rem(⌜nl1⌝ , np)) → false ⊦ mon<(⌜nl0⌝ ) ∧ ¬ mon<(rem(⌜nl0⌝ , np)) |
⊦ mon<(nσ) ↔ (∀ n. ⌜n⌝ + ⌜1⌝ < # nσ → nσ[n] < nσ[n + 1])
⌜n0⌝ < # rem(⌜nl0⌝ , np), mon<(⌜nl0⌝ + ⌜n '⌝ ), (rem(⌜nl0⌝ , np) + ⌜n '⌝ )[n0 + 1] ≤ rem(⌜nl0⌝ , np)[n0], ¬ np(# nl0), ∀ nl1, np. # nl1 < #(nl0 + n ') → mon<(⌜nl1⌝ ) ∧ ¬ mon<(rem(⌜nl1⌝ , np)) → false ⊦ mon<(⌜nl0⌝ ) ∧ ¬(∀ n. ⌜n⌝ + ⌜1⌝ < # rem(⌜nl0⌝ , np) → rem(⌜nl0⌝ , np)[n] < rem(⌜nl0⌝ , np)[n + 1])
Used terms: rem(⌜nl0⌝ , np)
| ⊦ mon<(nσ) ↔ (∀ n. ⌜n⌝ + ⌜1⌝ < # nσ → nσ[n] < nσ[n + 1]) |
| ⌜n0⌝ < # rem(⌜nl0⌝ , np), mon<(⌜nl0⌝ + ⌜n '⌝ ), (rem(⌜nl0⌝ , np) + ⌜n '⌝ )[n0 + 1] ≤ rem(⌜nl0⌝ , np)[n0], ¬ np(# nl0), ∀ nl1, np. # nl1 < #(nl0 + n ') → mon<(⌜nl1⌝ ) ∧ ¬ mon<(rem(⌜nl1⌝ , np)) → false ⊦ mon<(⌜nl0⌝ ) ∧ ¬(∀ n. ⌜n⌝ + ⌜1⌝ < # rem(⌜nl0⌝ , np) → rem(⌜nl0⌝ , np)[n] < rem(⌜nl0⌝ , np)[n + 1]) |
⊦ ⌜m⌝ < # σ → (σ + σ1)[m] = σ[m]
⌜n0⌝ < # rem(⌜nl0⌝ , np), mon<(⌜nl0⌝ + ⌜n '⌝ ), (rem(⌜nl0⌝ , np) + ⌜n '⌝ )[n0 + 1] ≤ rem(⌜nl0⌝ , np)[n0], ¬ ⌜n0 + 1⌝ < # rem(⌜nl0⌝ , np), ¬ np(# nl0), ∀ nl1, np. # nl1 < #(nl0 + n ') → mon<(⌜nl1⌝ ) ∧ ¬ mon<(rem(⌜nl1⌝ , np)) → false ⊦ mon<(⌜nl0⌝ ) ∧ ¬(∀ n. ⌜n⌝ + ⌜1⌝ < # rem(⌜nl0⌝ , np) → rem(⌜nl0⌝ , np)[n] < rem(⌜nl0⌝ , np)[n + 1])
⌜n0⌝ < # rem(⌜nl0⌝ , np), ⌜n0 + 1⌝ < # rem(⌜nl0⌝ , np), mon<(⌜nl0⌝ + ⌜n '⌝ ), rem(⌜nl0⌝ , np)[n0 + 1] ≤ rem(⌜nl0⌝ , np)[n0], ¬ np(# nl0), ∀ nl1, np. # nl1 < #(nl0 + n ') → mon<(⌜nl1⌝ ) ∧ ¬ mon<(rem(⌜nl1⌝ , np)) → false ⊦ mon<(⌜nl0⌝ ) ∧ ¬(∀ n. ⌜n⌝ + ⌜1⌝ < # rem(⌜nl0⌝ , np) → rem(⌜nl0⌝ , np)[n] < rem(⌜nl0⌝ , np)[n + 1])
Used terms: n0 + 1, rem(⌜nl0⌝ , np), ⌜n '⌝
| ⊦ ⌜m⌝ < # σ → (σ + σ1)[m] = σ[m] |
| ⌜n0⌝ < # rem(⌜nl0⌝ , np), mon<(⌜nl0⌝ + ⌜n '⌝ ), (rem(⌜nl0⌝ , np) + ⌜n '⌝ )[n0 + 1] ≤ rem(⌜nl0⌝ , np)[n0], ¬ ⌜n0 + 1⌝ < # rem(⌜nl0⌝ , np), ¬ np(# nl0), ∀ nl1, np. # nl1 < #(nl0 + n ') → mon<(⌜nl1⌝ ) ∧ ¬ mon<(rem(⌜nl1⌝ , np)) → false ⊦ mon<(⌜nl0⌝ ) ∧ ¬(∀ n. ⌜n⌝ + ⌜1⌝ < # rem(⌜nl0⌝ , np) → rem(⌜nl0⌝ , np)[n] < rem(⌜nl0⌝ , np)[n + 1]) |
⌜n0⌝ + ⌜1⌝ = # rem(⌜nl0⌝ , np), ⌜n0⌝ < ⌜n0⌝ + ⌜1⌝ , mon<(⌜nl0⌝ + ⌜n '⌝ ), n ≤ rem(⌜nl0⌝ , np)[n0], ¬ np(# nl0), ∀ nl1, np. # nl1 < #(nl0 + n ') → mon<(⌜nl1⌝ ) ∧ ¬ mon<(rem(⌜nl1⌝ , np)) → false ⊦ mon<(⌜nl0⌝ ) ∧ ¬(∀ n1. n1 < n0 → rem(⌜nl0⌝ , np)[n1] < rem(⌜nl0⌝ , np)[n1 + 1])
Used simplifier rules: ⊦ a '[0] = a; (s) c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ m - m = 0; (s) ⊦ m + n - n + n1 = m - n1; (s) add-comm: ⊦ n∞1 + n∞2 = n∞2 + n∞1; from specification nat-inf add-assoc: ⊦ (n∞ + n∞1) + n∞2 = n∞ + n∞1 + n∞2; from specification nat-inf ⊦ ⌜n⌝ .n = n; (s) n∞ ≠ ∞ ⊦ (⌜m⌝ + n∞).n = m + n∞.n; (s) ⊦ ⌜n⌝ ≠ ∞; (s) ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ n∞0 + ⌜1⌝ = n∞ → (⌜n⌝ + ⌜1⌝ < n∞ ↔ ⌜n⌝ < n∞0); (s) ⊦ n∞ < n∞0 → (n∞ + ⌜1⌝ < n∞0 ↔ ¬(n∞ + ⌜1⌝ = n∞0 ∧ n∞ ≠ ∞)); (ss) ⊦ ⌜m + n⌝ = ⌜m⌝ + ⌜n⌝ ; (s) append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream-old ⊦ ⌜x⌝ [n] = x[n]; (s) ⊦ ¬ ⌜m⌝ < # σ → (σ + σ1)[m] = σ1[m - (# σ).n]; (s)
| ⌜n0⌝ + ⌜1⌝ = # rem(⌜nl0⌝ , np), ⌜n0⌝ < ⌜n0⌝ + ⌜1⌝ , mon<(⌜nl0⌝ + ⌜n '⌝ ), n ≤ rem(⌜nl0⌝ , np)[n0], ¬ np(# nl0), ∀ nl1, np. # nl1 < #(nl0 + n ') → mon<(⌜nl1⌝ ) ∧ ¬ mon<(rem(⌜nl1⌝ , np)) → false ⊦ mon<(⌜nl0⌝ ) ∧ ¬(∀ n1. n1 < n0 → rem(⌜nl0⌝ , np)[n1] < rem(⌜nl0⌝ , np)[n1 + 1]) |
⊦ ⌜m⌝ < # rem(⌜x⌝ , np) → (∃ m0. m0 < # x ∧ x[m0] = rem(⌜x⌝ , np)[m] ∧ ¬ np(m0))
⌜n0⌝ + ⌜1⌝ = # rem(⌜nl0⌝ , np), ⌜n0⌝ < ⌜n0⌝ + ⌜1⌝ , mon<(⌜nl0⌝ + ⌜n '⌝ ), n ≤ rem(⌜nl0⌝ , np)[n0], ¬ np(# nl0), ⌜n0⌝ < # rem(⌜nl0⌝ , np) → (∃ m0. m0 < # nl0 ∧ nl0[m0] = rem(⌜nl0⌝ , np)[n0] ∧ ¬ np(m0)), ∀ nl1, np. # nl1 < #(nl0 + n ') → mon<(⌜nl1⌝ ) ∧ ¬ mon<(rem(⌜nl1⌝ , np)) → false ⊦ mon<(⌜nl0⌝ ) ∧ ¬(∀ n1. n1 < n0 → rem(⌜nl0⌝ , np)[n1] < rem(⌜nl0⌝ , np)[n1 + 1])
Used terms: nl0, np, n0
| ⊦ ⌜m⌝ < # rem(⌜x⌝ , np) → (∃ m0. m0 < # x ∧ x[m0] = rem(⌜x⌝ , np)[m] ∧ ¬ np(m0)) |
| ⌜n0⌝ + ⌜1⌝ = # rem(⌜nl0⌝ , np), ⌜n0⌝ < ⌜n0⌝ + ⌜1⌝ , mon<(⌜nl0⌝ + ⌜n '⌝ ), n ≤ rem(⌜nl0⌝ , np)[n0], ¬ np(# nl0), ⌜n0⌝ < # rem(⌜nl0⌝ , np) → (∃ m0. m0 < # nl0 ∧ nl0[m0] = rem(⌜nl0⌝ , np)[n0] ∧ ¬ np(m0)), ∀ nl1, np. # nl1 < #(nl0 + n ') → mon<(⌜nl1⌝ ) ∧ ¬ mon<(rem(⌜nl1⌝ , np)) → false ⊦ mon<(⌜nl0⌝ ) ∧ ¬(∀ n1. n1 < n0 → rem(⌜nl0⌝ , np)[n1] < rem(⌜nl0⌝ , np)[n1 + 1]) |
⌜n0⌝ + ⌜1⌝ = # rem(⌜nl0⌝ , np), nl0[m0] = rem(⌜nl0⌝ , np)[n0], nl0 ≠ [], m0 < # nl0, ⌜n0⌝ < ⌜n0⌝ + ⌜1⌝ , mon<(⌜nl0⌝ + ⌜n '⌝ ), n ≤ nl0[m0], ¬ np(m0), ¬ np(# nl0), ∀ nl1, np. # nl1 < #(nl0 + n ') → mon<(⌜nl1⌝ ) ∧ ¬ mon<(rem(⌜nl1⌝ , np)) → false ⊦ mon<(⌜nl0⌝ ) ∧ ¬(∀ n1. n1 < n0 → rem(⌜nl0⌝ , np)[n1] < rem(⌜nl0⌝ , np)[n1 + 1])
Used simplifier rules: ⊦ # x = 0 ↔ x = []; (s) f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic
| ⌜n0⌝ + ⌜1⌝ = # rem(⌜nl0⌝ , np), nl0[m0] = rem(⌜nl0⌝ , np)[n0], nl0 ≠ [], m0 < # nl0, ⌜n0⌝ < ⌜n0⌝ + ⌜1⌝ , mon<(⌜nl0⌝ + ⌜n '⌝ ), n ≤ nl0[m0], ¬ np(m0), ¬ np(# nl0), ∀ nl1, np. # nl1 < #(nl0 + n ') → mon<(⌜nl1⌝ ) ∧ ¬ mon<(rem(⌜nl1⌝ , np)) → false ⊦ mon<(⌜nl0⌝ ) ∧ ¬(∀ n1. n1 < n0 → rem(⌜nl0⌝ , np)[n1] < rem(⌜nl0⌝ , np)[n1 + 1]) |
⊦ mon<(nσ) ∧ m < n ∧ ⌜n⌝ < # nσ → nσ[m] < nσ[n]
Used simplifier rules: ⊦ #(σ + σ1) = # σ + # σ1; (s) ⊦ # ⌜x⌝ = ⌜# x⌝ ; (s) ⊦ # a ' = 0 +1; (s) ⊦ ⌜n⌝ < ⌜1⌝ + n∞ ↔ ¬ n∞ < ⌜n⌝ ; (s) ⊦ ⌜m⌝ < ⌜n⌝ ↔ m < n; (s) ⊦ ¬ n < n; (s) add-assoc: ⊦ (n∞ + n∞1) + n∞2 = n∞ + n∞1 + n∞2; from specification nat-inf add-comm: ⊦ n∞1 + n∞2 = n∞2 + n∞1; from specification nat-inf ⊦ n < # x → (x + y)[n] = x[n]; (s) ⊦ (⌜x⌝ + ⌜x0⌝ )[m] = (x + x0)[m]; (s) ⊦ (x + a ')[# x] = a; (s) a: ⊦ (x + y) + z = x + y + z; from specification list append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream-old ⊦ m ≤ n → (n < m ↔ false); (s) Used terms: ⌜nl0⌝ + ⌜n '⌝ , m0, # nl0
| ⊦ mon<(nσ) ∧ m < n ∧ ⌜n⌝ < # nσ → nσ[m] < nσ[n] |
| ⌜n0⌝ < # rem(⌜nl0⌝ , np), ⌜n0 + 1⌝ < # rem(⌜nl0⌝ , np), mon<(⌜nl0⌝ + ⌜n '⌝ ), rem(⌜nl0⌝ , np)[n0 + 1] ≤ rem(⌜nl0⌝ , np)[n0], ¬ np(# nl0), ∀ nl1, np. # nl1 < #(nl0 + n ') → mon<(⌜nl1⌝ ) ∧ ¬ mon<(rem(⌜nl1⌝ , np)) → false ⊦ mon<(⌜nl0⌝ ) ∧ ¬(∀ n. ⌜n⌝ + ⌜1⌝ < # rem(⌜nl0⌝ , np) → rem(⌜nl0⌝ , np)[n] < rem(⌜nl0⌝ , np)[n + 1]) |
⌜n0⌝ < # rem(⌜nl0⌝ , np), ⌜n0⌝ + ⌜1⌝ < # rem(⌜nl0⌝ , np), mon<(⌜nl0⌝ + ⌜n '⌝ ), rem(⌜nl0⌝ , np)[n0 + 1] ≤ rem(⌜nl0⌝ , np)[n0], ¬ np(# nl0), ∀ nl1, np. # nl1 < #(nl0 + n ') → mon<(⌜nl1⌝ ) ∧ ¬ mon<(rem(⌜nl1⌝ , np)) → false ⊦ mon<(⌜nl0⌝ ) ∧ ¬(∀ n. ⌜n⌝ + ⌜1⌝ < # rem(⌜nl0⌝ , np) → rem(⌜nl0⌝ , np)[n] < rem(⌜nl0⌝ , np)[n + 1])
Used simplifier rules: c: ⊦ m + n = n + m; from specification nat-basic a: ⊦ (m + n0) + n1 = m + n0 + n1; from specification nat-basic ⊦ ⌜m + n⌝ = ⌜m⌝ + ⌜n⌝ ; (s)
| ⌜n0⌝ < # rem(⌜nl0⌝ , np), ⌜n0⌝ + ⌜1⌝ < # rem(⌜nl0⌝ , np), mon<(⌜nl0⌝ + ⌜n '⌝ ), rem(⌜nl0⌝ , np)[n0 + 1] ≤ rem(⌜nl0⌝ , np)[n0], ¬ np(# nl0), ∀ nl1, np. # nl1 < #(nl0 + n ') → mon<(⌜nl1⌝ ) ∧ ¬ mon<(rem(⌜nl1⌝ , np)) → false ⊦ mon<(⌜nl0⌝ ) ∧ ¬(∀ n. ⌜n⌝ + ⌜1⌝ < # rem(⌜nl0⌝ , np) → rem(⌜nl0⌝ , np)[n] < rem(⌜nl0⌝ , np)[n + 1]) |
⌜n0⌝ + ⌜1⌝ < # rem(⌜nl0⌝ , np), ⌜n0⌝ < # rem(⌜nl0⌝ , np), mon<(⌜nl0⌝ + ⌜n '⌝ ), rem(⌜nl0⌝ , np)[n0 + 1] ≤ rem(⌜nl0⌝ , np)[n0], ¬ np(# nl0), ∀ n. ⌜n⌝ + ⌜1⌝ < # rem(⌜nl0⌝ , np) → rem(⌜nl0⌝ , np)[n] < rem(⌜nl0⌝ , np)[n + 1], ∀ nl1, np. # nl1 < #(nl0 + n ') → mon<(⌜nl1⌝ ) ∧ ¬ mon<(rem(⌜nl1⌝ , np)) → false ⊦
Used simplifier rules: monls-append1: ⊦ mon<(⌜nl⌝ + ⌜nl0⌝ ) → (mon<(⌜nl⌝ ) ↔ true); append-assoc: ⊦ (σ + σ1) + σ2 = σ + σ1 + σ2; from specification stream-old
| ⌜n0⌝ + ⌜1⌝ < # rem(⌜nl0⌝ , np), ⌜n0⌝ < # rem(⌜nl0⌝ , np), mon<(⌜nl0⌝ + ⌜n '⌝ ), rem(⌜nl0⌝ , np)[n0 + 1] ≤ rem(⌜nl0⌝ , np)[n0], ¬ np(# nl0), ∀ n. ⌜n⌝ + ⌜1⌝ < # rem(⌜nl0⌝ , np) → rem(⌜nl0⌝ , np)[n] < rem(⌜nl0⌝ , np)[n + 1], ∀ nl1, np. # nl1 < #(nl0 + n ') → mon<(⌜nl1⌝ ) ∧ ¬ mon<(rem(⌜nl1⌝ , np)) → false ⊦ |
Used simplifier rules: ⊦ m ≤ n → (n < m ↔ false); (s) Used terms: n0
| nσ = ⌜nnf⌝ , mon<(nσ), ¬ mon<(rem(nσ, np)) ⊦ |
mon<(⌜nnf⌝ ), ¬ mon<(rem(⌜nnf⌝ , np)) ⊦
| mon<(⌜nnf⌝ ), ¬ mon<(rem(⌜nnf⌝ , np)) ⊦ |
⊦ rem(⌜nf⌝ , np) = lim(λ n. rem(⌜nf.take(n)⌝ , np))
mon<(⌜nnf⌝ ), ¬ mon<(lim(λ n. rem(⌜nnf.take(n)⌝ , np))) ⊦
Used terms: nnf, np
| ⊦ rem(⌜nf⌝ , np) = lim(λ n. rem(⌜nf.take(n)⌝ , np)) |
| mon<(⌜nnf⌝ ), ¬ mon<(lim(λ n. rem(⌜nnf.take(n)⌝ , np))) ⊦ |
⊦ (∀ n. mon<(nσf(n))) ∧ mon(nσf) → (mon<(lim(λ n. nσf(n))) ↔ true)
mon<(⌜nnf⌝ ), ¬ mon<(lim(λ n. rem(⌜nnf.take(n)⌝ , np))), (∀ n. mon<(rem(⌜nnf.take(n)⌝ , np))) ∧ mon(λ n. rem(⌜nnf.take(n)⌝ , np)) → (mon<(lim(λ n. rem(⌜nnf.take(n)⌝ , np))) ↔ true) ⊦
Used terms: λ n. rem(⌜nnf.take(n)⌝ , np)
| ⊦ (∀ n. mon<(nσf(n))) ∧ mon(nσf) → (mon<(lim(λ n. nσf(n))) ↔ true) |
| mon<(⌜nnf⌝ ), ¬ mon<(lim(λ n. rem(⌜nnf.take(n)⌝ , np))), (∀ n. mon<(rem(⌜nnf.take(n)⌝ , np))) ∧ mon(λ n. rem(⌜nnf.take(n)⌝ , np)) → (mon<(lim(λ n. rem(⌜nnf.take(n)⌝ , np))) ↔ true) ⊦ |
mon<(⌜nnf⌝ ), ¬ mon<(lim(λ n. rem(⌜nnf.take(n)⌝ , np))) ⊦ mon<(rem(⌜nnf.take(n)⌝ , np)) ∧ mon(λ n. rem(⌜nnf.take(n)⌝ , np))
| mon<(⌜nnf⌝ ), ¬ mon<(lim(λ n. rem(⌜nnf.take(n)⌝ , np))) ⊦ mon<(rem(⌜nnf.take(n)⌝ , np)) ∧ mon(λ n. rem(⌜nnf.take(n)⌝ , np)) |
⊦ mon(λ n. rem(⌜nf.take(n)⌝ , np))
mon(λ n. rem(⌜nnf.take(n)⌝ , np)), mon<(⌜nnf⌝ ), ¬ mon<(lim(λ n. rem(⌜nnf.take(n)⌝ , np))) ⊦ mon<(rem(⌜nnf.take(n)⌝ , np)) ∧ mon(λ n. rem(⌜nnf.take(n)⌝ , np))
Used terms: nnf, np
| ⊦ mon(λ n. rem(⌜nf.take(n)⌝ , np)) |
| mon(λ n. rem(⌜nnf.take(n)⌝ , np)), mon<(⌜nnf⌝ ), ¬ mon<(lim(λ n. rem(⌜nnf.take(n)⌝ , np))) ⊦ mon<(rem(⌜nnf.take(n)⌝ , np)) ∧ mon(λ n. rem(⌜nnf.take(n)⌝ , np)) |
mon(λ n. rem(⌜nnf.take(n)⌝ , np)), mon<(⌜nnf⌝ ), ¬ mon<(lim(λ n. rem(⌜nnf.take(n)⌝ , np))), ¬ mon<(rem(⌜nnf.take(n)⌝ , np)) ⊦
| mon(λ n. rem(⌜nnf.take(n)⌝ , np)), mon<(⌜nnf⌝ ), ¬ mon<(lim(λ n. rem(⌜nnf.take(n)⌝ , np))), ¬ mon<(rem(⌜nnf.take(n)⌝ , np)) ⊦ |
mon<(⌜nl⌝ ), ¬ mon<(rem(⌜nl⌝ , np)) ⊦
Used simplifier rules: monls-to: ⊦ mon<(⌜nnf⌝ ) → (mon<(⌜nnf.take(n)⌝ ) ↔ true);
| mon<(⌜nl⌝ ), ¬ mon<(rem(⌜nl⌝ , np)) ⊦ |
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.