Skip to content

Latest commit

 

History

History
311 lines (209 loc) · 5.37 KB

ideals.md

File metadata and controls

311 lines (209 loc) · 5.37 KB
CurrentModule = Oscar
DocTestSetup = Oscar.doctestsetup()

Ideals in Multivariate Rings

Types

The OSCAR type for ideals in multivariate polynomial rings is of parametrized form MPolyIdeal{T}, where T is the element type of the polynomial ring.

Constructors

ideal(R::MPolyRing, g::Vector)

Data Associated to Ideals

Basic Data

If I is an ideal of a multivariate polynomial ring R, then

  • base_ring(I) refers to R,
  • gens(I) to the generators of I,
  • number_of_generators(I) / ngens(I) to the number of these generators, and
  • gen(I, k) as well as I[k] to the k-th such generator.
Examples
julia> R, (x, y) = polynomial_ring(QQ, ["x", "y"])
(Multivariate polynomial ring in 2 variables over QQ, QQMPolyRingElem[x, y])

julia> I = ideal(R, [x, y])^2
Ideal generated by
  x^2
  x*y
  y^2

julia> base_ring(I)
Multivariate polynomial ring in 2 variables x, y
  over rational field

julia> gens(I)
3-element Vector{QQMPolyRingElem}:
 x^2
 x*y
 y^2

julia> number_of_generators(I)
3

julia> gen(I, 2)
x*y

Dimension

dim(I::MPolyIdeal)

Codimension

codim(I::MPolyIdeal)

In the graded case, we additionally have:

Minimal Sets of Generators

minimal_generating_set(I::MPolyIdeal{<:MPolyDecRingElem})

Castelnuovo-Mumford Regularity

cm_regularity(I::MPolyIdeal)

Degree

degree(I::MPolyIdeal)

Operations on Ideals

Simple Ideal Operations

Powers of Ideal

^(I::MPolyIdeal, m::Int)

Sum of Ideals

+(I::MPolyIdeal{T}, J::MPolyIdeal{T}) where T

Product of Ideals

*(I::MPolyIdeal{T}, J::MPolyIdeal{T}) where T

Intersection of Ideals

intersect(I::MPolyIdeal{T}, Js::MPolyIdeal{T}...) where T

Ideal Quotients

Given two ideals $I, J$ of a ring $R$, the ideal quotient of $I$ by $J$ is the ideal

$I:J= \bigl{f \in R:\big|: f J \subset I\bigr}\subset R.$

quotient(I::MPolyIdeal{T}, J::MPolyIdeal{T}) where T

Saturation

Given two ideals $I, J$ of a ring $R$, the saturation of $I$ with respect to $J$ is the ideal

$I:J^{\infty} = \bigl{ f \in R :\big|: f J^k !\subset I {\text{ for some }}k\geq 1 \bigr} = \textstyle{\bigcup\limits_{k=1}^{\infty} (I:J^k)}.$

saturation(I::MPolyIdeal{T}, J::MPolyIdeal{T}) where T
saturation_with_index(I::MPolyIdeal{T}, J::MPolyIdeal{T}) where T

Elimination

eliminate(I::MPolyIdeal{T}, V::Vector{T}) where T <: MPolyRingElem

Truncation

truncate(I::MPolyIdeal, g::FinGenAbGroupElem)

Tests on Ideals

Basic Tests

is_zero(I::MPolyIdeal)
is_one(I::MPolyIdeal)
is_monomial(f::MPolyRingElem)

Containment of Ideals

is_subset(I::MPolyIdeal, J::MPolyIdeal)

Equality of Ideals

==(I::MPolyIdeal, J::MPolyIdeal)

Ideal Membership

ideal_membership(f::T, I::MPolyIdeal{T}) where T

Radical Membership

radical_membership(f::T, I::MPolyIdeal{T}) where T

Primality Test

is_prime(I::MPolyIdeal)

Primary Test

is_primary(I::MPolyIdeal)

Decomposition of Ideals

We discuss various decomposition techniques. They are implemented for polynomial rings over fields and, if explicitly mentioned, also for polynomial rings over the integers. See DGP99 for a survey.

Radical

radical(I::MPolyIdeal)

Primary Decomposition

primary_decomposition(I::MPolyIdeal; algorithm::Symbol = :GTZ)

Absolute Primary Decomposition

absolute_primary_decomposition(I::MPolyIdeal{QQMPolyRingElem})

Minimal Associated Primes

minimal_primes(I::MPolyIdeal; algorithm::Symbol = :GTZ)

Weak Equidimensional Decomposition

equidimensional_decomposition_weak(I::MPolyIdeal)

Equidimensional Decomposition of radical

equidimensional_decomposition_radical(I::MPolyIdeal)

Equidimensional Hull

equidimensional_hull(I::MPolyIdeal)

Radical of the Equidimensional Hull

equidimensional_hull_radical(I::MPolyIdeal)

Homogenization and Dehomogenization

Referring to KR05 for definitions and technical details, we discuss homogenization and dehomogenization in the context of $\mathbb Z^m$-gradings.

homogenizer(P::MPolyRing{T}, h::VarName; pos::Int=1+ngens(P))  where T
homogenizer(P::MPolyRing{T}, W::Union{ZZMatrix, Matrix{<:IntegerUnion}}, h::VarName; pos::Int)  where T
dehomogenizer(H::Homogenizer)
julia> P, (x, y) = polynomial_ring(QQ, ["x", "y"]);

julia> I = ideal([x^2+y, x*y+y^2]);

julia> H = homogenizer(P, "h");

julia> Ih = H(I)     # homogenization of ideal I
Ideal generated by
  x*y + y^2
  x^2 + y*h
  y^3 + y^2*h

julia> DH = dehomogenizer(H);

julia> DH(Ih) == I   # dehomogenization of Ih
true

Ideals as Modules

ideal_as_module(I::MPolyIdeal)

Generating Special Ideals

Katsura-n

These systems appeared in a problem of magnetism in physics. For a given $n$ katsura(n) has $2^n$ solutions and is defined in a polynomial ring with $n+1$ variables over the rational numbers. For a given polynomial ring R with $n$ variables katsura(R) defines the corresponding system with $2^{n-1}$ solutions.

katsura(n::Int)
katsura(R::MPolyRing)