Instance ARsub_ext : Proper (req ==> req ==> req) rsub.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 ARmul_1_r x : x * 1 == x.
Lemma ARmul_0_r x : x * 0 == 0.
Lemma ARdistr_r x y z : z * (x + y) == z*x + z*y.
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.