Gröbner basis project
Codebase for research into Gröbner basis computation
Commutative Algebra

Classes useful for computational Commutative Algebra. More...

Functions

Monomial choose_hilbert_pivot (const list< Monomial > &T)
 chooses a pivot for the Bigatti algorithm More...
 
Dense_Univariate_Integer_Polynomialhilbert_numerator_bigatti (const list< Monomial > &T, const WT_TYPE *grading=nullptr)
 the Bigatti algorithm to compute the Hilbert numerator [2] More...
 
Dense_Univariate_Rational_Polynomialhilbert_polynomial (NVAR_TYPE n, unsigned int dim, const list< Monomial > T, Dense_Univariate_Integer_Polynomial *hn=nullptr, Dense_Univariate_Integer_Polynomial *hn2=nullptr)
 computes the Hilbert polynomial for an ideal More...
 
Dense_Univariate_Integer_Polynomialhilbert_second_numerator (NVAR_TYPE n, Dense_Univariate_Integer_Polynomial *hn, const WT_TYPE *grading=nullptr)
 computes the second Hilbert numerator (after reduction by \((1-t)^{\deg I}\)) More...
 
unsigned ideal_dimension (NVAR_TYPE nvars, const Dense_Univariate_Integer_Polynomial *first_numerator, const Dense_Univariate_Integer_Polynomial *second_numerator)
 computes the dimension of the ideal by subtracting the Hilbert numerators More...
 
map< DEG_TYPE, unsigned long > incremental_betti (const list< Monomial > &T, const WT_TYPE *grading=nullptr)
 Incremental Betti numbers for monomial ideals. More...
 
map< DEG_TYPE, unsigned long > incremental_betti (const list< Monomial > &T, const Monomial &u, const WT_TYPE *grading=nullptr)
 Incremental Betti numbers for monomial ideals. More...
 
list< Monomial >::const_iterator is_one_base_case (const list< Monomial > &)
 test for the 1-base case [2] More...
 
list< Monomial >::const_iterator is_splitting_case (const list< Monomial > &T)
 test for the “splitting case” [2] More...
 
bool is_zero_base_case (const list< Monomial > &)
 test for the 0-base case [2] More...
 
Dense_Univariate_Rational_Polynomialpolynomial_binomial (long long a, long long b)
 computes the number of combinations \(C(t+a,b)\) More...
 
Dense_Univariate_Integer_Polynomialsolve_one_base_case (const list< Monomial > &T, list< Monomial >::const_iterator ti, const WT_TYPE *grading)
 applies Bigatti’s algorithm for the 1-base case More...
 
Dense_Univariate_Integer_Polynomialsolve_splitting_case (const list< Monomial > &T, list< Monomial >::const_iterator ti, const WT_TYPE *grading)
 applies Bigatti’s algorithm for the 1-base case More...
 
Dense_Univariate_Integer_Polynomialsolve_zero_base_case (const list< Monomial > &T, const WT_TYPE *grading)
 computes Hilbert numerator when the 0-base case applies [2] More...
 

Detailed Description

Classes useful for computational Commutative Algebra.

Function Documentation

◆ choose_hilbert_pivot()

Monomial choose_hilbert_pivot ( const list< Monomial > &  T)

chooses a pivot for the Bigatti algorithm

Parameters
Tlist of generators of monomial ideal
Returns
a monomial used to pivot in the Bigatti algorithm [2]

This uses the strategy described by [9] and due to [2] : select \(x_i^e\) such that \(i\) maximizes the number of terms divisible by that variable, and \(e\) is the median of the powers of \(x_i\) appearing in \(T\).

Definition at line 220 of file hilbert_functions.cpp.

◆ hilbert_numerator_bigatti()

Dense_Univariate_Integer_Polynomial* hilbert_numerator_bigatti ( const list< Monomial > &  T,
const WT_TYPE *  grading = nullptr 
)

the Bigatti algorithm to compute the Hilbert numerator [2]

Parameters
Tlist of generators of a monomial ideal
gradinguse for a graded polynomial ring
Returns
the basic, unreduced Hilbert numerator of the ideal generated by \( T \) .

This computes the first Hilbert numerator. If you do not want to use a grading, set it to nullptr.

Warning
T needs to be non-redundant; i.e., \(\forall t,u\in T\) \(t\not\mid u\).

Definition at line 246 of file hilbert_functions.cpp.

◆ hilbert_polynomial()

Dense_Univariate_Rational_Polynomial* hilbert_polynomial ( NVAR_TYPE  n,
unsigned int  dim,
const list< Monomial T,
Dense_Univariate_Integer_Polynomial hn = nullptr,
Dense_Univariate_Integer_Polynomial hn2 = nullptr 
)

computes the Hilbert polynomial for an ideal

Parameters
nnumber of variables in ideal
dimdimension of ideal (if known)
Tideal’s generators
hnHilbert numerator (if known)
hn2reduced Hilbert numerator (if known)
Returns
the Hilbert polynomial of the ideal generated by T

Definition at line 425 of file hilbert_functions.cpp.

◆ hilbert_second_numerator()

Dense_Univariate_Integer_Polynomial* hilbert_second_numerator ( NVAR_TYPE  n,
Dense_Univariate_Integer_Polynomial hn,
const WT_TYPE *  grading = nullptr 
)

computes the second Hilbert numerator (after reduction by \((1-t)^{\deg I}\))

Parameters
nnumber of variables (used to bound computation)
hnthe first Hilbert numerator (before reduction)
gradingthe grading of the ideal (if NULLPTR , the standard grading)
Returns
the reduced Hilbert numerator of the specified Hilbert numerator

