(* 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.

(* Specifications: *)
Lemma lt_M_2pw : M < 2 ^ w.
unfold M. apply lt_z__Z. Qed.
Lemma le_M_2pw : M <= 2 ^ w.
apply Zlt_le_weak. exact lt_M_2pw. Qed.