| ¬ false ∈ bits.rest ∧ 0 ≤ i → (uint2bits(i) = false ' + true ' + bits.rest ↔ i = 2 ^ (n→i(# bits.rest) + 1) - 1), uint2bits(i) = false ' + bits, 0 ≤ i, false ∈ uint2bits(i) ⊦ bits = [], 2 ^ n→i(# bits) = i + 1, false ∈ bits |
uint2bits(i) = false ' + bits, uint2bits(i) = false ' + true ' + bits.rest ↔ 2 ^ (1 + n→i(# bits - 1)) = i + 1, 0 ≤ i, false ∈ uint2bits(i) ⊦ bits = [], 2 ^ n→i(# bits) = i + 1, false ∈ bits
Used simplifier rules: ⊦ i - j = i0 ↔ i = i0 + j;% ⊦ n -1 = n - 1;% ⊦ bits ≠ [] → # bits.rest = (# bits)-1;% ⊦ i ≤ j → (¬ ¬ j < i ↔ false);% ⊦ ¬ i ≤ j ↔ j < i;% ⊦ ¬ boolvar ∈ bits ∧ bits ≠ [] → ¬ boolvar ∈ bits.rest;