Frobby  0.9.5
Classes | Functions
Frobby Namespace Reference

The namespace Frobby contains the public interface of Frobby. More...

Classes

class  Ideal
 
class  IdealConsumer
 This class provides a way to get monomial ideals as output from Frobby one generator at a time. More...
 
class  PolynomialConsumer
 This class provides a way to get polynomials as output from Frobby one term at a time. More...
 

Functions

bool alexanderDual (const Ideal &ideal, const mpz_t *reflectionMonomial, IdealConsumer &consumer)
 Compute the Alexander dual of ideal using the point reflectionMonomial. More...
 
bool alexanderDual (const Ideal &ideal, const Ideal &reflectionMonomial, IdealConsumer &consumer)
 
void multigradedHilbertPoincareSeries (const Ideal &ideal, PolynomialConsumer &consumer)
 Compute the multigraded Hilbert-Poincare series of ideal. More...
 
void univariateHilbertPoincareSeries (const Ideal &ideal, PolynomialConsumer &consumer)
 Compute the univariate Hilbert-Poincare series of ideal. More...
 
void irreducibleDecompositionAsIdeals (const Ideal &ideal, IdealConsumer &consumer)
 Compute the irreducible decomposition of ideal. More...
 
bool irreducibleDecompositionAsMonomials (const Ideal &ideal, IdealConsumer &consumer)
 Compute the irreducible decomposition of ideal, and encode each irreducible component as a monomial. More...
 
void maximalStandardMonomials (const Ideal &ideal, IdealConsumer &consumer)
 Compute the maximal standard monomials of ideal. More...
 
bool solveStandardMonomialProgram (const Ideal &ideal, const mpz_t *l, IdealConsumer &consumer)
 Solve the optimization program. More...
 
void codimension (const Ideal &ideal, mpz_t codim)
 Compute the codimension of a monomial ideal. More...
 
void dimension (const Ideal &ideal, mpz_t dim)
 Compute the Krull dimension of a monomial ideal. More...
 
void primaryDecomposition (const Ideal &ideal, IdealConsumer &consumer)
 Compute the canonical primary decomposition of a monomial ideal. More...
 
void associatedPrimes (const Ideal &ideal, IdealConsumer &consumer)
 Compute the associated primes of the ideal. More...
 

Detailed Description

The namespace Frobby contains the public interface of Frobby.

Function Documentation

◆ alexanderDual() [1/2]

bool Frobby::alexanderDual ( const Ideal ideal,
const Ideal reflectionMonomial,
IdealConsumer consumer 
)
Todo:
doc.

and test

Definition at line 279 of file frobby.cpp.

◆ alexanderDual() [2/2]

bool Frobby::alexanderDual ( const Ideal ideal,
const mpz_t *  reflectionMonomial,
IdealConsumer consumer 
)

Compute the Alexander dual of ideal using the point reflectionMonomial.

The minimal generators of the dual are provided to the consumer in some arbitrary order. If reflectionMonomial is null (i.e. equal to 0), then the lcm of the minimal generators of ideal are used. Note that this lcm does not include any non-minimal generators that may have been added to ideal. If reflectionMonomial is not null, then it must be divisible by this lcm. This function returns true if and only if reflectionMonomial is valid.

The parameter reflectionMonomial must be either null or an array of size at least the number of variables of ideal. Frobby does not alter or retain a reference to the passed-in reflectionMonomial or its elements. This is also true when the consumer gets called, so it is allowed for the consumer to change or delete reflectionMonomial. The overload taking an Ideal for reflectionMonomial simply uses the generator of that ideal, and it is required that there be exactly one generator.

Todo:
don't use exceptions to propagate false internally.

Definition at line 246 of file frobby.cpp.

◆ associatedPrimes()

void Frobby::associatedPrimes ( const Ideal ideal,
IdealConsumer consumer 
)

Compute the associated primes of the ideal.

The prime ideals are passed to the consumer in arbitrary order.

Definition at line 455 of file frobby.cpp.

◆ codimension()

void Frobby::codimension ( const Ideal ideal,
mpz_t  codim 
)

Compute the codimension of a monomial ideal.

We define the codimension by the property that the sum of the Krull dimension and codimension is the number of variables in the ambient polynomial ring of the ideal. Thus the codimension of the ideal that is generated by the identity is the number of variables plus one.

The codimension of a monomial ideal is the minimal size of support among the irreducible components of that ideal.

Parameters
codimThis mpz_t must be initialized before calling this function. It will be set to the codimension.

Definition at line 441 of file frobby.cpp.

◆ dimension()

void Frobby::dimension ( const Ideal ideal,
mpz_t  dim 
)

Compute the Krull dimension of a monomial ideal.

Note that by convention the ideal generated by the identity has dimension -1. The sum of the dimension and codimension is the number of variables in the ambient polynomial ring of the ideal.

Parameters
codimThis mpz_t must be initialized before calling this function. It will be set to the dimension.

Definition at line 447 of file frobby.cpp.

