(* 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.
intros a b; case a ; case b; simpl; auto with arith.
intros n H1 H2; absurd (0 < 0); auto with arith.
Qed.
intros a b H1 H2; red; apply  lt_mult_0; auto with arith.
Qed.
intros a b; case a; simpl; auto with arith.
Qed.
intros a b; case b; simpl; auto with arith.
rewrite mult_0_r; auto with arith.
Qed.
intros a b; case a; simpl; auto with arith.
Qed.
intros a b; case b; simpl; auto with arith.
rewrite mult_0_r; auto with arith.
Qed.

Theorem le_0_eq_0: forall n, n <= 0 -> n = 0.