| int2bytes(bytes2int(i2b(0) ' + bytes)) = 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 ≠ [], bytes0 ≠ [] ⊦ bytes2int(bytes + bytes0) = bytes2int(bytes) * 256 ^ n→i(# bytes0) + band(bytes2int(bytes0), 256 ^ n→i(# bytes0) - 1)
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 = [] ⊦
Used simplifier rules: bytes2int-zero: ⊦ bytes2int(i2b(0) ') = 0;%int2bytes-byte: ~128 ≤ i, i < 128 ⊦ int2bytes((* i)) = i2b(i) ';% ⊦ by ' ≠ [];% ⊦ bytes + [] = bytes;% ⊦ (bytes + bytes0) + bytes1 = bytes + bytes0 + bytes1;% ⊦ by ' = by0 ' + bytes ↔ by = by0 ∧ bytes = []; Used terms: bytes, i2b(0) '