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