Gröbner basis project
Codebase for research into Gröbner basis computation
|
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_Polynomial * | hilbert_numerator_bigatti (const list< Monomial > &T, const WT_TYPE *grading=nullptr) |
the Bigatti algorithm to compute the Hilbert numerator [2] More... | |
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 More... | |
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}\)) 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_Polynomial * | polynomial_binomial (long long a, long long b) |
computes the number of combinations \(C(t+a,b)\) More... | |
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 More... | |
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 More... | |
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] More... | |
Classes useful for computational Commutative Algebra.
chooses a pivot for the Bigatti algorithm
T | list of generators of monomial ideal |
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.
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]
T | list of generators of a monomial ideal |
grading | use for a graded polynomial ring |
This computes the first Hilbert numerator. If you do not want to use a grading, set it to nullptr
.
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.
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
n | number of variables in ideal |
dim | dimension of ideal (if known) |
T | ideal’s generators |
hn | Hilbert numerator (if known) |
hn2 | reduced Hilbert numerator (if known) |
T
Definition at line 425 of file hilbert_functions.cpp.
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}\))
n | number of variables (used to bound computation) |
hn | the first Hilbert numerator (before reduction) |
grading | the grading of the ideal (if NULLPTR , the standard grading) |
Definition at line 307 of file hilbert_functions.cpp.
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
nvars | number of variables in ring |
first_numerator | the unreduced Hilbert numerator |
second_numerator | the reduced Hilbert numerator |
Definition at line 388 of file hilbert_functions.cpp.
map<DEG_TYPE, unsigned long> incremental_betti | ( | const list< Monomial > & | T, |
const WT_TYPE * | grading = nullptr |
||
) |
Incremental Betti numbers for monomial ideals.
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
.
T | a list of Monomial that generate a monomial ideal |
grading | an optional list of weights, to use the weighted degrees of exponents, rather than the standard degrees |
u
has degree \( d \).
|
inline |
Incremental Betti numbers for monomial ideals.
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
.
T | a list of Monomial that generate a monomial ideal |
u | a Monomial not in T (you can probably use one that is in T , but this is an odd thing to do) |
grading | an optional list of weights, to use the weighted degrees of exponents, rather than the standard degrees |
u
has degree \( d \). test for the 1-base case [2]
If result is T.end()
, this is not a 1-base case.
T
that makes the 0-base case. Definition at line 106 of file hilbert_functions.cpp.
test for the “splitting case” [2]
T | list of generators of monomial ideal |
T
that is coprime to the restIf result is T.end()
, this is not a splitting case.
Definition at line 180 of file hilbert_functions.cpp.
bool is_zero_base_case | ( | const list< Monomial > & | ) |
test for the 0-base case [2]
true
if and only if the zero base case applies Definition at line 43 of file hilbert_functions.cpp.
Dense_Univariate_Rational_Polynomial* polynomial_binomial | ( | long long | a, |
long long | b | ||
) |
computes the number of combinations \(C(t+a,b)\)
a | an integer |
b | an integer |
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
T | list of generators of monomial ideal |
ti | index of the one term in T which is not a simple power |
grading | use for a graded polynomial ring |
If you do not want to use a grading, set it to nullptr
.
Definition at line 123 of file hilbert_functions.cpp.
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
T | list of generators of monomial ideal |
ti | index of a term in T which is coprime to the rest |
grading | use for a graded polynomial ring |
If you do not want to use a grading, set it to nullptr
.
Definition at line 203 of file hilbert_functions.cpp.
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]
T | list of generators of monomial ideal |
grading | use for a graded polynomial ring |
If you do not want to use a grading, set it to nullptr
.
Definition at line 78 of file hilbert_functions.cpp.