001    /*
002     * $Id: SolvableReduction.java 2412 2009-02-07 12:17:54Z kredel $
003     */
004    
005    package edu.jas.gb;
006    
007    import java.util.List;
008    
009    import edu.jas.poly.GenSolvablePolynomial;
010    
011    import 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    
022    public 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    }