Ltac mrewrite :=
repeat first
[ rewrite (ARadd_0_l ARth)
| rewrite <- ((ARadd_comm ARth) 0)
| rewrite (ARmul_1_l ARth)
| rewrite <- ((ARmul_comm ARth) 1)
| rewrite (ARmul_0_l ARth)
| rewrite <- ((ARmul_comm ARth) 0)
| rewrite (ARdistr_l ARth)
| reflexivity
| match goal with
| |- context [?z * (?x + ?y)] => rewrite ((ARmul_comm ARth) z (x+y))
end].

(* Specifications: *)
Lemma ARadd_0_r x : x + 0 == x.
Lemma ARadd_assoc1 x y z : (x + y) + z == (y + z) + x.
Lemma ARadd_assoc2 x y z : (y + x) + z == (y + z) + x.
Lemma ARmul_assoc1 x y z : (x * y) * z == (y * z) * x.
Lemma ARmul_assoc2 x y z : (y * x) * z == (y * z) * x.
Lemma ARopp_mul_r x y : - (x * y) == x * -y.
Lemma ARopp_zero : -0 == 0.
End ALMOST_RING.