| # buf1 = n2 + n1 + m, n0 + m ≤ # buf0, n1 + m ≤ n2 + n1 + m ⊦ ⌜n2 + n1 + m⌝ = ⌜n1⌝ + #((⌜buf0⌝ from n0) to m) + #(⌜buf1⌝ from n1 + m) |
⊦ m ≤ n → (⌜(* n)⌝ = ⌜(* m)⌝ + n∞2 ↔ ⌜n - m⌝ = n∞2)
# buf1 = n2 + n1 + m, n1 + m ≤ n2 + n1 + m, n0 + m ≤ # buf0, n1 ≤ n2 + n1 + m ⊦ ⌜n2 + n1 + m - n1⌝ = #((⌜buf0⌝ from n0) to m) + #(⌜buf1⌝ from n1 + m)
Used simplifier rules: ⊦ ⌜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⌝ + n∞1 = ⌜n⌝ + n∞2 ↔ n∞1 = n∞2; (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 + n0 ↔ n ≤ n0; (s)% ⊦ m ≤ m + n; (s)% ⊦ m ≤ n ↔ ¬ n < m; (ss)% ⊦ ¬ m + n < m; (s) Used terms: #((⌜buf0⌝ from n0) to m) + #(⌜buf1⌝ from n1 + m), n1, n2 + n1 + m