(** ** Properties of multiplication *)

(* Specifications: *)
Theorem mul_commut: forall x y, mul x y = mul y x.
Theorem mul_zero: forall x, mul x zero = zero.
Theorem mul_one: forall x, mul x one = x.
Theorem mul_mone: forall x, mul x mone = neg x.
Theorem mul_assoc: forall x y z, mul (mul x y) z = mul x (mul y z).
Theorem mul_add_distr_l:
forall x y z, mul (add x y) z = add (mul x z) (mul y z).
Theorem mul_add_distr_r:
forall x y z, mul x (add y z) = add (mul x y) (mul x z).
Theorem neg_mul_distr_l:
forall x y, neg(mul x y) = mul (neg x) y.
Theorem neg_mul_distr_r:
forall x y, neg(mul x y) = mul x (neg y).
Theorem mul_signed:
forall x y, mul x y = repr (signed x * signed y).
Theorem mul_commut: forall x y, mul x y = mul y x.
Theorem mul_zero: forall x, mul x zero = zero.
Theorem mul_one: forall x, mul x one = x.
Theorem mul_mone: forall x, mul x mone = neg x.
Theorem mul_assoc: forall x y z, mul (mul x y) z = mul x (mul y z).
Theorem mul_add_distr_l:
forall x y z, mul (add x y) z = add (mul x z) (mul y z).
Theorem mul_add_distr_r:
forall x y z, mul x (add y z) = add (mul x y) (mul x z).
Theorem neg_mul_distr_l:
forall x y, neg(mul x y) = mul (neg x) y.
Theorem neg_mul_distr_r:
forall x y, neg(mul x y) = mul x (neg y).
Theorem mul_signed:
forall x y, mul x y = repr (signed x * signed y).