Class GroebnerBases


  • public final class GroebnerBases
    extends Object
    Groebner bases.
    Since:
    2.3
    • Method Detail

      • GroebnerBasis

        public static <Term extends AMonomial<Term>,​Poly extends AMultivariatePolynomial<Term,​Poly>> List<Poly> GroebnerBasis​(List<Poly> generators,
                                                                                                                                          Comparator<DegreeVector> monomialOrder)
        Computes Groebner basis (minimized and reduced) of a given ideal represented by a list of generators.

        The implementation switches between F4 algorithm (for graded orders) and Hilbert-driven Buchberger algorithm for hard orders like LEX. For polynomials over Q modular methods are also used in some cases.

        Parameters:
        generators - generators of the ideal
        monomialOrder - monomial order
        Returns:
        Groebner basis
      • GroebnerBasisInGF

        public static <Term extends AMonomial<Term>,​Poly extends AMultivariatePolynomial<Term,​Poly>> cc.redberry.rings.poly.multivar.GroebnerBases.GBResult<Term,​Poly> GroebnerBasisInGF​(List<Poly> generators,
                                                                                                                                                                                                           Comparator<DegreeVector> monomialOrder,
                                                                                                                                                                                                           GroebnerBases.HilbertSeries hilbertSeries)
        Computes Groebner basis (minimized and reduced) of a given ideal over finite filed represented by a list of generators.

        The implementation switches between F4 algorithm (for graded orders) and Hilbert-driven Buchberger algorithm for hard orders like LEX.

        If a non null value for Hilbert-Poincare series hilbertSeries is passed, it will be used to speed up computations with some Hilbert-driven criteria.

        Parameters:
        generators - generators of the ideal
        monomialOrder - monomial order
        hilbertSeries - optional Hilbert-Poincare series (may be null)
        Returns:
        Groebner basis
      • GroebnerBasisInZ

        public static cc.redberry.rings.poly.multivar.GroebnerBases.GBResult<Monomial<BigInteger>,​MultivariatePolynomial<BigInteger>> GroebnerBasisInZ​(List<MultivariatePolynomial<BigInteger>> generators,
                                                                                                                                                             Comparator<DegreeVector> monomialOrder,
                                                                                                                                                             GroebnerBases.HilbertSeries hilbertSeries,
                                                                                                                                                             boolean tryModular)
        Computes Groebner basis (minimized and reduced) of a given ideal over Z represented by a list of generators.

        The implementation switches between F4 algorithm (for graded orders) and Hilbert-driven Buchberger algorithm for hard orders like LEX. For polynomials in less or equals than three variables modular algorithm is used.

        If a non null value for Hilbert-Poincare series hilbertSeries is passed, it will be used to speed up computations with some Hilbert-driven criteria.

        Parameters:
        generators - generators of the ideal
        monomialOrder - monomial order
        hilbertSeries - optional Hilbert-Poincare series (may be null)
        Returns:
        Groebner basis
      • GroebnerBasisInQ

        public static List<MultivariatePolynomial<Rational<BigInteger>>> GroebnerBasisInQ​(List<MultivariatePolynomial<Rational<BigInteger>>> generators,
                                                                                          Comparator<DegreeVector> monomialOrder,
                                                                                          GroebnerBases.HilbertSeries hilbertSeries,
                                                                                          boolean tryModular)
        Computes Groebner basis (minimized and reduced) of a given ideal over Q represented by a list of generators.

        The implementation switches between F4 algorithm (for graded orders) and Hilbert-driven Buchberger algorithm for hard orders like LEX. For polynomials in less or equals than three variables modular algorithm is used.

        If a non null value for Hilbert-Poincare series hilbertSeries is passed, it will be used to speed up computations with some Hilbert-driven criteria.

        Parameters:
        generators - generators of the ideal
        monomialOrder - monomial order
        hilbertSeries - optional Hilbert-Poincare series (may be null)
        Returns:
        Groebner basis
      • minimizeGroebnerBases

        public static <Term extends AMonomial<Term>,​Poly extends AMultivariatePolynomial<Term,​Poly>> void minimizeGroebnerBases​(List<Poly> basis)
        Minimizes Groebner basis. The input should be a Groebner basis
      • removeRedundant

        public static <Term extends AMonomial<Term>,​Poly extends AMultivariatePolynomial<Term,​Poly>> void removeRedundant​(List<Poly> basis)
        Computes reduced Groebner basis
      • syzygy

        public static <Term extends AMonomial<Term>,​Poly extends AMultivariatePolynomial<Term,​Poly>> Poly syzygy​(Poly a,
                                                                                                                             Poly b)
        Computes syzygy of given polynomials
      • BuchbergerGB

        public static <Term extends AMonomial<Term>,​Poly extends AMultivariatePolynomial<Term,​Poly>> cc.redberry.rings.poly.multivar.GroebnerBases.GBResult<Term,​Poly> BuchbergerGB​(List<Poly> generators,
                                                                                                                                                                                                      Comparator<DegreeVector> monomialOrder)
        Computes minimized and reduced Groebner basis of a given ideal via Buchberger algorithm. It uses normal strategy for graded orders and sugar strategy for lexicographic.
      • BuchbergerGB

        public static <Term extends AMonomial<Term>,​Poly extends AMultivariatePolynomial<Term,​Poly>> cc.redberry.rings.poly.multivar.GroebnerBases.GBResult<Term,​Poly> BuchbergerGB​(List<Poly> generators,
                                                                                                                                                                                                      Comparator<DegreeVector> monomialOrder,
                                                                                                                                                                                                      Comparator<GroebnerBases.SyzygyPair> strategy)
        Computes minimized and reduced Groebner basis of a given ideal via Buchberger algorithm.
        Parameters:
        generators - generators of the ideal
        monomialOrder - monomial order
        strategy - selection strategy
      • HilbertGB

        public static <Term extends AMonomial<Term>,​Poly extends AMultivariatePolynomial<Term,​Poly>> cc.redberry.rings.poly.multivar.GroebnerBases.GBResult<Term,​Poly> HilbertGB​(List<Poly> generators,
                                                                                                                                                                                                   Comparator<DegreeVector> monomialOrder,
                                                                                                                                                                                                   GroebnerBases.HilbertSeries hilbertSeries)
        Hilbert-driven algorithm for Groebner basis computation
        Parameters:
        generators - generators of homogeneous ideal
        monomialOrder - monomial order
        hilbertSeries - Hilbert-Poincare series
      • HilbertConvertBasis

        public static <Term extends AMonomial<Term>,​Poly extends AMultivariatePolynomial<Term,​Poly>> cc.redberry.rings.poly.multivar.GroebnerBases.GBResult<Term,​Poly> HilbertConvertBasis​(List<Poly> groebnerBasis,
                                                                                                                                                                                                             Comparator<DegreeVector> desiredOrdering)
        Converts Groebner basis to a given monomial order using Hilbert-driven algorithm
      • HilbertGB

        public static <Term extends AMonomial<Term>,​Poly extends AMultivariatePolynomial<Term,​Poly>> cc.redberry.rings.poly.multivar.GroebnerBases.GBResult<Term,​Poly> HilbertGB​(List<Poly> generators,
                                                                                                                                                                                                   Comparator<DegreeVector> monomialOrder)
        Hilbert-driven algorithm for Groebner basis computation
        Parameters:
        generators - generators of homogeneous ideal
        monomialOrder - monomial order
      • HilbertGB

        public static <Term extends AMonomial<Term>,​Poly extends AMultivariatePolynomial<Term,​Poly>> cc.redberry.rings.poly.multivar.GroebnerBases.GBResult<Term,​Poly> HilbertGB​(List<Poly> generators,
                                                                                                                                                                                                   Comparator<DegreeVector> monomialOrder,
                                                                                                                                                                                                   cc.redberry.rings.poly.multivar.GroebnerBases.GroebnerAlgorithm<Term,​Poly> baseAlgorithm)
        Hilbert-driven algorithm for Groebner basis computation. It computes first Groebner basis for some easy monomial order to find Hilbert-Poincare series of the ideal and then runs Hilbert-driven algorithm to obtain the result.
        Parameters:
        generators - generators of homogeneous ideal
        monomialOrder - monomial order
        baseAlgorithm - algorithm used to compute basis for some "simple" order
      • GroebnerBasisWithOptimizedGradedOrder

        public static <Term extends AMonomial<Term>,​Poly extends AMultivariatePolynomial<Term,​Poly>> List<Poly> GroebnerBasisWithOptimizedGradedOrder​(List<Poly> ideal)
        computes Groebner basis in GREVLEX with shuffled variables
      • GroebnerBasisWithOptimizedGradedOrder

        public static <Term extends AMonomial<Term>,​Poly extends AMultivariatePolynomial<Term,​Poly>> List<Poly> GroebnerBasisWithOptimizedGradedOrder​(List<Poly> ideal,
                                                                                                                                                                  cc.redberry.rings.poly.multivar.GroebnerBases.GroebnerAlgorithm<Term,​Poly> baseAlgorithm)
        computes Groebner basis in GREVLEX with shuffled variables
      • GroebnerBasisRegardingGrevLexWithPermutation

        public static <Term extends AMonomial<Term>,​Poly extends AMultivariatePolynomial<Term,​Poly>> List<Poly> GroebnerBasisRegardingGrevLexWithPermutation​(List<Poly> ideal,
                                                                                                                                                                         cc.redberry.rings.poly.multivar.GroebnerBases.GroebnerAlgorithm<Term,​Poly> baseAlgorithm,
                                                                                                                                                                         MonomialOrder.GrevLexWithPermutation order)
        computes Groebner basis in GREVLEX with shuffled variables
      • F4GB

        public static <Term extends AMonomial<Term>,​Poly extends AMultivariatePolynomial<Term,​Poly>> cc.redberry.rings.poly.multivar.GroebnerBases.GBResult<Term,​Poly> F4GB​(List<Poly> generators,
                                                                                                                                                                                              Comparator<DegreeVector> monomialOrder)
        Computes minimized and reduced Groebner basis of a given ideal via Faugère's F4 F4 algorithm.
        Parameters:
        generators - generators of the ideal
        monomialOrder - monomial order to use
      • isMonomialIdeal

        public static boolean isMonomialIdeal​(List<? extends AMultivariatePolynomial> ideal)
        Check whether all specified generators are monomials
      • isHomogeneousIdeal

        public static boolean isHomogeneousIdeal​(List<? extends AMultivariatePolynomial> ideal)
        Check whether ideal is homogeneous
      • ModularGB

        public static cc.redberry.rings.poly.multivar.GroebnerBases.GBResult<Monomial<BigInteger>,​MultivariatePolynomial<BigInteger>> ModularGB​(List<MultivariatePolynomial<BigInteger>> ideal,
                                                                                                                                                      Comparator<DegreeVector> monomialOrder,
                                                                                                                                                      GroebnerBases.HilbertSeries hilbertSeries,
                                                                                                                                                      boolean trySparse)
        Modular Groebner basis algorithm. The algorithm switches between modular Chinese remainder techniques as described in Elizabeth A. Arnold, "Modular algorithms for computing Groebner bases", Journal of Symbolic Computation 35 (2003) 403–419 and sparse Groebner basis reconstruction with linear algebra.
        Parameters:
        ideal - ideal generators
        monomialOrder - monomial order
        hilbertSeries - optional Hilbert-Poincare series of ideal
        trySparse - whether to try sparse reconstruction in particularly small resulting bases via solveGB(List, List, Comparator)
      • ModularGB

        public static cc.redberry.rings.poly.multivar.GroebnerBases.GBResult<Monomial<BigInteger>,​MultivariatePolynomial<BigInteger>> ModularGB​(List<MultivariatePolynomial<BigInteger>> ideal,
                                                                                                                                                      Comparator<DegreeVector> monomialOrder,
                                                                                                                                                      cc.redberry.rings.poly.multivar.GroebnerBases.GroebnerAlgorithm modularAlgorithm,
                                                                                                                                                      cc.redberry.rings.poly.multivar.GroebnerBases.GroebnerAlgorithm defaultAlgorithm,
                                                                                                                                                      BigInteger firstPrime,
                                                                                                                                                      GroebnerBases.HilbertSeries hilbertSeries,
                                                                                                                                                      boolean trySparse)
        Modular Groebner basis algorithm. The algorithm switches between modular Chinese remainder techniques as described in Elizabeth A. Arnold, "Modular algorithms for computing Groebner bases", Journal of Symbolic Computation 35 (2003) 403–419 and sparse Groebner basis reconstruction with linear algebra.
        Parameters:
        ideal - ideal generators
        monomialOrder - monomial order
        modularAlgorithm - algorithm used to find Groebner basis mod prime
        defaultAlgorithm - algorithm used to find Groebner basis if modular algorithm failed
        firstPrime - prime number to start modulo iterations
        hilbertSeries - optional Hilbert-Poincare series of ideal
        trySparse - whether to try sparse reconstruction in particularly small resulting bases via solveGB(List, List, Comparator)
      • solveGB

        public static <Term extends AMonomial<Term>,​Poly extends AMultivariatePolynomial<Term,​Poly>> List<Poly> solveGB​(List<Poly> generators,
                                                                                                                                    List<Collection<DegreeVector>> gbSkeleton,
                                                                                                                                    Comparator<DegreeVector> monomialOrder)
        Sparse Groebner basis via "linear lifting". Given a generating set and a skeleton of Groebner basis (may be computed via mod prime etc.), it build a system of equations and finds a true Groebner basis, or return null if the system was not solvable.
        Parameters:
        generators - generators
        gbSkeleton - skeleton of true reduced Groebner basis
        monomialOrder - monomial order