(*4.9*) 

Fixpoint iter64Shr8 (u : int64) (n : nat) {struct n} : int64 :=
  match n with
  | 0%nat => u
  | S n' => Int64.shru (iter64Shr8 u n') (Int64.repr 8)
  end.Definition iter64Shr8' (u : int64) (n : nat): int64 := 
   Int64.shru u (Int64.mul (Int64.repr 8) (Int64.repr (Z.of_nat n))).

(* Specifications: *)
Lemma iter64: forall n u (N: Z.of_nat n < 8), iter64Shr8 u n = iter64Shr8' u n.
Lemma unsigned_repr' z (Q: 0 <= z < Byte.modulus): Byte.unsigned (Byte.repr z) = z.
Lemma shru_shru x n m (NM:Int64.unsigned n + Int64.unsigned m <= Int64.max_unsigned): Int64.shru (Int64.shru x n) m = Int64.shru x (Int64.add n m).