public final class GroebnerBases extends Object
Modifier and Type | Class and Description |
---|---|
static class |
GroebnerBases.HilbertSeries
Hilbert-Poincare series HPS(t) = P(t) / (1 - t)^m
|
static interface |
GroebnerBases.MinimizationStrategy
Strategy used to reduce and minimize basis in the intermediate steps of Buchberger algorithm
|
static class |
GroebnerBases.SyzygyPair<Term extends AMonomial<Term>,Poly extends cc.redberry.rings.poly.multivar.MonomialSetView<Term>>
Abstract critical pair: used with different Poly type for Buchberger and F4 algorithms
|
Modifier and Type | Field and Description |
---|---|
static GroebnerBases.MinimizationStrategy |
NO_MINIMIZATION
no any minimization at intermediate steps, just keep all track of generators as is
|
Modifier and Type | Method and Description |
---|---|
static <Term extends AMonomial<Term>,Poly extends AMultivariatePolynomial<Term,Poly>> |
BuchbergerGB(List<Poly> generators,
Comparator<DegreeVector> monomialOrder)
Computes minimized and reduced Groebner basis of a given ideal via Buchberger algorithm.
|
static <Term extends AMonomial<Term>,Poly extends AMultivariatePolynomial<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.
|
static <Term extends AMonomial<Term>,Poly extends AMultivariatePolynomial<Term,Poly>> |
ConvertBasis(List<Poly> generators,
Comparator<DegreeVector> desiredOrder)
Converts basis into a basis for desired monomial order
|
static Comparator<GroebnerBases.SyzygyPair> |
defaultSelectionStrategy(Comparator<DegreeVector> monomialOrder)
Default selection strategy (with or without sugar)
|
static <Term extends AMonomial<Term>,Poly extends AMultivariatePolynomial<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.
|
static <Term extends AMonomial<Term>,Poly extends AMultivariatePolynomial<Term,Poly>> |
GroebnerBasis(List<Poly> generators,
Comparator<DegreeVector> monomialOrder)
Computes Groebner basis (minimized and reduced) of a given ideal represented by a list of generators.
|
static <Term extends AMonomial<Term>,Poly extends AMultivariatePolynomial<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.
|
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.
|
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.
|
static <Term extends AMonomial<Term>,Poly extends AMultivariatePolynomial<Term,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
|
static <Term extends AMonomial<Term>,Poly extends AMultivariatePolynomial<Term,Poly>> |
GroebnerBasisWithOptimizedGradedOrder(List<Poly> ideal)
computes Groebner basis in GREVLEX with shuffled variables
|
static <Term extends AMonomial<Term>,Poly extends AMultivariatePolynomial<Term,Poly>> |
GroebnerBasisWithOptimizedGradedOrder(List<Poly> ideal,
cc.redberry.rings.poly.multivar.GroebnerBases.GroebnerAlgorithm<Term,Poly> baseAlgorithm)
computes Groebner basis in GREVLEX with shuffled variables
|
static <Term extends AMonomial<Term>,Poly extends AMultivariatePolynomial<Term,Poly>> |
HilbertConvertBasis(List<Poly> groebnerBasis,
Comparator<DegreeVector> desiredOrdering)
Converts Groebner basis to a given monomial order using Hilbert-driven algorithm
|
static <Term extends AMonomial<Term>,Poly extends AMultivariatePolynomial<Term,Poly>> |
HilbertGB(List<Poly> generators,
Comparator<DegreeVector> monomialOrder)
Hilbert-driven algorithm for Groebner basis computation
|
static <Term extends AMonomial<Term>,Poly extends AMultivariatePolynomial<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.
|
static <Term extends AMonomial<Term>,Poly extends AMultivariatePolynomial<Term,Poly>> |
HilbertGB(List<Poly> generators,
Comparator<DegreeVector> monomialOrder,
GroebnerBases.HilbertSeries hilbertSeries)
Hilbert-driven algorithm for Groebner basis computation
|
static GroebnerBases.HilbertSeries |
HilbertSeries(List<DegreeVector> ideal)
Computes Hilbert-Poincare series of monomial ideal
|
static GroebnerBases.HilbertSeries |
HilbertSeriesOfLeadingTermsSet(List<? extends AMultivariatePolynomial> ideal)
Computes Hilbert-Poincare series of specified ideal given by its Groebner basis
|
static <Term extends AMonomial<Term>,Poly extends AMultivariatePolynomial<Term,Poly>> |
isGroebnerBasis(List<Poly> ideal,
List<Poly> generators,
Comparator<DegreeVector> monomialOrder)
Check whether specified generators form Groebner basis of given ideal
|
static boolean |
isHomogeneousIdeal(List<? extends AMultivariatePolynomial> ideal)
Check whether ideal is homogeneous
|
static boolean |
isMonomialIdeal(List<? extends AMultivariatePolynomial> ideal)
Check whether all specified generators are monomials
|
static List<DegreeVector> |
leadTermsSet(List<? extends AMultivariatePolynomial> ideal)
List of lead terms of generators
|
static <Term extends AMonomial<Term>,Poly extends AMultivariatePolynomial<Term,Poly>> |
minimizeGroebnerBases(List<Poly> basis)
Minimizes Groebner basis.
|
static cc.redberry.rings.poly.multivar.GroebnerBases.GBResult<Monomial<BigInteger>,MultivariatePolynomial<BigInteger>> |
ModularGB(List<MultivariatePolynomial<BigInteger>> ideal,
Comparator<DegreeVector> monomialOrder)
Modular Groebner basis algorithm.
|
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.
|
static cc.redberry.rings.poly.multivar.GroebnerBases.GBResult<Monomial<BigInteger>,MultivariatePolynomial<BigInteger>> |
ModularGB(List<MultivariatePolynomial<BigInteger>> ideal,
Comparator<DegreeVector> monomialOrder,
GroebnerBases.HilbertSeries hilbertSeries)
Modular Groebner basis algorithm.
|
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.
|
static Comparator<GroebnerBases.SyzygyPair> |
normalSelectionStrategy(Comparator<DegreeVector> monomialOrder)
Normal selection strategy: chose syzygy with the less lcm(fi.lt(), fj.lt()) with respect to monomialOrder
|
static <Term extends AMonomial<Term>,Poly extends AMultivariatePolynomial<Term,Poly>> |
optimalOrder(List<Poly> ideal)
Deduce the optimal order for GB algorithms
|
static <Term extends AMonomial<Term>,Poly extends AMultivariatePolynomial<Term,Poly>> |
removeRedundant(List<Poly> basis)
Computes reduced Groebner basis
|
static <Term extends AMonomial<Term>,Poly extends AMultivariatePolynomial<Term,Poly>> |
solveGB(List<Poly> generators,
List<Collection<DegreeVector>> gbSkeleton,
Comparator<DegreeVector> monomialOrder)
Sparse Groebner basis via "linear lifting".
|
static <Term extends AMonomial<Term>,Poly extends AMultivariatePolynomial<Term,Poly>> |
syzygy(GroebnerBases.SyzygyPair<Term,Poly> sPair)
Computes syzygy of given polynomials
|
static <Term extends AMonomial<Term>,Poly extends AMultivariatePolynomial<Term,Poly>> |
syzygy(Poly a,
Poly b)
Computes syzygy of given polynomials
|
static Comparator<GroebnerBases.SyzygyPair> |
withSugar(Comparator<GroebnerBases.SyzygyPair> initial)
Add sugar to selection strategy: pick syzygy with less sugar first, break tie with the initial strategy
|
public static GroebnerBases.MinimizationStrategy NO_MINIMIZATION
public static <Term extends AMonomial<Term>,Poly extends AMultivariatePolynomial<Term,Poly>> List<Poly> GroebnerBasis(List<Poly> generators, Comparator<DegreeVector> monomialOrder)
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.
generators
- generators of the idealmonomialOrder
- monomial orderpublic 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)
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.
generators
- generators of the idealmonomialOrder
- monomial orderhilbertSeries
- optional Hilbert-Poincare series (may be null)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)
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.
generators
- generators of the idealmonomialOrder
- monomial orderhilbertSeries
- optional Hilbert-Poincare series (may be null)public static List<MultivariatePolynomial<Rational<BigInteger>>> GroebnerBasisInQ(List<MultivariatePolynomial<Rational<BigInteger>>> generators, Comparator<DegreeVector> monomialOrder, GroebnerBases.HilbertSeries hilbertSeries, boolean tryModular)
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.
generators
- generators of the idealmonomialOrder
- monomial orderhilbertSeries
- optional Hilbert-Poincare series (may be null)public static <Term extends AMonomial<Term>,Poly extends AMultivariatePolynomial<Term,Poly>> List<Poly> ConvertBasis(List<Poly> generators, Comparator<DegreeVector> desiredOrder)
public static <Term extends AMonomial<Term>,Poly extends AMultivariatePolynomial<Term,Poly>> void minimizeGroebnerBases(List<Poly> basis)
public static <Term extends AMonomial<Term>,Poly extends AMultivariatePolynomial<Term,Poly>> void removeRedundant(List<Poly> basis)
public static <Term extends AMonomial<Term>,Poly extends AMultivariatePolynomial<Term,Poly>> Poly syzygy(Poly a, Poly b)
public static <Term extends AMonomial<Term>,Poly extends AMultivariatePolynomial<Term,Poly>> Poly syzygy(GroebnerBases.SyzygyPair<Term,Poly> sPair)
public static <Term extends AMonomial<Term>,Poly extends AMultivariatePolynomial<Term,Poly>> boolean isGroebnerBasis(List<Poly> ideal, List<Poly> generators, Comparator<DegreeVector> monomialOrder)
public static Comparator<GroebnerBases.SyzygyPair> normalSelectionStrategy(Comparator<DegreeVector> monomialOrder)
public static Comparator<GroebnerBases.SyzygyPair> withSugar(Comparator<GroebnerBases.SyzygyPair> initial)
public static Comparator<GroebnerBases.SyzygyPair> defaultSelectionStrategy(Comparator<DegreeVector> monomialOrder)
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)
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)
generators
- generators of the idealmonomialOrder
- monomial orderstrategy
- selection strategypublic 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)
generators
- generators of homogeneous idealmonomialOrder
- monomial orderhilbertSeries
- Hilbert-Poincare seriespublic 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)
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)
generators
- generators of homogeneous idealmonomialOrder
- monomial orderpublic 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)
generators
- generators of homogeneous idealmonomialOrder
- monomial orderbaseAlgorithm
- algorithm used to compute basis for some "simple" orderpublic static <Term extends AMonomial<Term>,Poly extends AMultivariatePolynomial<Term,Poly>> List<Poly> GroebnerBasisWithOptimizedGradedOrder(List<Poly> ideal)
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)
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)
public static <Term extends AMonomial<Term>,Poly extends AMultivariatePolynomial<Term,Poly>> Comparator<DegreeVector> optimalOrder(List<Poly> ideal)
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)
generators
- generators of the idealmonomialOrder
- monomial order to usepublic static boolean isMonomialIdeal(List<? extends AMultivariatePolynomial> ideal)
public static boolean isHomogeneousIdeal(List<? extends AMultivariatePolynomial> ideal)
public static List<DegreeVector> leadTermsSet(List<? extends AMultivariatePolynomial> ideal)
public static GroebnerBases.HilbertSeries HilbertSeriesOfLeadingTermsSet(List<? extends AMultivariatePolynomial> ideal)
public static GroebnerBases.HilbertSeries HilbertSeries(List<DegreeVector> ideal)
public static cc.redberry.rings.poly.multivar.GroebnerBases.GBResult<Monomial<BigInteger>,MultivariatePolynomial<BigInteger>> ModularGB(List<MultivariatePolynomial<BigInteger>> ideal, Comparator<DegreeVector> monomialOrder)
solveGB(List, List, Comparator)
).public static cc.redberry.rings.poly.multivar.GroebnerBases.GBResult<Monomial<BigInteger>,MultivariatePolynomial<BigInteger>> ModularGB(List<MultivariatePolynomial<BigInteger>> ideal, Comparator<DegreeVector> monomialOrder, GroebnerBases.HilbertSeries hilbertSeries)
solveGB(List, List, Comparator)
).hilbertSeries
- optional Hilbert-Poincare series of idealpublic 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)
ideal
- ideal generatorsmonomialOrder
- monomial orderhilbertSeries
- optional Hilbert-Poincare series of idealtrySparse
- whether to try sparse reconstruction in particularly small resulting bases via solveGB(List, List, Comparator)
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)
ideal
- ideal generatorsmonomialOrder
- monomial ordermodularAlgorithm
- algorithm used to find Groebner basis mod primedefaultAlgorithm
- algorithm used to find Groebner basis if modular algorithm failedfirstPrime
- prime number to start modulo iterationshilbertSeries
- optional Hilbert-Poincare series of idealtrySparse
- whether to try sparse reconstruction in particularly small resulting bases via solveGB(List, List, Comparator)
public static <Term extends AMonomial<Term>,Poly extends AMultivariatePolynomial<Term,Poly>> List<Poly> solveGB(List<Poly> generators, List<Collection<DegreeVector>> gbSkeleton, Comparator<DegreeVector> monomialOrder)
generators
- generatorsgbSkeleton
- skeleton of true reduced Groebner basismonomialOrder
- monomial orderCopyright © 2018. All rights reserved.