split. cut (2 ^ w <= 2 ^ (Zlog_sup M + w) / M). omega. rewrite Zpower_exp.
apply Zle_trans with (M * 2 ^ w / M). rewrite Zmult_comm. rewrite Z_div_mult. omega. omega.
apply Zdiv_le. omega. apply Zmult_le_compat_r. elim (Zlog_sup_correct2 M). omega. omega.
apply Zlt_le_weak. exact lt02w. omega. apply Zle_ge. exact le_0_w.
cut (2 ^ (Zlog_sup M + w) / M < 2 ^ w + 2 ^ w). omega. rewrite Zpower_exp.
apply Zle_lt_trans with (((2 * M - 1) * 2 ^ w) / M). apply Zdiv_le. omega. apply Zmult_le_compat_r.
replace (Zlog_sup M) with (Zlog_sup M - 1 + 1). rewrite Zpower_exp.
apply Zle_trans with ((M - 1) * 2). apply Zmult_le_compat. elim (Zlog_sup_correct2 M). omega.
omega. simpl. unfold Zpower_pos. simpl. omega. apply Zle_trans with (2 ^ (1 - 1)). simpl. omega.
apply Zle_pow_le. omega. omega. simpl. unfold Zpower_pos. simpl. omega. omega. omega. omega. ring.
apply Zlt_le_weak. exact lt02w. replace ((2 * M - 1) * 2 ^ w) with ((2 ^ w + 2 ^ w) * M + - 2 ^ w).
rewrite Zdiv_times_plus. cut (- 2 ^ w / M < 0). omega. apply Zle_lt_trans with (-1 / M).
apply Zdiv_le. omega. cut (0 < 2 ^ w). omega. exact lt02w. replace (-1) with (0 * M - 1).
rewrite Zdiv_mult_minus. omega. omega. omega. omega. ring. omega. ring. omega. apply Zle_ge. exact le_0_w.
replace 1 with (Zlog_sup 2). apply Zlog_sup_seq. omega. trivial. intro H0. rewrite <- H0. simpl.
replace (2 ^ w) with (2 ^ w * 1). rewrite Z_div_mult. split. omega. cut (0 < 2 ^ w). omega. exact lt02w.
omega. ring. apply Mset_l. Qed.

(* Specifications: *)
Lemma p1ex_2le : forall M : Mset, in_Z_ w (Zlog_sup M).
intro M. unfold in_Z_. split. apply Zle_trans with (Zlog_sup 1). simpl. omega.