◆ irreducibleDecompositionAsIdeals()

void Frobby::irreducibleDecompositionAsIdeals ( const Ideal ideal,
IdealConsumer consumer 
)

Compute the irreducible decomposition of ideal.

Every monomial ideal can be written uniquely as the irredundant intersection of irreducible monomial ideals, and each intersectand in this intersection is called an irreducible component. A monomial ideal is irreducible if and only if each minimal generator is a pure power, i.e. has the form x^e for a variable x and an integer exponent e.

The output is each of the irreducible components. These are provided to the consumer in some arbitrary order. The ideal generated by the identity has no irreducible components, since the intersection of no ideals is the entire ring, i.e. the ideal generated by the identity. The output for the zero ideal is a single ideal which is the zero ideal itself, which is also an irreducible ideal since it is generated by the empty set, which is trivially a set of pure powers.

Definition at line 371 of file frobby.cpp.

◆ irreducibleDecompositionAsMonomials()

bool Frobby::irreducibleDecompositionAsMonomials ( const Ideal ideal,
IdealConsumer consumer 
)

Compute the irreducible decomposition of ideal, and encode each irreducible component as a monomial.

This is done by multiplyng the minimal generators of the irreducible ideal, which defines a bijection between irreducible monomial ideals and monomials.

Note that the ideal generated by the identity has no irreducible components, so the output is the zero ideal, since that ideal has no generators.

The zero ideal as input presents a problem, since no monomial corresponds to the zero ideal, which would be the correct output. If ideal is the zero ideal, then there is no output (i.e. idealBegin does not get called on the consumer), and the return value is false. Otherwise the return value is true.

Todo:
This can be improved to have no special cases, since the zero ideal does correpond to the identity, since the product of the zero ideal's generators is the empty product, which is the identity. At the same time we don't need the identity otherwise, since the whole ring is always redundant as an intersectand.

Definition at line 381 of file frobby.cpp.

◆ maximalStandardMonomials()

void Frobby::maximalStandardMonomials ( const Ideal ideal,
IdealConsumer consumer 
)

Compute the maximal standard monomials of ideal.

A standard monomial of an ideal is a monomial that does not lie in that ideal. A maximal standard monomial is a standard monomial m such that mx is not standard for each variable x in the polynomial ring within which the ideal resides.

Note that many ideals have no maximal standard monomials. E.g. every monomial is a standard monomial of the zero ideal, so none of them are maximal. In contrast, the ideal generated by the identity has no standard monomials, maximal or otherwise.

The maximal standard monomials are output to the consumer as the generators of a single ideal. If ideal has no maximal standard monomials, then the output is the zero ideal.

Definition at line 408 of file frobby.cpp.

◆ multigradedHilbertPoincareSeries()

void Frobby::multigradedHilbertPoincareSeries ( const Ideal ideal,
PolynomialConsumer consumer 
)

Compute the multigraded Hilbert-Poincare series of ideal.

More precisely, compute the numerator polynomial of the series expressed as a rational function with (1-x1)...(1-xn) in the denominator where x1,...,xn are the variables in the polynomial ring. The multigraded Hilbert-Poincare series of a monomial ideal is the possibly infinite sum of all monomials not in that ideal.

Definition at line 299 of file frobby.cpp.

◆ primaryDecomposition()

void Frobby::primaryDecomposition ( const Ideal ideal,
IdealConsumer consumer 
)

Compute the canonical primary decomposition of a monomial ideal.

This is defined as the primary decomposition where each primary component is the intersection of the irreducible components with that same support. I.e. the set of irreducible components of the canonical primary components are precisely the irreducible components of the ideal itself. So each canonical primary component has as few irreducible components as possible. This is not true of just any primary decomposition.

Each canonical primary component is provided to the consumer as a separate ideal in an arbitrary order.

Definition at line 396 of file frobby.cpp.

◆ solveStandardMonomialProgram()

bool Frobby::solveStandardMonomialProgram ( const Ideal ideal,
const mpz_t *  l,
IdealConsumer consumer 
)

Solve the optimization program.

maximize l*d subject to d being the exponent vector of a maximal standard monomial of ideal

If ideal has any maximal standard monomials, then the return value is true, and an ideal with a single generator representing an optimal solution to the optimization program is written to the consumer. If ideal has no maximal standard monomials, then the return value is false, and nothing is written to the consumer.

l must be an array of at least ideal.getVarCount() entries.

The algorithm used is significantly faster than computing all the maximal standard monomials and seeing which exponent vector yields a maximum value.

Definition at line 420 of file frobby.cpp.

◆ univariateHilbertPoincareSeries()

void Frobby::univariateHilbertPoincareSeries ( const Ideal ideal,
PolynomialConsumer consumer 
)

Compute the univariate Hilbert-Poincare series of ideal.

The univariate series can be obtained from the multigraded one by substituting the same variable for each other variable. The univariate series thus lives in a ring with one variable only.

Definition at line 311 of file frobby.cpp.