Definition convertByteBits bits (b : byte) : Prop :=
  exists (b0 b1 b2 b3 b4 b5 b6 b7 : bool),
   bits = [b0; b1; b2; b3; b4; b5; b6; b7] /\
   Byte.unsigned b =  (1 * (asZ b0) + 2 * (asZ b1) + 4 * (asZ b2) + 8 * (asZ b3)
         + 16 * (asZ b4) + 32 * (asZ b5) + 64 * (asZ b6) + 128 * (asZ b7)).

Lemma testbit_shiftl_8: forall a0 a1 a2 a3 a4 a5 a6 a7, forall i, Z.testbit (Z.shiftl (Z.b2z a0) 0 + Z.shiftl (Z.b2z a1) 1 + Z.shiftl (Z.b2z a2) 2 + Z.shiftl (Z.b2z a3) 3 + Z.shiftl (Z.b2z a4) 4 + Z.shiftl (Z.b2z a5) 5 + Z.shiftl (Z.b2z a6) 6 + Z.shiftl (Z.b2z a7) 7) i= Z.testbit (Z.shiftl (Z.b2z a0) 0) i || Z.testbit (Z.shiftl (Z.b2z a1) 1) i || Z.testbit (Z.shiftl (Z.b2z a2) 2) i || Z.testbit (Z.shiftl (Z.b2z a3) 3) i || Z.testbit (Z.shiftl (Z.b2z a4) 4) i || Z.testbit (Z.shiftl (Z.b2z a5) 5) i || Z.testbit (Z.shiftl (Z.b2z a6) 6) i || Z.testbit (Z.shiftl (Z.b2z a7) 7) i.