001/*
002 * $Id: SolvableReduction.java 2412 2009-02-07 12:17:54Z kredel $
003 */
004
005package edu.jas.gb;
006
007import java.util.List;
008
009import edu.jas.poly.GenSolvablePolynomial;
010
011import edu.jas.structure.RingElem;
012
013
014/**
015 * Solvable polynomial Reduction interface.
016 * Defines S-Polynomial, normalform
017 * and irreducible set.
018 * @param <C> coefficient type
019 * @author Heinz Kredel
020 */
021
022public interface SolvableReduction<C extends RingElem<C>>  {
023
024
025    /**
026     * Left S-Polynomial.
027     * @param Ap solvable polynomial.
028     * @param Bp solvable polynomial.
029     * @return left-spol(Ap,Bp) the left S-polynomial of Ap and Bp.
030     */
031    public GenSolvablePolynomial<C> 
032           leftSPolynomial(GenSolvablePolynomial<C> Ap, 
033                           GenSolvablePolynomial<C> Bp);
034
035
036    /**
037     * S-Polynomial with recording.
038     * @param S recording matrix, is modified.
039     * @param i index of Ap in basis list.
040     * @param Ap a polynomial.
041     * @param j index of Bp in basis list.
042     * @param Bp a polynomial.
043     * @return leftSpol(Ap, Bp), the left S-Polynomial for Ap and Bp.
044     */
045    public GenSolvablePolynomial<C> 
046           leftSPolynomial(List<GenSolvablePolynomial<C>> S,
047                           int i,
048                           GenSolvablePolynomial<C> Ap, 
049                           int j,
050                           GenSolvablePolynomial<C> Bp);
051
052
053    /**
054     * Left Normalform.
055     * @param Ap solvable polynomial.
056     * @param Pp solvable polynomial list.
057     * @return left-nf(Ap) with respect to Pp.
058     */
059    public GenSolvablePolynomial<C> 
060           leftNormalform(List<GenSolvablePolynomial<C>> Pp, 
061                          GenSolvablePolynomial<C> Ap);
062
063
064    /**
065     * LeftNormalform with recording.
066     * @param row recording matrix, is modified.
067     * @param Pp a polynomial list for reduction.
068     * @param Ap a polynomial.
069     * @return nf(Pp,Ap), the left normal form of Ap wrt. Pp.
070     */
071    public GenSolvablePolynomial<C> 
072           leftNormalform(List<GenSolvablePolynomial<C>> row,
073                          List<GenSolvablePolynomial<C>> Pp, 
074                          GenSolvablePolynomial<C> Ap);
075
076
077    /**
078     * Left Normalform Set.
079     * @param Ap solvable polynomial list.
080     * @param Pp solvable polynomial list.
081     * @return list of left-nf(a) with respect to Pp for all a in Ap.
082     */
083    public List<GenSolvablePolynomial<C>> 
084           leftNormalform(List<GenSolvablePolynomial<C>> Pp, 
085                          List<GenSolvablePolynomial<C>> Ap);
086
087
088    /**
089     * Left irreducible set.
090     * @param Pp solvable polynomial list.
091     * @return a list P of solvable polynomials which are in normalform wrt. P.
092     */
093    public List<GenSolvablePolynomial<C>> 
094           leftIrreducibleSet(List<GenSolvablePolynomial<C>> Pp); 
095
096
097    /**
098     * Is reduction of normal form.
099     * @param row recording matrix, is modified.
100     * @param Pp a solvable polynomial list for reduction.
101     * @param Ap a solvable polynomial.
102     * @param Np nf(Pp,Ap), a left normal form of Ap wrt. Pp.
103     * @return true, if Np + sum( row[i]*Pp[i] ) == Ap, else false.
104     */
105
106    public boolean 
107           isLeftReductionNF(List<GenSolvablePolynomial<C>> row,
108                             List<GenSolvablePolynomial<C>> Pp, 
109                             GenSolvablePolynomial<C> Ap,
110                             GenSolvablePolynomial<C> Np);
111
112
113    /**
114     * Right S-Polynomial.
115     * @param Ap solvable polynomial.
116     * @param Bp solvable polynomial.
117     * @return right-spol(Ap,Bp) the right S-polynomial of Ap and Bp.
118     */
119    public GenSolvablePolynomial<C> 
120           rightSPolynomial(GenSolvablePolynomial<C> Ap, 
121                            GenSolvablePolynomial<C> Bp);
122
123
124    /**
125     * Right Normalform.
126     * @param Ap solvable polynomial.
127     * @param Pp solvable polynomial list.
128     * @return right-nf(Ap) with respect to Pp.
129     */
130    public GenSolvablePolynomial<C> 
131           rightNormalform(List<GenSolvablePolynomial<C>> Pp, 
132                           GenSolvablePolynomial<C> Ap);
133
134}