File tree Expand file tree Collapse file tree 4 files changed +19
-11
lines changed Expand file tree Collapse file tree 4 files changed +19
-11
lines changed Original file line number Diff line number Diff line change @@ -26,10 +26,7 @@ function dimension(I::Ideal{T}) where T <: MPolyRingElem
2626 R = parent (first (gb))
2727
2828 res = Set ([trues (ngens (R))])
29- lead_exps = Vector {Vector{Int}} (undef, length (gb))
30- for i in eachindex (gb)
31- lead_exps[i] = _lead_exp_ord (gb[i], :degrevlex )
32- end
29+ lead_exps = [ _lead_exp_ord (g, :degrevlex ) for g in gb if ! iszero (g) ]
3330 for lexp in lead_exps
3431 nz_exps = (! iszero). (lexp)
3532 nz_exps_ind = findall (nz_exps)
@@ -62,6 +59,7 @@ function _all_lesseq(a::BitVector, b::BitVector)::Bool
6259end
6360
6461function _lead_exp_ord (p:: MPolyRingElem , order:: Symbol )
62+ @req ! iszero (p) " Zero polynomial does not have a leading term"
6563 R = parent (p)
6664 internal_ordering (R)== order && return first (exponent_vectors (p))
6765
Original file line number Diff line number Diff line change @@ -27,11 +27,8 @@ function hilbert_series(I::Ideal{T}) where T <: MPolyRingElem
2727 gb = get! (I. gb, 0 ) do
2828 groebner_basis (I, complete_reduction = true )
2929 end
30- lead_exps = Vector {Vector{Int}} (undef, length (gb))
31- for i in eachindex (gb)
32- lead_exps[i] = _lead_exp_ord (gb[i], :degrevlex )
33- end
34- return _hilbert_series_mono (lead_exps)
30+ lead_exps = [ _lead_exp_ord (g, :degrevlex ) for g in gb if ! iszero (g) ]
31+ return _hilbert_series_mono (lead_exps, nvars (parent (I)))
3532end
3633
3734@doc Markdown. doc"""
@@ -134,11 +131,11 @@ function hilbert_polynomial(I::Ideal{T}) where T <: MPolyRingElem
134131end
135132
136133# Computes hilbert series of a monomial ideal on input list of exponents
137- function _hilbert_series_mono (exps:: Vector{Vector{Int}} )
134+ function _hilbert_series_mono (exps:: Vector{Vector{Int}} , nr_vars :: Int )
138135
139136 h = _num_hilbert_series_mono (exps)
140137 t = gen (parent (h))
141- return h// (1 - t)^ length ( first (exps))
138+ return h// (1 - t)^ nr_vars
142139end
143140
144141# Computes numerator hilbert series of a monomial ideal on input list of exponents
Original file line number Diff line number Diff line change 99 @test iszero (dimension (I))
1010 @test iszero (I. dim)
1111
12+ I = Ideal ([R (0 )])
13+ @test dimension (I) == ngens (R)
14+ @test I. dim == ngens (R)
15+
1216 I = Ideal ([R (1 )])
1317 @test dimension (I) == - 1
1418 @test I. dim == - 1
Original file line number Diff line number Diff line change 2121 @test iszero (hilbert_dimension (I))
2222 @test 4 == hilbert_degree (I)
2323
24+ I = Ideal ([R (0 )])
25+ HS = 1 // (1 - t)^ (nvars (R))
26+ HP = (1 // 6 * s^ 3 + s^ 2 + 11 // 6 * s + 1 , 0 )
27+
28+ @test HS == hilbert_series (I)
29+ @test HP == hilbert_polynomial (I)
30+ @test nvars (R) == hilbert_dimension (I)
31+ @test isone (hilbert_degree (I))
32+
2433 I = Ideal ([R (1 )])
2534 @test iszero (hilbert_series (I))
2635 @test all (iszero, hilbert_polynomial (I))
You can’t perform that action at this time.
0 commit comments