| bytes = by0 + bytes1, ∀ by. by ∈ bytes → b2i(by) = 0, bytes2int(bytes.butlast) = 0 ∨ bytes = by0 ', ∀ bytes0. # bytes0 < # bytes → (∀ by. by ∈ bytes0 → b2i(by) = 0) → bytes2int(bytes0) = 0 ∨ bytes0 = [] ⊦ bytes = [], bytes2int(bytes.butlast) * 256 + band(b2i(bytes.last), 255) = 0, # bytes = 1 |
bytes2int(by0 ' + bytes1.butlast) = 0, ∀ by. by = by0 ∨ by ∈ bytes1 → b2i(by) = 0, ∀ bytes0. # bytes0 < #(by0 + bytes1) → (∀ by. by ∈ bytes0 → b2i(by) = 0) → bytes2int(bytes0) = 0 ∨ bytes0 = [] ⊦ bytes1 = [], b2i(bytes1.last) = 0
Used simplifier rules: ⊦ band(i, j) = band(j, i);% ⊦ band(i, band(i0, j)) = band(band(i, i0), j);%0 ≤ i, i < 128 ⊦ band(b2i(by), 255) = (* i) ↔ b2i(by) = i;% ⊦ i + j = j + i;% ⊦ i + j + i0 = (i + j) + i0;% ⊦ i + 0 = i;% ⊦ by ' = by0 ' + bytes ↔ by = by0 ∧ bytes = [];% ⊦ ¬ by ∈ by0 ' + bytes ↔ by ≠ by0 ∧ ¬ by ∈ bytes;% ⊦ bytes ≠ [] → (by ' + bytes).last = bytes.last;% ⊦ bytes ≠ [] → (bytes0 + bytes).butlast = bytes0 + bytes.butlast;% ⊦ m + n = n + m;% ⊦ (m + n0) + n1 = m + n0 + n1;% ⊦ # bytes = 0 ↔ bytes = [];% ⊦ m + n = 1 ↔ m = 0 ∧ n = 1 ∨ n = 0 ∧ m = 1;% ⊦ # by ' = 0 +1;% ⊦ #(bytes + bytes0) = # bytes + # bytes0;% ⊦ (bytes + bytes0) + bytes1 = bytes + bytes0 + bytes1;% ⊦ by ' + bytes ≠ [];% ⊦ by + bytes = by ' + bytes;