replace (x / y / z) with
((x / (y * z) * z * y + x mod (y * z)) / y / z).
rewrite Zdiv_times_plus. rewrite Zdiv_times_plus. rewrite Zplus_comm. rewrite Zdiv_small_0. ring.
apply Zle_0_div. apply Zmod_le_0_z. apply Zmult_lt_0_compat; assumption. assumption.
apply Zle_lt_trans with ((y * z - 1) / y). apply Zdiv_le. assumption. cut (x mod (y * z) < y * z).
omega. apply Zmod_lt_z_m. apply Zmult_lt_0_compat; omega. rewrite Zmult_comm. rewrite Zdiv_mult_minus;
omega. assumption. assumption. rewrite Zmult_comm with (n := y). rewrite <- Zmult_assoc.
rewrite Zdivmod_split. trivial. apply Zmult_lt_0_compat; assumption. Qed.

(* Specifications: *)
Lemma Zdiv_simpl : forall x y z : Z, 0 < y -> 0 < z -> (x * z) / (y * z) = x / y.
intros x y z H H0. rewrite Zmult_comm with (n := y). rewrite <- Zdivdivdiv.