001/*
002 * $Id$
003 */
004
005package edu.jas.gb;
006
007
008import java.io.Serializable;
009import java.util.List;
010
011import edu.jas.poly.ModuleList;
012import edu.jas.poly.GenSolvablePolynomial;
013import edu.jas.structure.RingElem;
014
015
016/**
017 * Solvable Groebner Bases interface. Defines methods for left, right and
018 * twosided Groebner bases and left, right and twosided GB tests.
019 * @param <C> coefficient type
020 * @author Heinz Kredel
021 */
022
023public interface SolvableGroebnerBase<C extends RingElem<C>> extends Serializable {
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, List<GenSolvablePolynomial<C>> Fp);
058
059
060    /**
061     * Right Groebner base test.
062     * @param F solvable polynomial list.
063     * @return true, if F is a right Groebner base, else false.
064     */
065    public boolean isRightGB(List<GenSolvablePolynomial<C>> F);
066
067
068    /**
069     * Right Groebner base test.
070     * @param modv number of module variables.
071     * @param F solvable polynomial list.
072     * @return true, if F is a right Groebner base, else false.
073     */
074    public boolean isRightGB(int modv, List<GenSolvablePolynomial<C>> F);
075
076
077    /**
078     * Left Groebner base using pairlist class.
079     * @param F solvable polynomial list.
080     * @return leftGB(F) a left Groebner base of F.
081     */
082    public List<GenSolvablePolynomial<C>> leftGB(List<GenSolvablePolynomial<C>> F);
083
084
085    /**
086     * Left Groebner base using pairlist class.
087     * @param modv number of module variables.
088     * @param F solvable polynomial list.
089     * @return leftGB(F) a left Groebner base of F.
090     */
091    public List<GenSolvablePolynomial<C>> leftGB(int modv, List<GenSolvablePolynomial<C>> F);
092
093
094    /**
095     * Solvable Extended Groebner base using critical pair class.
096     * @param F solvable polynomial list.
097     * @return a container for an extended left Groebner base of F.
098     */
099    public SolvableExtendedGB<C> extLeftGB(List<GenSolvablePolynomial<C>> F);
100
101
102    /**
103     * Solvable Extended Groebner base using critical pair class.
104     * @param modv module variable number.
105     * @param F solvable polynomial list.
106     * @return a container for an extended left Groebner base of F.
107     */
108    public SolvableExtendedGB<C> extLeftGB(int modv, List<GenSolvablePolynomial<C>> F);
109
110
111    /**
112     * Left minimal ordered groebner basis.
113     * @param Gp a left Groebner base.
114     * @return leftGBmi(F) a minimal left Groebner base of Gp.
115     */
116    public List<GenSolvablePolynomial<C>> leftMinimalGB(List<GenSolvablePolynomial<C>> Gp);
117
118
119    /**
120     * Twosided Groebner base using pairlist class.
121     * @param Fp solvable polynomial list.
122     * @return tsGB(Fp) a twosided Groebner base of Fp.
123     */
124    public List<GenSolvablePolynomial<C>> twosidedGB(List<GenSolvablePolynomial<C>> Fp);
125
126
127    /**
128     * Twosided Groebner base using pairlist class.
129     * @param modv number of module variables.
130     * @param Fp solvable polynomial list.
131     * @return tsGB(Fp) a twosided Groebner base of Fp.
132     */
133    public List<GenSolvablePolynomial<C>> twosidedGB(int modv, List<GenSolvablePolynomial<C>> Fp);
134
135
136    /**
137     * Right Groebner base using opposite ring left GB.
138     * @param F solvable polynomial list.
139     * @return rightGB(F) a right Groebner base of F.
140     */
141    public List<GenSolvablePolynomial<C>> rightGB(List<GenSolvablePolynomial<C>> F);
142
143
144    /**
145     * Right Groebner base using opposite ring left GB.
146     * @param modv number of module variables.
147     * @param F solvable polynomial list.
148     * @return rightGB(F) a right Groebner base of F.
149     */
150    public List<GenSolvablePolynomial<C>> rightGB(int modv, List<GenSolvablePolynomial<C>> F);
151
152
153    /**
154     * Test if left reduction matrix.
155     * @param exgb an SolvableExtendedGB container.
156     * @return true, if exgb contains a left reduction matrix, else false.
157     */
158    public boolean isLeftReductionMatrix(SolvableExtendedGB<C> exgb);
159
160
161    /**
162     * Test if left reduction matrix.
163     * @param F a solvable polynomial list.
164     * @param G a left Groebner base.
165     * @param Mf a possible left reduction matrix.
166     * @param Mg a possible left reduction matrix.
167     * @return true, if Mg and Mf are left reduction matrices, else false.
168     */
169    public boolean isLeftReductionMatrix(List<GenSolvablePolynomial<C>> F, List<GenSolvablePolynomial<C>> G,
170                    List<List<GenSolvablePolynomial<C>>> Mf, List<List<GenSolvablePolynomial<C>>> Mg);
171
172
173    /**
174     * Module left Groebner base test.
175     * @param M a module basis.
176     * @return true, if M is a left Groebner base, else false.
177     */
178    public boolean isLeftGB(ModuleList<C> M);
179
180
181    /**
182     * Left Groebner base using pairlist class.
183     * @param M a module basis.
184     * @return leftGB(M) a left Groebner base for M.
185     */
186    public ModuleList<C> leftGB(ModuleList<C> M);
187
188
189    /**
190     * Module twosided Groebner base test.
191     * @param M a module basis.
192     * @return true, if M is a twosided Groebner base, else false.
193     */
194    public boolean isTwosidedGB(ModuleList<C> M);
195
196
197    /**
198     * Twosided Groebner base using pairlist class.
199     * @param M a module basis.
200     * @return tsGB(M) a twosided Groebner base for M.
201     */
202    public ModuleList<C> twosidedGB(ModuleList<C> M);
203
204
205    /**
206     * Module right Groebner base test.
207     * @param M a module basis.
208     * @return true, if M is a right Groebner base, else false.
209     */
210    public boolean isRightGB(ModuleList<C> M);
211
212
213    /**
214     * Right Groebner base using pairlist class.
215     * @param M a module basis.
216     * @return rightGB(M) a right Groebner base for M.
217     */
218    public ModuleList<C> rightGB(ModuleList<C> M);
219
220}