1 #ifndef __HILBERT_FUNCTIONS_ 2 #define __HILBERT_FUNCTIONS_ 9 using std::set;
using std::list;
11 #include "system_constants.hpp" 14 #include "monomial.hpp" 15 #include "polynomial_linked_list.hpp" 16 #include "dense_univariate_integer_poly.hpp" 17 #include "dense_univariate_rational_poly.hpp" 55 const list<Monomial> & T,
const WT_TYPE * grading
76 const list<Monomial> & T, list<Monomial>::const_iterator ti,
77 const WT_TYPE * grading
99 const list<Monomial> & T, list<Monomial>::const_iterator ti,
100 const WT_TYPE * grading
128 const list<Monomial> & T,
const WT_TYPE * grading =
nullptr 143 const WT_TYPE * grading =
nullptr 169 long long a,
long long b
185 const list<Monomial> T,
list< Monomial >::const_iterator is_one_base_case(const list< Monomial > &T)
test for the 1-base case
Dense_Univariate_Rational_Polynomial * hilbert_polynomial(NVAR_TYPE n, unsigned int pole_order, const list< Monomial > T, Dense_Univariate_Integer_Polynomial *hn, Dense_Univariate_Integer_Polynomial *hn2)
computes the Hilbert polynomial for an ideal
list< Monomial >::const_iterator is_splitting_case(const list< Monomial > &T)
test for the “splitting case”
Dense_Univariate_Rational_Polynomial * polynomial_binomial(long long a, long long b)
computes the number of combinations
Dense_Univariate_Integer_Polynomial * solve_one_base_case(const list< Monomial > &T, list< Monomial >::const_iterator ui, const WT_TYPE *grading)
applies Bigatti’s algorithm for the 1-base case
Dense_Univariate_Integer_Polynomial * hilbert_second_numerator(NVAR_TYPE n, Dense_Univariate_Integer_Polynomial *first, const WT_TYPE *grading)
computes the second Hilbert numerator (after reduction by )
Dense_Univariate_Integer_Polynomial * hilbert_numerator_bigatti(const list< Monomial > &T, const WT_TYPE *grading)
the Bigatti algorithm to compute the Hilbert numerator
quick-’n-dirty Dense_Univariate integer polynomial class
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
Implementation of monomials.
Monomial choose_hilbert_pivot(const list< Monomial > &T)
chooses a pivot for the Bigatti algorithm
quick-’n-dirty Dense_Univariate rational polynomial class
Dense_Univariate_Integer_Polynomial * solve_splitting_case(const list< Monomial > &T, list< Monomial >::const_iterator ui, const WT_TYPE *grading)
applies Bigatti’s algorithm for the 1-base case
unsigned ideal_dimension(NVAR_TYPE n, const Dense_Univariate_Integer_Polynomial *h1, const Dense_Univariate_Integer_Polynomial *h2)
computes the dimension of the ideal by subtracting the Hilbert numerators
void divide_by_common_term(COEF_TYPE &, UCOEF_TYPE &)
divides out the common term of the two given numbers
bool is_zero_base_case(const list< Monomial > &T)
test for the 0-base case