intros Q a b nZb p q H' H'0.
apply reducetop with (b := b) (nZb := nZb) (q := q); auto.
Qed.
Hint Resolve reducetop_sp.

(* Specifications: *)
Theorem reduce_inv2 :
forall (Q : list (poly A0 eqA ltM)) (p q : list (Term A n)),
reduce Q p q ->
canonical A0 eqA ltM p ->
exists x : list (Term A n),
(exists a : Term A n,
~ zeroP (A:=A) A0 eqA (n:=n) a /\
inPolySet x Q /\
canonical A0 eqA ltM x /\
eqP A eqA n q
(minuspf A A0 A1 eqA invA minusA multA eqA_dec n ltM ltM_dec p
(mults (A:=A) multA (n:=n) a x))).