001/*
002 * $Id: GroebnerBase.java 4179 2012-09-09 10:45:58Z 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;
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 * @see edu.jas.application.GBAlgorithmBuilder
023 * @see edu.jas.gbufd.GBFactory
024 */
025
026public interface GroebnerBase<C extends RingElem<C>> 
027                 extends Serializable {
028
029
030    /**
031     * Groebner base test.
032     * @param F polynomial list.
033     * @return true, if F is a Groebner base, else false.
034     */
035    public boolean isGB(List<GenPolynomial<C>> F);
036
037
038    /**
039     * Groebner base test.
040     * @param modv module variable number.
041     * @param F polynomial list.
042     * @return true, if F is a Groebner base, else false.
043     */
044    public boolean isGB(int modv, List<GenPolynomial<C>> F);
045
046
047    /**
048     * Groebner base using pairlist class.
049     * @param F polynomial list.
050     * @return GB(F) a Groebner base of F.
051     */
052    public List<GenPolynomial<C>> 
053           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>> 
063           GB( int modv, 
064               List<GenPolynomial<C>> F );
065
066
067    /** 
068     * Extended Groebner base using critical pair class.
069     * @param F polynomial list.
070     * @return a container for a Groebner base G of F together with back-and-forth transformations.
071     */
072    public ExtendedGB<C>  
073           extGB( List<GenPolynomial<C>> F );
074
075
076    /**
077     * Extended Groebner base using critical pair class.
078     * @param modv module variable number.
079     * @param F polynomial list.
080     * @return a container for a Groebner base G of F together with back-and-forth transformations.
081     */
082    public ExtendedGB<C> 
083           extGB( int modv, 
084                  List<GenPolynomial<C>> F );
085
086
087    /**
088     * Minimal ordered groebner basis.
089     * @param Gp a Groebner base.
090     * @return a reduced Groebner base of Gp.
091     */
092    public List<GenPolynomial<C>> 
093               minimalGB(List<GenPolynomial<C>> Gp);
094
095
096    /**
097     * Test if reduction matrix.
098     * @param exgb an ExtendedGB container.
099     * @return true, if exgb contains a reduction matrix, else false.
100     */
101    public boolean
102           isReductionMatrix(ExtendedGB<C> exgb); 
103
104
105    /**
106     * Test if reduction matrix.
107     * @param F a polynomial list.
108     * @param G a Groebner base.
109     * @param Mf a possible reduction matrix.
110     * @param Mg a possible reduction matrix.
111     * @return true, if Mg and Mf are reduction matrices, else false.
112     */
113    public boolean
114           isReductionMatrix(List<GenPolynomial<C>> F, 
115                             List<GenPolynomial<C>> G,
116                             List<List<GenPolynomial<C>>> Mf,  
117                             List<List<GenPolynomial<C>>> Mg);
118
119}