Cycles and divisors
Algebraic Cycles
AbsAlgebraicCycle
— TypeAbsAlgebraicCycle{CoveredSchemeType<:AbsCoveredScheme, CoefficientRingType<:Ring}
An algebraic cycle $D$ on a (locally) Noetherian integral scheme $X$ with coefficients in a ring $R$ is a formal linear combination $\sum_i a_i D_i$ with $D_i \subseteq X$ integral, closed subschemes and the $a_i \in R$.
Such a cycle is represented non-uniquely as a formal sum $E = \sum_l b_l \mathcal{I}_l$ of equidimensional ideal sheaves $\mathcal{I}_l \subseteq \mathcal{O}_X$. For an equidimensional ideal sheaf $\mathcal{I}$ its interpretation as a cycle is as follows: Let $V(\mathcal{I})=E_{1} \cup \dots \cup E_{n}$ be the decomposition of the vanishing locus of $\mathcal{I}$ into irreducible components $E_i=V(\mathcal{P}_i)$ with $\mathcal{P}_i$ prime. Then $E$ corresponds to the cycle $D = \sum_{i=1}^{n} \mathrm{colength}_{\mathcal{P}_i}(\mathcal{I})E_i$.
Examples
julia> P2 = projective_space(QQ,2); (s0,s1,s2) = homogeneous_coordinates(P2);
julia> I = ideal_sheaf(P2,ideal([s0,s1^2]))
Sheaf of ideals
on scheme over QQ covered with 3 patches
1: [(s1//s0), (s2//s0)] affine 2-space
2: [(s0//s1), (s2//s1)] affine 2-space
3: [(s0//s2), (s1//s2)] affine 2-space
with restrictions
1: Ideal (1, (s1//s0)^2)
2: Ideal ((s0//s1), 1)
3: Ideal ((s0//s2), (s1//s2)^2)
julia> D = algebraic_cycle(I)
Effective algebraic cycle
on scheme over QQ covered with 3 patches
with coefficients in integer ring
given as the formal sum of
1 * sheaf of ideals
julia> irreducible_decomposition(D)
Effective algebraic cycle
on scheme over QQ covered with 3 patches
with coefficients in integer ring
given as the formal sum of
2 * sheaf of prime ideals
Constructors
algebraic_cycle
— Methodalgebraic_cycle(X::AbsCoveredScheme, R::Ring) -> AlgebraicCycle
Return the zero AlgebraicCycle
over X
with coefficients in R
.
Examples
julia> P, (x, y, z) = graded_polynomial_ring(QQ, [:x, :y, :z]);
julia> I = ideal([x^3-y^2*z]);
julia> Y = proj(P, I);
julia> Ycov = covered_scheme(Y);
julia> R = ZZ;
julia> algebraic_cycle(Ycov, R)
Zero algebraic cycle
on scheme over QQ covered with 3 patches
with coefficients in integer ring
algebraic_cycle
— Methodalgebraic_cycle(I::AbsIdealSheaf, R::Ring) -> AlgebraicCycle
Return the AlgebraicCycle
$D = 1 ⋅ I$ with coefficients in $R$ for a sheaf of equidimensional ideals $I$.
Note that $I$ must be equidimensional.
Examples
julia> P, (x, y, z) = graded_polynomial_ring(QQ, [:x, :y, :z]);
julia> I = ideal([x^3-y^2*z]);
julia> Y = proj(P);
julia> II = IdealSheaf(Y, I);
julia> R = ZZ;
julia> algebraic_cycle(II, R)
Effective algebraic cycle
on scheme over QQ covered with 3 patches
with coefficients in integer ring
given as the formal sum of
1 * sheaf of ideals
algebraic_cycle
— Methodalgebraic_cycle(I::AbsIdealSheaf) -> AlgebraicCycle
Return the AlgebraicCycle
$D = 1 ⋅ I$ with coefficients in $ℤ$ for a sheaf of equidimensional ideals $I$.
Examples
julia> P, (x, y, z) = graded_polynomial_ring(QQ, [:x, :y, :z]);
julia> I = ideal([x^3-y^2*z]);
julia> Y = proj(P);
julia> II = IdealSheaf(Y, I);
julia> R = ZZ;
julia> algebraic_cycle(II, R)
Effective algebraic cycle
on scheme over QQ covered with 3 patches
with coefficients in integer ring
given as the formal sum of
1 * sheaf of ideals
Properties
ambient_scheme
— Methodambient_scheme(D::AbsAlgebraicCycle)
Return the CoveredScheme
$X$ on which D
is defined.
components
— Methodcomponents(D::AbsAlgebraicCycle)
Return a list of ideal sheaves such that D
is a linear combination of the corresponding cycles.
The order of the components may change in different julia sessions. It is however consistent with the printing.
The ideal sheaves are only guaranteed equidimensional and may carry multiplicities. See irreducible_decomposition(::AbsAlgebraicCycle)
for the more conventional decomposition.
dim
— Methoddim(D::AbsAlgebraicCycle)
Return the dimension of the support of the cycle D
.
irreducible_decomposition
— Methodirreducible_decomposition(D::AbsAlgebraicCycle)
Return a cycle $E$ equal to $D$ but as a formal sum $E = ∑ₖ aₖ ⋅ Iₖ$ where the components
$Iₖ$ of $E$ are all sheaves of prime ideals.
integral
— Methodintegral(W::AbsAlgebraicCycle)
Assume $W$ is an algebraic cycle on $X$. This returns the sum of the lengths of all the components of dimension 0
of $W$.
Attributes
is_effective
— Methodis_effective(A::AbsAlgebraicCycle)
Return whether all the coefficients are non-negative.
is_prime
— Methodis_prime(D::AbsAlgebraicCycle)
An algebraic cycle is called prime if it consists of a single irreducible subvariety.
Note that this property is not stable under base extension.
Methods
<=
— MethodBase.:<=(A::AbsAlgebraicCycle, B::AbsAlgebraicCycle)
\[A \leq B\]
if and only if $B - A$ is effective.
Weil Divisors
AbsWeilDivisor
— TypeAbsWeilDivisor{CoveredSchemeType, CoefficientRingType} <: AbsAlgebraicCycle{CoveredSchemeType, CoefficientRingType}
A Weil divisor with coefficients of type CoefficientRingType
on a (locally) Noetherian integral scheme $X$ of type CoveredSchemeType
.
Examples
julia> P2 = projective_space(QQ,2); (s0,s1,s2) = homogeneous_coordinates(P2);
julia> I = ideal((s0*s1)^2);
julia> II = ideal_sheaf(P2, I);
julia> D = weil_divisor(II)
Effective weil divisor
on scheme over QQ covered with 3 patches
with coefficients in integer ring
given as the formal sum of
1 * sheaf of ideals
julia> E = irreducible_decomposition(D)
Effective weil divisor
on scheme over QQ covered with 3 patches
with coefficients in integer ring
given as the formal sum of
2 * prime ideal sheaf on scheme over QQ covered with 3 patches extended from ideal ((s1//s0)) on affine 2-space
2 * prime ideal sheaf on scheme over QQ covered with 3 patches extended from ideal ((s0//s1)) on affine 2-space
julia> P = components(E)[1]
Prime ideal sheaf on Scheme over QQ covered with 3 patches extended from Ideal ((s1//s0)) on Affine 2-space
julia> components(D)[1] == II
true
julia> D[II] # to get the coefficient
1
julia> E[P]
2
Constructors
weil_divisor
— Methodweil_divisor(X::AbsCoveredScheme, R::Ring) -> WeilDivisor
Return the zero weil divisor on X
with coefficients in the ring R
.
Examples
julia> P, (x, y, z) = graded_polynomial_ring(QQ, [:x, :y, :z]);
julia> I = ideal([x^3-y^2*z]);
julia> Y = proj(P, I);
julia> Ycov = covered_scheme(Y);
julia> weil_divisor(Ycov, QQ)
Zero weil divisor
on scheme over QQ covered with 3 patches
with coefficients in rational field
weil_divisor
— Methodweil_divisor(I::AbsIdealSheaf) -> WeilDivisor
Given an ideal sheaf I
of pure codimension $1$, return the weil divisor $D = 1 ⋅ I$ with coefficients in the integer ring.
Example
julia> P, (x, y, z) = graded_polynomial_ring(QQ, [:x, :y, :z]);
julia> Y = proj(P);
julia> I = ideal([(x^3-y^2*z)]);
julia> II = IdealSheaf(Y, I);
julia> weil_divisor(II)
Effective weil divisor
on scheme over QQ covered with 3 patches
with coefficients in integer ring
given as the formal sum of
1 * sheaf of ideals
julia> JJ = II^2;
julia> D = weil_divisor(JJ)
Effective weil divisor
on scheme over QQ covered with 3 patches
with coefficients in integer ring
given as the formal sum of
1 * product of 2 ideal sheaves
julia> irreducible_decomposition(D)
Effective weil divisor
on scheme over QQ covered with 3 patches
with coefficients in integer ring
given as the formal sum of
2 * sheaf of prime ideals
weil_divisor
— Methodweil_divisor(I::AbsIdealSheaf, R::Ring; check::Bool=true)
Given an ideal sheaf I
of pure codimension $1$ and a ring R
, return the weil divisor $D = 1 ⋅ I$ with coefficients in R
.
Methods
Besides the methods for AbsAlgebraicCycle
the following are available.
is_in_linear_system
— Methodis_in_linear_system(f::VarietyFunctionFieldElem, D::AbsWeilDivisor; regular_on_complement::Bool=true, check::Bool=true) -> Bool
Return whether the rational function f
is in the linear system $|D|$, i.e. if $(f) + D \geq 0$.
Input
regular_on_complement
– set totrue
iff
is regular on the complement of the support ofD
.
order_of_vanishing
— Methodorder_of_vanishing(f::VarietyFunctionFieldElem, D::AbsWeilDivisor; check::Bool=true)
Return the order of vanishing of the rational function f
on the prime divisor D
.
intersect
— Methodintersect(D::AbsWeilDivisor, E::AbsWeilDivisor; covering::Covering=default_covering(ambient_scheme(D)))
Return the intersection number of the the Weil divisors D
and E
on a complete smooth surface as defined in [Har77].
Input
The optional keyword argument covering
specifies the covering to be used for the computation.
Linear Systems
LinearSystem
— TypeLinearSystem
A linear system of a Weil divisor $D$ on a variety $X$, generated by rational functions $f₁,…,fᵣ ∈ K(X)$.
weil_divisor
— Methodweil_divisor(L::LinearSystem)
Return the divisor $D$ of the linear system $L = |D|$.
variety
— Methodvariety(L::LinearSystem)
Return the variety on which L
is defined.
subsystem
— Methodsubsystem(L::LinearSystem, D::AbsWeilDivisor) -> LinearSystem, MatElem
Given a linear system $L = |E|$ and a divisor $D \leq E$ compute $|D|$ and the matrix representing the inclusion $|D| \hookrightarrow |E|$ with respect to the given bases of both systems.
Cartier Divisors
CartierDivisor
— TypeCartierDivisor{CoveredSchemeType<:AbsCoveredScheme, CoeffType<:RingElem}
A Cartier divisor $C$ on a scheme $X$ with coefficients $a_i$ in a ring $R$ is a formal linear combination $\sum_i a_i D_i$ of effective Cartier divisors $D_i$.
The scheme $X$ is of type CoveredSchemeType
. The coefficients $a_i$ are of type CoeffType
.
EffectiveCartierDivisor
— TypeEffectiveCartierDivisor{CoveredSchemeType<:AbsCoveredScheme}
An effective Cartier divisor on a scheme $X$ is a closed subscheme $D \subseteq X$ whose ideal sheaf $\mathcal{I}_D \subseteq \mathcal{O}_X$ is an invertible $\mathcal{O}_X$-module. In particular, $\mathcal{I}_D$ is locally principal.
Internally, $C$ stores a trivializing_covering(C::EffectiveCartierDivisor)
. The scheme $X$ is of type CoveredSchemeType
.
Cartier divisors support elementary arithmetic.
Constructors
effective_cartier_divisor
— Methodeffective_cartier_divisor(I::IdealSheaf;
trivializing_covering::Covering = default_covering(scheme(I)))
-> EffectiveCartierDivisor
Return the effective Cartier divisor defined by the ideal sheaf I
, given that I
is principal in the given covering of the scheme on which it is defined.
Examples
julia> P, (x, y, z) = graded_polynomial_ring(QQ, [:x, :y, :z]);
julia> I = ideal([x^3-y^2*z]);
julia> Y = proj(P);
julia> II = IdealSheaf(Y, I);
julia> effective_cartier_divisor(II)
Effective cartier divisor
on scheme over QQ covered with 3 patches
1: [(y//x), (z//x)] affine 2-space
2: [(x//y), (z//y)] affine 2-space
3: [(x//z), (y//z)] affine 2-space
defined by
sheaf of ideals with restrictions
1: Ideal (-(y//x)^2*(z//x) + 1)
2: Ideal ((x//y)^3 - (z//y))
3: Ideal ((x//z)^3 - (y//z)^2)
effective_cartier_divisor
— Methodeffective_cartier_divisor(IP::AbsProjectiveScheme, f::Union{MPolyDecRingElem, MPolyQuoRingElem})
Return the effective Cartier divisor on the projective scheme $X$ defined by the homogeneous polynomial $f$.
cartier_divisor
— Methodcartier_divisor(E::EffectiveCartierDivisor) -> CartierDivisor
Convert an EffectiveCartierDivisor
into a CartierDivisor
with coefficient $1$ in the ring of integers.
Examples
julia> P, (x, y, z) = graded_polynomial_ring(QQ, [:x, :y, :z]);
julia> I = ideal([x^3-y^2*z]);
julia> Y = proj(P);
julia> II = IdealSheaf(Y, I);
julia> E = effective_cartier_divisor(II)
Effective cartier divisor
on scheme over QQ covered with 3 patches
1: [(y//x), (z//x)] affine 2-space
2: [(x//y), (z//y)] affine 2-space
3: [(x//z), (y//z)] affine 2-space
defined by
sheaf of ideals with restrictions
1: Ideal (-(y//x)^2*(z//x) + 1)
2: Ideal ((x//y)^3 - (z//y))
3: Ideal ((x//z)^3 - (y//z)^2)
julia> cartier_divisor(E)
Cartier divisor
on scheme over QQ covered with 3 patches
with coefficients in integer ring
defined by the formal sum of
1 * effective cartier divisor on scheme over QQ covered with 3 patches
cartier_divisor
— Methodcartier_divisor(IP::AbsProjectiveScheme, f::Union{MPolyDecRingElem, MPolyQuoRingElem})
Return the (effective) Cartier divisor on the projective scheme $X$ defined by the homogeneous polynomial $f$.
Attributes
ideal_sheaf
— Methodideal_sheaf(C::EffectiveCartierDivisor)
Return the sheaf of ideals $\mathcal{I}_C \subseteq \mathcal{O}_X$ representing C
.
ambient_scheme
— Methodambient_scheme(C::EffectiveCartierDivisor)
Return the ambient scheme containing C
.
ambient_scheme
— Methodambient_scheme(C::CartierDivisor)
Return the ambient scheme containing C
.
coefficient_ring
— Methodcoefficient_ring(C::CartierDivisor)
Return the ring of coefficients of C
.
components
— Methodcomponents(C::CartierDivisor)
Return a list of effective Cartier divisors $C_i$ such that $C$ is a linear combination of the $C_i$.
trivializing_covering
— Methodtrivializing_covering(C::EffectiveCartierDivisor)
Return the trivializing covering of the effective Cartier divisor C
.
A covering $(U_i)_{i \in I}$ is called trivializing for $C$ if $C(U_i)$ is principal for all $i \in I$.