| mon<(rem(⌜nl0⌝ , np)), mon<(⌜nl0⌝ + ⌜m '⌝ ), ∀ nl1, np. # nl1 < #(nl0 + m ') → mon<(⌜nl1⌝ ) → mon<(rem(⌜nl1⌝ , np)) ⊦ ∀ n. ⌜n⌝ + ⌜1⌝ < #(rem(⌜nl0⌝ , np) + ⌜m '⌝ ) → (rem(⌜nl0⌝ , np) + ⌜m '⌝ )[n] < (rem(⌜nl0⌝ , np) + ⌜m '⌝ )[n + 1], np(# nl0) |
mon<(rem(⌜nl0⌝ , np)), mon<(⌜nl0⌝ + ⌜m '⌝ ), ⌜n⌝ < # rem(⌜nl0⌝ , np), (rem(⌜nl0⌝ , np) + ⌜m '⌝ )[n + 1] ≤ rem(⌜nl0⌝ , np)[n], ∀ nl1, np. # nl1 < #(nl0 + m ') → mon<(⌜nl1⌝ ) → mon<(rem(⌜nl1⌝ , np)) ⊦ np(# nl0)
Used simplifier rules: lels: ⊦ ¬ m < n ↔ n ≤ m; from specification nat%get-append-ls: ⊦ ⌜m⌝ < # nσ → (nσ + nσ0)[m] = nσ[m]; from specification stream[natstream]%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%add-all-zero: ⊦ n∞ + ⌜0⌝ = n∞; from specification nat-inf%add-ls-cancel-num-04: ⊦ m ≤ n → (⌜(* m)⌝ + n∞2 < ⌜(* n)⌝ + n∞1 ↔ n∞2 < ⌜n - m⌝ + n∞1); from specification nat-inf%append-assoc: ⊦ (nσ + nσ0) + nσ1 = nσ + nσ0 + nσ1; from specification stream[natstream]%len-02: ⊦ # m ' = 0 +1; from specification list[natstream]%size-fin: ⊦ # ⌜nl⌝ = ⌜# nl⌝ ; from specification stream[natstream]%size-append: ⊦ #(nσ + nσ0) = # nσ + # nσ0; from specification stream[natstream]