(* arr: list of 4 bytes *)
Definition get_uint32_le (arr: list Z) (i: Z) : int :=
 (Int.or (Int.or (Int.or
            (Int.repr (Znth  i    arr 0))
   (Int.shl (Int.repr (Znth (i+1) arr 0)) (Int.repr  8)))
   (Int.shl (Int.repr (Znth (i+2) arr 0)) (Int.repr 16)))
   (Int.shl (Int.repr (Znth (i+3) arr 0)) (Int.repr 24))).

Lemma get_uint32_le_def: get_uint32_le = fun (arr: list Z) (i: Z) => (Int.or (Int.or (Int.or (Int.repr (Znth i arr 0)) (Int.shl (Int.repr (Znth (i+1) arr 0)) (Int.repr 8))) (Int.shl (Int.repr (Znth (i+2) arr 0)) (Int.repr 16))) (Int.shl (Int.repr (Znth (i+3) arr 0)) (Int.repr 24))).