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.
Local Hint Resolve le_M_2pp le_1_p lt_0_p le_0_pm1 : a.

(* Specifications: *)
Lemma div_M_1_again : 2 ^ p / M = 1.
elim (Zle_lt_or_eq 1 M). intro H. replace (2 ^ p) with (1 * M + (2 ^ p - M)). apply Zdiv_mult_plus. omega.