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