intros y b a x. split. apply approx_m2. case y; trivial. elim (Zle_lt_or_eq 0 a). trivial. intro H.
rewrite <- H in x. simpl in x. elim x. unfold in_Z_. intros z H0. elim H0; intros H1 H2. absurd (z < 0);
omega. apply le_0__Z. apply Zlt_le_weak. apply lt_z__Z. case b; trivial. apply le_0__Z. apply lt_z__Z.
apply approx_0. elim y; trivial. elim (Zle_lt_or_eq 0 a). trivial. intro H. rewrite <- H in x.
simpl in x. elim x. unfold in_Z_. intros z H0. elim H0; intros H1 H2. absurd (z < 0);
omega. apply le_0__Z. elim b; trivial. apply le_0__Z. Qed.
(* KEEP TOGETHER> - approx_0_m2 *)

(* Specifications: *)
(* <KEEP TOGETHER - div_approx1 *)
Theorem div_approx1 : forall (y : Zpls) (a : Zpls) (b : Zpls)
(x : Z_ (a * b + a)),
x / a * a / y - 1 <= x / a * (a * b / y) / b <=
x / a * a / y.