001    /*
002     * $Id: SolvableGroebnerBase.java 2412 2009-02-07 12:17:54Z kredel $
003     */
004    
005    package edu.jas.gb;
006    
007    
008    import java.util.List;
009    
010    import edu.jas.poly.GenSolvablePolynomial;
011    
012    import edu.jas.structure.RingElem;
013    
014    
015    /**
016     * Solvable Groebner Bases interface.
017     * Defines methods for left, right and twosided Groebner bases 
018     * and left, right and twosided GB tests.
019     * @param <C> coefficient type
020     * @author Heinz Kredel.
021     */
022    
023    public interface SolvableGroebnerBase<C extends RingElem<C>> {
024    
025    
026        /**
027         * Left Groebner base test.
028         * @param F solvable polynomial list.
029         * @return true, if F is a left Groebner base, else false.
030         */
031        public boolean isLeftGB(List<GenSolvablePolynomial<C>> F);
032    
033    
034        /**
035         * Left Groebner base test.
036         * @param modv number of module variables.
037         * @param F solvable polynomial list.
038         * @return true, if F is a left Groebner base, else false.
039         */
040        public boolean isLeftGB(int modv, List<GenSolvablePolynomial<C>> F);
041    
042    
043        /**
044         * Twosided Groebner base test.
045         * @param Fp solvable polynomial list.
046         * @return true, if Fp is a two-sided Groebner base, else false.
047         */
048        public boolean isTwosidedGB(List<GenSolvablePolynomial<C>> Fp);
049    
050    
051        /**
052         * Twosided Groebner base test.
053         * @param modv number of module variables.
054         * @param Fp solvable polynomial list.
055         * @return true, if Fp is a two-sided Groebner base, else false.
056         */
057        public boolean isTwosidedGB(int modv, 
058                                    List<GenSolvablePolynomial<C>> Fp);
059    
060    
061        /**
062         * Right Groebner base test.
063         * @param F solvable polynomial list.
064         * @return true, if F is a right Groebner base, else false.
065         */
066        public boolean isRightGB(List<GenSolvablePolynomial<C>> F);
067    
068    
069        /**
070         * Right Groebner base test.
071         * @param modv number of module variables.
072         * @param F solvable polynomial list.
073         * @return true, if F is a right Groebner base, else false.
074         */
075        public boolean isRightGB(int modv, List<GenSolvablePolynomial<C>> F);
076    
077    
078        /**
079         * Left Groebner base using pairlist class.
080         * @param F solvable polynomial list.
081         * @return leftGB(F) a left Groebner base of F.
082         */
083        public List<GenSolvablePolynomial<C>> 
084                   leftGB(List<GenSolvablePolynomial<C>> F);
085    
086    
087        /**
088         * Left Groebner base using pairlist class.
089         * @param modv number of module variables.
090         * @param F solvable polynomial list.
091         * @return leftGB(F) a left Groebner base of F.
092         */
093        public List<GenSolvablePolynomial<C>> 
094               leftGB(int modv, 
095                      List<GenSolvablePolynomial<C>> F);
096    
097    
098        /** 
099         * Solvable Extended Groebner base using critical pair class.
100         * @param F solvable polynomial list.
101         * @return a container for an extended left Groebner base of F.
102         */
103        public SolvableExtendedGB<C>  
104               extLeftGB( List<GenSolvablePolynomial<C>> F );
105    
106    
107        /**
108         * Solvable Extended Groebner base using critical pair class.
109         * @param modv module variable number.
110         * @param F solvable polynomial list.
111         * @return a container for an extended left Groebner base of F.
112         */
113        public SolvableExtendedGB<C> 
114               extLeftGB( int modv, 
115                          List<GenSolvablePolynomial<C>> F );
116    
117    
118        /**
119         * Left minimal ordered groebner basis.
120         * @param Gp a left Groebner base.
121         * @return leftGBmi(F) a minimal left Groebner base of Gp.
122         */
123        public List<GenSolvablePolynomial<C>> 
124               leftMinimalGB(List<GenSolvablePolynomial<C>> Gp);
125    
126    
127        /**
128         * Twosided Groebner base using pairlist class.
129         * @param Fp solvable polynomial list.
130         * @return tsGB(Fp) a twosided Groebner base of Fp.
131         */
132        public List<GenSolvablePolynomial<C>> 
133               twosidedGB(List<GenSolvablePolynomial<C>> Fp);
134    
135        /**
136         * Twosided Groebner base using pairlist class.
137         * @param modv number of module variables.
138         * @param Fp solvable polynomial list.
139         * @return tsGB(Fp) a twosided Groebner base of Fp.
140         */
141        public List<GenSolvablePolynomial<C>> 
142               twosidedGB(int modv, 
143                          List<GenSolvablePolynomial<C>> Fp);
144    
145    
146        /**
147         * Right Groebner base using opposite ring left GB.
148         * @param F solvable polynomial list.
149         * @return rightGB(F) a right Groebner base of F.
150         */
151        public List<GenSolvablePolynomial<C>> 
152               rightGB(List<GenSolvablePolynomial<C>> F);
153    
154    
155        /**
156         * Right Groebner base using opposite ring left GB.
157         * @param modv number of module variables.
158         * @param F solvable polynomial list.
159         * @return rightGB(F) a right Groebner base of F.
160         */
161        public List<GenSolvablePolynomial<C>> 
162               rightGB(int modv, 
163                       List<GenSolvablePolynomial<C>> F);
164    
165    
166        /**
167         * Test if left reduction matrix.
168         * @param exgb an SolvableExtendedGB container.
169         * @return true, if exgb contains a left reduction matrix, else false.
170         */
171        public boolean
172               isLeftReductionMatrix(SolvableExtendedGB<C> exgb);  
173    
174    
175        /**
176         * Test if left reduction matrix.
177         * @param F a solvable polynomial list.
178         * @param G a left Groebner base.
179         * @param Mf a possible left reduction matrix.
180         * @param Mg a possible left reduction matrix.
181         * @return true, if Mg and Mf are left reduction matrices, else false.
182         */
183        public boolean
184               isLeftReductionMatrix(List<GenSolvablePolynomial<C>> F, 
185                                     List<GenSolvablePolynomial<C>> G,
186                                     List<List<GenSolvablePolynomial<C>>> Mf,  
187                                     List<List<GenSolvablePolynomial<C>>> Mg);  
188    
189    }