cut (((h mod M * 2 ^ w + l) / 2 ^ p * 2 ^ p) mod M < M). omega. apply Zmod_lt_z_m. omega. elim H0; intro H1.
apply Zlt_trans with M. rewrite H1. apply Zmod_lt_z_m. omega. omega. rewrite H1.
cut ((((h mod M + M) * 2 ^ w + l) / 2 ^ p * 2 ^ p) mod M < M). omega. apply Zmod_lt_z_m. omega. Qed.

(* Specifications: *)
Lemma r'0_eq_1 :
_Z r'0 = ((h mod M * 2 ^ w + l) / 2 ^ p * 2 ^ p mod M + l mod 2 ^ p mod M) mod 2 ^ w \/
_Z r'0 = (((h mod M + M) * 2 ^ w + l) / 2 ^ p * 2 ^ p mod M + l mod 2 ^ p mod M) mod 2 ^ w.