| # buf1 = n2 + n1 + m, n0 + m ≤ # buf0 ⊦ ⌜n2⌝ = #(⌜buf1⌝ from n1 + m), #(⌜buf0⌝ from n0) < ⌜m⌝ |
⊦ ¬ # σ0 < ⌜n⌝ ∧ finp(σ0) → #(σ0 from n) = ⌜(# σ0).n - n⌝
# buf1 = n2 + n1 + m, finp(⌜buf1⌝ ), n0 + m ≤ # buf0 ⊦ ⌜n2⌝ = ⌜(# ⌜buf1⌝ ).n - n1 + m⌝ , #(⌜buf0⌝ from n0) < ⌜m⌝ , # ⌜buf1⌝ < ⌜n1 + m⌝
Used simplifier rules: ⊦ # ⌜buf⌝ = ⌜# buf⌝ ; (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% ⊦ ⌜n⌝ < ⌜m⌝ + ⌜n0⌝ ↔ 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% ⊦ finp(⌜buf⌝ ); (ss)%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic%lf-02: ⊦ m < n ∧ m = n0 → n0 < n; (forward) from specification nat-basic% ⊦ m < n → n ≠ 0; (s)% ⊦ m + n < m + n0 ↔ n < n0; (s)% ⊦ ¬ m + n < m; (s) Used terms: n1 + m, ⌜buf1⌝