Definition at line 307 of file hilbert_functions.cpp.

◆ ideal_dimension()

unsigned ideal_dimension ( NVAR_TYPE  nvars,
const Dense_Univariate_Integer_Polynomial first_numerator,
const Dense_Univariate_Integer_Polynomial second_numerator 
)

computes the dimension of the ideal by subtracting the Hilbert numerators

Parameters
nvarsnumber of variables in ring
first_numeratorthe unreduced Hilbert numerator
second_numeratorthe reduced Hilbert numerator
Returns
dimension of the ideal whose Hilbert numerators are given

Definition at line 388 of file hilbert_functions.cpp.

◆ incremental_betti() [1/2]

map<DEG_TYPE, unsigned long> incremental_betti ( const list< Monomial > &  T,
const WT_TYPE *  grading = nullptr 
)

Incremental Betti numbers for monomial ideals.

Author
John Perry
Date
2017

Computes the 1st “incremental Betti” numbers obtained when adding to the ideal generated by a set \( T \) its last monomial \( u \). (These are the degrees of the generators’ syzygies [7].) It does not compute the full list of Betti numbers of \( T \); rather, it computes the ones that involve u itself. To use the weighted degrees rather than the standard degrees, give a valid array of weights to grading.

Parameters
Ta list of Monomial that generate a monomial ideal
gradingan optional list of weights, to use the weighted degrees of exponents, rather than the standard degrees
Returns
a map wherein the key of any element is the degree of a syzygy, and the value \( d \) is the number of \( t\in T \) whose lcm with u has degree \( d \).

Definition at line 30 of file betti.cpp.

◆ incremental_betti() [2/2]

map<DEG_TYPE, unsigned long> incremental_betti ( const list< Monomial > &  T,
const Monomial u,
const WT_TYPE *  grading = nullptr 
)
inline

Incremental Betti numbers for monomial ideals.

Author
John Perry
Date
2017

Computes the 1st “incremental Betti” numbers obtained when adding u to the ideal generated by a set \( T \) defined by the Monomials in the range from start to end. (These are the degrees of the generators’ syzygies [7].) It does not compute the full list of Betti numbers of \( T\cup \{u\}\); rather, it computes the ones that involve u itself. To use the weighted degrees rather than the standard degrees, give a valid array of weights to grading.

Parameters
Ta list of Monomial that generate a monomial ideal
ua Monomial not in T (you can probably use one that is in T, but this is an odd thing to do)
gradingan optional list of weights, to use the weighted degrees of exponents, rather than the standard degrees
Returns
a map wherein the key of any element is the degree of a syzygy, and the value \( d \) is the number of \( t\in T \) whose lcm with u has degree \( d \).

Definition at line 78 of file betti.hpp.

◆ is_one_base_case()

list<Monomial>::const_iterator is_one_base_case ( const list< Monomial > &  )

test for the 1-base case [2]

If result is T.end(), this is not a 1-base case.

Returns
index to an element of T that makes the 0-base case.

Definition at line 106 of file hilbert_functions.cpp.

◆ is_splitting_case()

list<Monomial>::const_iterator is_splitting_case ( const list< Monomial > &  T)

test for the “splitting case” [2]

Parameters
Tlist of generators of monomial ideal
Returns
index of an entry of T that is coprime to the rest

If result is T.end(), this is not a splitting case.

Definition at line 180 of file hilbert_functions.cpp.

◆ is_zero_base_case()

bool is_zero_base_case ( const list< Monomial > &  )

test for the 0-base case [2]

Returns
true if and only if the zero base case applies

Definition at line 43 of file hilbert_functions.cpp.

◆ polynomial_binomial()

Dense_Univariate_Rational_Polynomial* polynomial_binomial ( long long  a,
long long  b 
)

computes the number of combinations \(C(t+a,b)\)

Parameters
aan integer
ban integer
Returns
the polynomial \(C(t+a,b)\)

◆ solve_one_base_case()

Dense_Univariate_Integer_Polynomial* solve_one_base_case ( const list< Monomial > &  T,
list< Monomial >::const_iterator  ti,
const WT_TYPE *  grading 
)

applies Bigatti’s algorithm for the 1-base case

Parameters
Tlist of generators of monomial ideal
tiindex of the one term in T which is not a simple power
gradinguse for a graded polynomial ring
Returns
Hilbert numerator for a 1-base case

If you do not want to use a grading, set it to nullptr.

Definition at line 123 of file hilbert_functions.cpp.

◆ solve_splitting_case()

Dense_Univariate_Integer_Polynomial* solve_splitting_case ( const list< Monomial > &  T,
list< Monomial >::const_iterator  ti,
const WT_TYPE *  grading 
)

applies Bigatti’s algorithm for the 1-base case

Parameters
Tlist of generators of monomial ideal
tiindex of a term in T which is coprime to the rest
gradinguse for a graded polynomial ring
Returns
the Hilbert numerator for the splitting case [2]

If you do not want to use a grading, set it to nullptr.

Definition at line 203 of file hilbert_functions.cpp.

◆ solve_zero_base_case()

Dense_Univariate_Integer_Polynomial* solve_zero_base_case ( const list< Monomial > &  T,
const WT_TYPE *  grading 
)

computes Hilbert numerator when the 0-base case applies [2]

Parameters
Tlist of generators of monomial ideal
gradinguse for a graded polynomial ring
Returns
the Hilbert polynomial for the 0-base case

If you do not want to use a grading, set it to nullptr.

Definition at line 78 of file hilbert_functions.cpp.