intros M x. unfold in_Z_. split. apply Zle_0_div. apply le_0__Z. exact lt02w.
apply Zle_lt_trans with ((2 ^ (Zlog_sup M + w) - 1) / 2 ^ w). apply Zdiv_le. exact lt02w.
cut (x < 2 ^ (Zlog_sup M + w)). omega. apply lt_z__Z. rewrite Zpower_exp.
rewrite Zdiv_mult_minus. cut (2 ^ Zlog_sup M <= 2 ^ w). omega. apply Zle_pow_le.
apply Zlog_sup_correct1. apply Zlt_le_trans with 1. omega. apply Mset_l. apply logsuplew.
exact lt02w. omega. cut (0 < 2 ^ w). omega. exact lt02w. apply Zle_ge. apply Zlog_sup_correct1.
apply Zlt_le_trans with 1. omega. apply Mset_l. apply Zle_ge. exact le_0_w. Qed.

(* Specifications: *)
Lemma xlex : forall x : Z, in_Z_ (2 ^ w) (x mod 2 ^ w).
intro. unfold in_Z_. split. apply Zmod_le_0_z. exact lt02w. apply Zmod_lt_z_m. exact lt02w. Qed.
Lemma M'ex : forall M : Mset, in_Z_ (2 ^ w) (2 ^ (Zlog_sup M + w) / M - 2 ^ w).
intro M. unfold in_Z_. elim (Zle_lt_or_eq 1 M). intro H0. cut (1 <= Zlog_sup M). intro H1.