(* outputs a list of 4 bytes *)
Definition put_uint32_le (x : int) : list int :=
  [ (Int.and           x                (Int.repr 255));
    (Int.and (Int.shru x (Int.repr  8)) (Int.repr 255));
    (Int.and (Int.shru x (Int.repr 16)) (Int.repr 255));
    (Int.and (Int.shru x (Int.repr 24)) (Int.repr 255)) ].

Lemma put_uint32_le_def: put_uint32_le = fun (x : int) => [ (Int.and x (Int.repr 255)); (Int.and (Int.shru x (Int.repr 8)) (Int.repr 255)); (Int.and (Int.shru x (Int.repr 16)) (Int.repr 255)); (Int.and (Int.shru x (Int.repr 24)) (Int.repr 255)) ].