| i2b(0) ' ≠ [] ∧ bytes ≠ [], int2bytes(bytes2int(i2b(0) ') * 256 ^ n→i(# bytes) + band(bytes2int(bytes), 256 ^ n→i(# bytes) - 1)) = i2b(0) ' + i2b(0) ' + bytes, ∀ bytes0. # bytes0 < #(i2b(0) + i2b(0) + bytes) → bytes0.first = i2b(0) ∧ bytes0.rest.first = i2b(0) ∧ int2bytes(bytes2int(bytes0)) = bytes0 → # bytes0 = 1 ∨ bytes0 = [] ⊦ |
int2bytes(band(bytes2int(bytes), 256 ^ n→i(# bytes) - 1)) = i2b(0) ' + i2b(0) ' + bytes, ∀ bytes0. # bytes0 < #(i2b(0) + i2b(0) + bytes) → bytes0.first = i2b(0) ∧ bytes0.rest.first = i2b(0) ∧ int2bytes(bytes2int(bytes0)) = bytes0 → # bytes0 = 1 ∨ bytes0 = [] ⊦ bytes = []
Used simplifier rules: bytes2int-zero: ⊦ bytes2int(i2b(0) ') = 0;% ⊦ bytes = bytes0 + by ' + bytes1 → by ∈ bytes;% ⊦ (bytes + bytes0) + bytes1 = bytes + bytes0 + bytes1;% ⊦ by ' + bytes = bytes0 → by ∈ bytes0; (forward)% ⊦ by ' ≠ [];% ⊦ i + j = j + i;% ⊦ i + j + i0 = (i + j) + i0;% ⊦ i + 0 = i;% ⊦ i * j = j * i;% ⊦ i * j * j0 = (i * j) * j0;% ⊦ i * 0 = 0;