(* Ugly tacty to resolve sign condition for Z *)
Require Export NatGroundTac.
intros n m p H H1; repeat rewrite (mult_comm p); apply mult_lt_compat_r; auto.
Qed.
intros n m p H; auto with arith.
Qed.
intros n m p H H1; red; apply mult_lt_compat_l; auto.
Qed.
intros n m p; case p; auto with arith.
Qed.
intros n m p H; case (le_or_lt m n); auto with arith; intros H1.
absurd (p * n < p * m); auto with arith.
apply le_not_lt; apply mult_le_compat_l; auto.
Qed.
intros n m p; case p; auto with arith.
Qed.
intros n m p H; case (le_or_lt n m); auto with arith; intros H1.
absurd (p * n > p * m); auto with arith.
Qed.
intros n m p H H1; case (le_or_lt n m); auto with arith; intros H2; absurd (p * n <= p * m); auto with arith.
apply lt_not_le; apply mult_lt_compat_l; auto.
Qed.
intros n m p H H1; case (le_or_lt m n); auto with arith; intros H2; absurd (p * n >= p * m); auto with arith.
unfold ge; apply lt_not_le; apply mult_lt_compat_l; auto.
Qed.

Theorem lt_mult_0: forall a b, 0 < a -> 0 < b -> 0 < a * b.