Skip to content

Commit a5ceba2

Browse files
committed
Generic.ideal: add is_subset, deprecate contains
The `contains` methods for ideals were just a wrong choice of API: `contains(,b)` is meant to test if `b` is an *element* of `a`, not a subset.
1 parent 84d777f commit a5ceba2

File tree

4 files changed

+37
-51
lines changed

4 files changed

+37
-51
lines changed

docs/src/ideal.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ ideals.
116116
### Containment
117117

118118
```@docs
119-
contains(::Generic.Ideal{T}, ::Generic.Ideal{T}) where T <: RingElement
119+
is_subset(::Generic.Ideal{T}, ::Generic.Ideal{T}) where T <: RingElement
120120
```
121121

122122
```@docs
@@ -146,10 +146,10 @@ AbstractAlgebra.Generic.Ideal{AbstractAlgebra.Generic.Poly{BigInt}}(Univariate p
146146
julia> J = Generic.Ideal(R, W)
147147
AbstractAlgebra.Generic.Ideal{AbstractAlgebra.Generic.Poly{BigInt}}(Univariate polynomial ring in x over integers, AbstractAlgebra.Generic.Poly{BigInt}[282, 3*x + 255, x^2 + 107])
148148
149-
julia> contains(J, I)
149+
julia> is_subset(I, J)
150150
false
151151
152-
julia> contains(I, J)
152+
julia> is_subset(J, I)
153153
true
154154
155155
julia> intersect(I, J) == J

src/Deprecations.jl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,3 +62,7 @@ end
6262

6363
# deprecated in 0.45.0
6464
@deprecate test_iterate ConformanceTests.test_iterate
65+
66+
# deprecated in 0.45.2
67+
import Base: contains
68+
@deprecate contains(I::Ideal{T}, J::Ideal{T}) where {T <: RingElement} issubset(J, I)

src/generic/Ideal.jl

Lines changed: 8 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2113,30 +2113,12 @@ function Base.in(v::T, I::Ideal{T}) where T <: RingElement
21132113
end
21142114

21152115
@doc raw"""
2116-
Base.contains(I::Ideal{T}, J::Ideal{T}) where T <: RingElement
2116+
Base.issubset(I::Ideal{T}, J::Ideal{T}) where T <: RingElement
21172117
2118-
Return `true` if the ideal `J` is contained in the ideal `I`.
2118+
Return `true` if the ideal `I` is a subset of the ideal `J`.
21192119
"""
2120-
function Base.contains(I::Ideal{T}, J::Ideal{T}) where T <: RingElement
2121-
G1 = gens(J)
2122-
G2 = gens(I)
2123-
if isempty(G1)
2124-
return true
2125-
end
2126-
if isempty(G2)
2127-
return false
2128-
end
2129-
return divides(G1[1], G2[1])[1]
2130-
end
2131-
2132-
function Base.contains(I::Ideal{T}, J::Ideal{T}) where {U <: RingElement, T <: Union{AbstractAlgebra.PolyRingElem{U}, AbstractAlgebra.MPolyRingElem{U}}}
2133-
G = gens(J)
2134-
for v in G
2135-
if !iszero(normal_form(v, I))
2136-
return false
2137-
end
2138-
end
2139-
return true
2120+
function Base.issubset(I::Ideal{T}, J::Ideal{T}) where T <: RingElement
2121+
return all(in(J), gens(I))
21402122
end
21412123

21422124
###############################################################################
@@ -2177,9 +2159,9 @@ function intersect(I::Ideal{T}, J::Ideal{T}) where {U <: FieldElement, T <: Abst
21772159
end
21782160

21792161
function intersect(I::Ideal{T}, J::Ideal{T}) where {U <: RingElement, T <: AbstractAlgebra.PolyRingElem{U}}
2180-
if contains(I, J)
2162+
if is_subset(J, I)
21812163
return J
2182-
elseif contains(J, I)
2164+
elseif is_subset(I, J)
21832165
return I
21842166
end
21852167
S = base_ring(I) # poly ring
@@ -2200,9 +2182,9 @@ function intersect(I::Ideal{T}, J::Ideal{T}) where {U <: RingElement, T <: Abstr
22002182
end
22012183

22022184
function intersect(I::Ideal{T}, J::Ideal{T}) where {U <: RingElement, T <: AbstractAlgebra.MPolyRingElem{U}}
2203-
if contains(I, J)
2185+
if is_subset(J, I)
22042186
return J
2205-
elseif contains(J, I)
2187+
elseif is_subset(I, J)
22062188
return I
22072189
end
22082190
S = base_ring(I) # poly ring

test/generic/Ideal-test.jl

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -367,7 +367,7 @@ end
367367
I = Generic.Ideal(R, V)
368368
J = Generic.Ideal(R, vcat(V, W))
369369

370-
@test contains(J, I)
370+
@test is_subset(I, J)
371371
end
372372

373373
# univariate
@@ -382,7 +382,7 @@ end
382382
I = Generic.Ideal(R, V)
383383
J = Generic.Ideal(R, vcat(V, W))
384384

385-
@test contains(J, I)
385+
@test is_subset(I, J)
386386
end
387387

388388
# Fp[x]
@@ -398,7 +398,7 @@ end
398398
I = Generic.Ideal(R, V)
399399
J = Generic.Ideal(R, vcat(V, W))
400400

401-
@test contains(J, I)
401+
@test is_subset(I, J)
402402
end
403403

404404
# integer
@@ -411,13 +411,13 @@ end
411411
I = Generic.Ideal(ZZ, V)
412412
J = Generic.Ideal(ZZ, vcat(V, W))
413413

414-
@test contains(J, I)
414+
@test is_subset(I, J)
415415
end
416416

417417
I = Generic.Ideal(ZZ, 2)
418418

419-
@test contains(I, Generic.Ideal(ZZ, BigInt[]))
420-
@test !contains(Generic.Ideal(ZZ, BigInt[]), I)
419+
@test is_subset(Generic.Ideal(ZZ, BigInt[]), I)
420+
@test !is_subset(I, Generic.Ideal(ZZ, BigInt[]))
421421
end
422422

423423
@testset "Generic.Ideal.addition" begin
@@ -430,8 +430,8 @@ end
430430
I = Generic.Ideal(R, V)
431431
J = Generic.Ideal(R, W)
432432

433-
@test contains(I + J, I)
434-
@test contains(I + J, J)
433+
@test is_subset(I, I + J)
434+
@test is_subset(J, I + J)
435435
end
436436

437437
# univariate
@@ -446,8 +446,8 @@ end
446446
I = Generic.Ideal(R, V)
447447
J = Generic.Ideal(R, W)
448448

449-
@test contains(I + J, I)
450-
@test contains(I + J, J)
449+
@test is_subset(I, I + J)
450+
@test is_subset(J, I + J)
451451
end
452452

453453
# Fp[x]
@@ -463,8 +463,8 @@ end
463463
I = Generic.Ideal(R, V)
464464
J = Generic.Ideal(R, W)
465465

466-
@test contains(I + J, I)
467-
@test contains(I + J, J)
466+
@test is_subset(I, I + J)
467+
@test is_subset(J, I + J)
468468
end
469469

470470
# integer
@@ -477,8 +477,8 @@ end
477477
I = Generic.Ideal(ZZ, V)
478478
J = Generic.Ideal(ZZ, W)
479479

480-
@test contains(I + J, I)
481-
@test contains(I + J, J)
480+
@test is_subset(I, I + J)
481+
@test is_subset(J, I + J)
482482
end
483483
end
484484

@@ -627,8 +627,8 @@ end
627627

628628
K = intersect(I, J)
629629

630-
@test contains(I, K)
631-
@test contains(J, K)
630+
@test is_subset(K, I)
631+
@test is_subset(K, J)
632632
end
633633

634634
# univariate
@@ -645,8 +645,8 @@ end
645645

646646
K = intersect(I, J)
647647

648-
@test contains(I, K)
649-
@test contains(J, K)
648+
@test is_subset(K, I)
649+
@test is_subset(K, J)
650650
end
651651

652652
# Fp[x]
@@ -664,8 +664,8 @@ end
664664

665665
K = intersect(I, J)
666666

667-
@test contains(I, K)
668-
@test contains(J, K)
667+
@test is_subset(K, I)
668+
@test is_subset(K, J)
669669
end
670670

671671
# integer
@@ -680,7 +680,7 @@ end
680680

681681
K = intersect(I, J)
682682

683-
@test contains(I, K)
684-
@test contains(J, K)
683+
@test is_subset(K, I)
684+
@test is_subset(K, J)
685685
end
686686
end

0 commit comments

Comments
 (0)