(* KEEP TOGETHER> *)
unfold y. rewrite Z_from_multw. fold M. elim q'_eq; intro H; rewrite H. left.
rewrite <- Zmod_mult_distr_l. trivial. auto with a. right. rewrite <- Zmod_mult_distr_l.
apply f_equal2 with (f := Zmod). ring. trivial. auto with a. Qed.

Lemma lt_M_2pw : M < 2 ^ w.
unfold M. apply lt_z__Z. Qed.