001/*
002 * $Id$
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>> GB( List<GenPolynomial<C>> F );
054
055
056    /**
057     * Groebner base using pairlist class.
058     * @param modv module variable number.
059     * @param F polynomial list.
060     * @return GB(F) a Groebner base of F.
061     */
062    public List<GenPolynomial<C>> GB( int modv, List<GenPolynomial<C>> F );
063
064
065    /**
066     * isGB.
067     * @param M a module basis.
068     * @return true, if M is a Groebner base, else false.
069     */
070    public boolean isGB(ModuleList<C> M);
071
072
073    /**
074     * GB.
075     * @param M a module basis.
076     * @return GB(M), a Groebner base of M.
077     */
078    public ModuleList<C> GB(ModuleList<C> M);
079
080
081    /** 
082     * Extended Groebner base using critical pair class.
083     * @param F polynomial list.
084     * @return a container for a Groebner base G of F together with back-and-forth transformations.
085     */
086    public ExtendedGB<C> extGB(List<GenPolynomial<C>> F);
087
088
089    /**
090     * Extended Groebner base using critical pair class.
091     * @param modv module variable number.
092     * @param F polynomial list.
093     * @return a container for a Groebner base G of F together with back-and-forth transformations.
094     */
095    public ExtendedGB<C> extGB(int modv, List<GenPolynomial<C>> F);
096
097
098    /**
099     * Minimal ordered groebner basis.
100     * @param Gp a Groebner base.
101     * @return a reduced Groebner base of Gp.
102     */
103    public List<GenPolynomial<C>> minimalGB(List<GenPolynomial<C>> Gp);
104
105
106    /**
107     * Test if reduction matrix.
108     * @param exgb an ExtendedGB container.
109     * @return true, if exgb contains a reduction matrix, else false.
110     */
111    public boolean isReductionMatrix(ExtendedGB<C> exgb);
112
113
114    /**
115     * Test if reduction matrix.
116     * @param F a polynomial list.
117     * @param G a Groebner base.
118     * @param Mf a possible reduction matrix.
119     * @param Mg a possible reduction matrix.
120     * @return true, if Mg and Mf are reduction matrices, else false.
121     */
122    public boolean isReductionMatrix(List<GenPolynomial<C>> F, List<GenPolynomial<C>> G,
123                             List<List<GenPolynomial<C>>> Mf, List<List<GenPolynomial<C>>> Mg);
124
125}