| buf[n0] = empty, n < n1, n1 < n0, n < # buf, n ≤ n0, n2 ≤ n0, n ≤ n2, ∀ n1. n < n1 ∧ ¬ n0 < n1 → buf[n1] = empty ⊦ n + 1 = datasize(buf, n0), buf[n] = empty, buf[n2] = empty, buf[n1] = empty, datasize(buf, n) = datasize(buf, n0) |
buf[n0] = empty, n < n0, n < n1, n1 < n0, n < # buf, n + 1 < n0, n2 ≤ n0, n ≤ n2, ∀ n1. n < n1 ∧ ¬ n0 < n1 → buf[n1] = empty ⊦ n + 1 = datasize(buf, n0), buf[n] = empty, buf[n2] = empty, buf[n1] = empty, datasize(buf, n) = datasize(buf, n0)
Used simplifier rules: ⊦ m < n → m ≤ n; (s)% ⊦ m +1 = m + 1; (s)% ⊦ m < n → n ≠ 0; (s)%f: ⊦ m < n → n ≠ 0; (forward) from specification nat-basic%trans: ⊦ n < n0 ∧ n0 < n1 → n < n1; (forward) from specification nat-basic%lf: ⊦ m < n ∧ n < n0 → m +1 < n0; (forward) from specification nat-basic