(* This code is copyrighted by its authors; it is distributed under  *)
(* the terms of the LGPL license (see LICENSE and description files) *)
(****************************************************************************  Buchberger : reduction plus  Laurent Thery May 97 (revised April 01)  ****************************************************************************)
Require Export Preduce.
Section Preduceplus.
Load "hCoefStructure".
Load "hOrderStructure".
Load "hReduce".
Inductive reduceplus (Q : list (poly A0 eqA ltM)) :
list (Term A n) -> list (Term A n) -> Prop :=
| Rstar_0 :
forall x y : list (Term A n), eqP A eqA n x y -> reduceplus Q x y
| Rstar_n :
forall x y z : list (Term A n),
reduce A A0 A1 eqA invA minusA multA divA eqA_dec n ltM ltM_dec Q x y ->
reduceplus Q y z -> reduceplus Q x z.
Hint Resolve Rstar_0.

Theorem reduceplus_eqp_com :
forall (Q : list (poly A0 eqA ltM)) (p q r s : list (Term A n)),
reduceplus Q p q ->
canonical A0 eqA ltM p ->
eqP A eqA n p r -> eqP A eqA n q s -> reduceplus Q r s.