001    /*
002     * $Id: GroebnerBase.java 3187 2010-06-16 22:07:38Z kredel $
003     */
004    
005    package edu.jas.gb;
006    
007    import java.util.List;
008    
009    import java.io.Serializable;
010    
011    import edu.jas.structure.RingElem;
012    
013    import edu.jas.poly.GenPolynomial;
014    
015    
016    /**
017     * Groebner Bases interface.
018     * Defines methods for Groebner bases and GB test.
019     * @param <C> coefficient type
020     * @author Heinz Kredel
021     */
022    
023    public interface GroebnerBase<C extends RingElem<C>> 
024                     extends Serializable {
025    
026    
027        /**
028         * Groebner base test.
029         * @param F polynomial list.
030         * @return true, if F is a Groebner base, else false.
031         */
032        public boolean isGB(List<GenPolynomial<C>> F);
033    
034    
035        /**
036         * Groebner base test.
037         * @param modv module variable number.
038         * @param F polynomial list.
039         * @return true, if F is a Groebner base, else false.
040         */
041        public boolean isGB(int modv, List<GenPolynomial<C>> F);
042    
043    
044        /**
045         * Groebner base using pairlist class.
046         * @param F polynomial list.
047         * @return GB(F) a Groebner base of F.
048         */
049        public List<GenPolynomial<C>> 
050               GB( List<GenPolynomial<C>> F );
051    
052    
053        /**
054         * Groebner base using pairlist class.
055         * @param modv module variable number.
056         * @param F polynomial list.
057         * @return GB(F) a Groebner base of F.
058         */
059        public List<GenPolynomial<C>> 
060               GB( int modv, 
061                   List<GenPolynomial<C>> F );
062    
063    
064        /** 
065         * Extended Groebner base using critical pair class.
066         * @param F polynomial list.
067         * @return a container for a Groebner base G of F together with back-and-forth transformations.
068         */
069        public ExtendedGB<C>  
070               extGB( List<GenPolynomial<C>> F );
071    
072    
073        /**
074         * Extended Groebner base using critical pair class.
075         * @param modv module variable number.
076         * @param F polynomial list.
077         * @return a container for a Groebner base G of F together with back-and-forth transformations.
078         */
079        public ExtendedGB<C> 
080               extGB( int modv, 
081                      List<GenPolynomial<C>> F );
082    
083    
084        /**
085         * Minimal ordered groebner basis.
086         * @param Gp a Groebner base.
087         * @return a reduced Groebner base of Gp.
088         */
089        public List<GenPolynomial<C>> 
090                   minimalGB(List<GenPolynomial<C>> Gp);
091    
092    
093        /**
094         * Test if reduction matrix.
095         * @param exgb an ExtendedGB container.
096         * @return true, if exgb contains a reduction matrix, else false.
097         */
098        public boolean
099               isReductionMatrix(ExtendedGB<C> exgb); 
100    
101    
102        /**
103         * Test if reduction matrix.
104         * @param F a polynomial list.
105         * @param G a Groebner base.
106         * @param Mf a possible reduction matrix.
107         * @param Mg a possible reduction matrix.
108         * @return true, if Mg and Mf are reduction matrices, else false.
109         */
110        public boolean
111               isReductionMatrix(List<GenPolynomial<C>> F, 
112                                 List<GenPolynomial<C>> G,
113                                 List<List<GenPolynomial<C>>> Mf,  
114                                 List<List<GenPolynomial<C>>> Mg);
115    
116    }