(************************************************************************) (* v * The Coq Proof Assistant / The Coq Development Team *) (* add_move_0_r. now rewrite <- mul_add_distr_r, add_opp_diag_l, mul_0_l. Qed. Theorem mul_opp_r : forall n m, n * (- m) == - (n * m). Proof. intros n m; rewrite (mul_comm n (- m)), (mul_comm n m); apply mul_opp_l. Qed. Theorem mul_opp_opp : forall n m, (- n) * (- m) == n * m. Proof. intros n m; now rewrite mul_opp_l, mul_opp_r, opp_involutive. Qed. Theorem mul_sub_distr_l : forall n m p, n * (m - p) == n * m - n * p. Proof. intros n m p. do 2 rewrite <- add_opp_r. rewrite mul_add_distr_l. now rewrite mul_opp_r. Qed. Theorem mul_sub_distr_r : forall n m p, (n - m) * p == n * p - m * p. Proof. intros n m p; rewrite (mul_comm (n - m) p), (mul_comm n p), (mul_comm m p); now apply mul_sub_distr_l. Qed. End ZMulPropFunct.