| m ≤ # buf0 + # buf1, # buf0 ≤ m → datasize(buf1, m - # buf0) = 0 ⊦ datasize(buf0 + buf1, m) = datasize(buf0, min(m, # buf0)) |
m ≤ # buf0 ⊦ datasize(buf0 + buf1, m) = datasize(buf0, m)
⊦ datasize(buf, 0) = 0
m0 +1 ≤ # buf0 + # buf1, # buf0 ≤ m0 +1 → datasize(buf1, m0 +1 - # buf0) = 0, ∀ buf0, buf1. m0 ≤ # buf0 + # buf1 ∧ (# buf0 ≤ m0 → datasize(buf1, m0 - # buf0) = 0) → datasize(buf0 + buf1, m0) = datasize(buf0, min(m0, # buf0)) ⊦ datasize(buf0 + buf1, m0 +1) = datasize(buf0, min(m0 +1, # buf0))
Used simplifier rules: datasize-append-lower-h: m ≤ # buf0 ⊦ datasize(buf0 + buf1, m) = datasize(buf0, m);%datasize-base: ⊦ datasize(buf, 0) = 0;%nat freely generated by 0, +1;;% ⊦ 0 ≤ m; (s)%append-a: ⊦ (buf + buf0) + buf1 = buf + buf0 + buf1; from specification array-splice[buffer]% ⊦ min(0, n) = 0; (s)