| ⌜n⌝ + ⌜1⌝ = # rem(⌜nl0⌝ , np), nl0[m0] = rem(⌜nl0⌝ , np)[n], m0 < # nl0, mon<(⌜nl0⌝ + ⌜m '⌝ ), m ≤ nl0[m0], ∀ n0. n0 < n → rem(⌜nl0⌝ , np)[n0] < rem(⌜nl0⌝ , np)[n0 + 1], ∀ nl1, np. # nl1 < #(nl0 + m ') → mon<(⌜nl1⌝ ) → mon<(rem(⌜nl1⌝ , np)) ⊦ nl0 = [], np(m0), np(# nl0) |
⊦ mon<(nσ) ∧ m < n ∧ ⌜n⌝ < # nσ → nσ[m] < nσ[n]
Used simplifier rules: ⊦ #(nσ + nσ0) = # nσ + # nσ0; (s)% ⊦ # ⌜nl⌝ = ⌜# nl⌝ ; (s)% ⊦ # m ' = 0 +1; (s)%append-assoc: ⊦ (nσ + nσ0) + nσ1 = nσ + nσ0 + nσ1; from specification stream[natstream]% ⊦ ⌜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% ⊦ (⌜nl⌝ + ⌜nl0⌝ )[m] = (nl + nl0)[m]; (s)% ⊦ n < # nl → (nl + nl0)[n] = nl[n]; (s)%a: ⊦ (nl + nl0) + nl1 = nl + nl0 + nl1; from specification list[natstream]% ⊦ (nl + m ')[# nl] = m; (s)% ⊦ m ≤ n → (n < m ↔ false); (s) Used terms: ⌜nl0⌝ + ⌜m '⌝ , m0, # nl0