elim (Zle_lt_or_eq 1 M). intro H. rewrite p_M. generalize le_1_M. case M. intro. absurd (2 <= 0); omega.
intros q H0. elim (Zlog_sup_correct2 (Zpos q)). omega. omega. intros q H0. absurd (1 <= Zneg q).
apply Zlt_not_le. unfold Zlt. trivial. assumption. omega. assumption. Qed.
Local Hint Resolve lt_2pm1_M : a.

(* Specifications: *)
Lemma div_M_1 : 2 ^ p / M = 1.
clear x_i_in_Z_ x_i.