Projective schemes
Let $A$ be a commutative noetherian base ring and $S = A[x_0,\dots, x_n]$ the standard graded polynomial ring over $A$. Then $X = \mathrm{Proj}(S) = \mathbb P^n_A$ is a (relative) projective scheme over $\mathrm{Spec}(A)$. Similarly, for a homogeneous ideal $I \subset S$ we have $X = \mathrm{Proj}(S/I) \subset \mathbb P^n_A$ a (relative) projective scheme over $\mathrm{Spec}(A)$ which is a closed subscheme of $\mathbb P^n_A$ in a natural way. The majority of applications will be in the setting where $A = \mathbb k$ is a field, but be aware that we also support different base rings such as the usual four MPolyRing
, MPolyQuoRing
, MPolyLocRing
, and MPolyQuoLocRing
.
Abstract types and basic interface
The abstract type for such projective schemes is
AbsProjectiveScheme{CoeffRingType, RingType} where {CoeffRingType<:Ring}
where, in the above notation, CoeffRingType
denotes the type of A
and RingType
the type of either S
or S/I
, respectively. The abstract type comes with the following interface:
base_ring
— Methodbase_ring(X::AbsProjectiveScheme)
On $X ⊂ ℙʳ_A$ this returns $A$.
base_scheme
— Methodbase_scheme(X::AbsProjectiveScheme)
Return the base scheme $Y$ for $X ⊂ ℙʳ×ₖ Y → Y$ with $Y$ defined over a field $𝕜$.
homogeneous_coordinate_ring
— Methodhomogeneous_coordinate_ring(P::AbsProjectiveScheme)
On a projective scheme $P = Proj(S)$ for a standard graded finitely generated algebra $S$ this returns $S$.
Example
julia> S, _ = grade(QQ["x", "y", "z"][1]);
julia> I = ideal(S, S[1] + S[2]);
julia> X = ProjectiveScheme(S, I)
Projective scheme
over Rational field
defined by ideal(x + y)
julia> homogeneous_coordinate_ring(X)
Quotient
of graded multivariate polynomial ring in 3 variables over QQ
by ideal(x + y)
relative_ambient_dimension
— Methodrelative_ambient_dimension(X::AbsProjectiveScheme)
On $X ⊂ ℙʳ_A$ this returns $r$.
Example
julia> S, _ = grade(QQ["x", "y", "z"][1]);
julia> I = ideal(S, S[1] + S[2])
ideal(x + y)
julia> X = ProjectiveScheme(S, I)
Projective scheme
over Rational field
defined by ideal(x + y)
julia> relative_ambient_dimension(X)
2
julia> dim(X)
1
ambient_coordinate_ring
— Methodambient_coordinate_ring(P::AbsProjectiveScheme)
On a projective scheme $P = Proj(S)$ with $S = P/I$ for a standard graded polynomial ring $P$ and a homogeneous ideal $I$ this returns $P$.
Example
julia> S, _ = grade(QQ["x", "y", "z"][1])
(Graded multivariate polynomial ring in 3 variables over QQ, MPolyDecRingElem{QQFieldElem, QQMPolyRingElem}[x, y, z])
julia> I = ideal(S, S[1] + S[2])
ideal(x + y)
julia> X = ProjectiveScheme(S, I)
Projective scheme
over Rational field
defined by ideal(x + y)
julia> homogeneous_coordinate_ring(X)
Quotient
of graded multivariate polynomial ring in 3 variables over QQ
by ideal(x + y)
julia> ambient_coordinate_ring(X) === S
true
julia> ambient_coordinate_ring(X) === homogeneous_coordinate_ring(X)
false
ambient_space
— Methodambient_space(X::AbsProjectiveScheme)
On $X ⊂ ℙʳ_A$ this returns $ℙʳ_A$.
Example
```jldoctest julia> S, _ = grade(QQ["x", "y", "z"][1]);
julia> I = ideal(S, S[1] + S[2]);
julia> X = ProjectiveScheme(S, I) Projective scheme over Rational Field defined by ideal(x + y)
julia> P = ambient_space(X) Projective space of dimension 2 over Rational Field
defining_ideal
— Methoddefining_ideal(X::AbsProjectiveScheme)
On $X ⊂ ℙʳ_A$ this returns the homogeneous ideal $I ⊂ A[s₀,…,sᵣ]$ defining $X$.
Example
julia> R, (u, v) = QQ["u", "v"];
julia> Q, _ = quo(R, ideal(R, u^2 + v^2));
julia> S, _ = grade(Q["x", "y", "z"][1])
(Graded multivariate polynomial ring in 3 variables over quotient of multivariate polynomial ring, MPolyDecRingElem{MPolyQuoRingElem{QQMPolyRingElem}, AbstractAlgebra.Generic.MPoly{MPolyQuoRingElem{QQMPolyRingElem}}}[x, y, z])
julia> P = projective_scheme(S);
julia> defining_ideal(P)
ideal()
affine_cone
— Methodaffine_cone(X::AbsProjectiveScheme)
On $X = Proj(S) ⊂ ℙʳ_𝕜$ this returns a pair (C, f)
where $C = C(X) ⊂ 𝕜ʳ⁺¹$ is the affine cone of $X$ and $f : S → 𝒪(C)$ is the morphism of rings from the homogeneous_coordinate_ring
to the coordinate_ring
of the affine cone.
Note that if the base scheme is not affine, then the affine cone is not affine.
Example
julia> R, (u, v) = QQ["u", "v"];
julia> Q, _ = quo(R, ideal(R, u^2 + v^2));
julia> S, _ = grade(Q["x", "y", "z"][1])
(Graded multivariate polynomial ring in 3 variables over quotient of multivariate polynomial ring, MPolyDecRingElem{MPolyQuoRingElem{QQMPolyRingElem}, AbstractAlgebra.Generic.MPoly{MPolyQuoRingElem{QQMPolyRingElem}}}[x, y, z])
julia> P = projective_scheme(S);
julia> affine_cone(P)
(Spec of Quotient of multivariate polynomial ring by ideal with 1 generator, Map with following data
Domain:
=======
S
Codomain:
=========
Quotient of multivariate polynomial ring by ideal with 1 generator)
homogeneous_coordinates_on_affine_cone
— Methodhomogeneous_coordinates_on_affine_cone(X::AbsProjectiveScheme)
On $X ⊂ ℙʳ_A$ this returns a vector with the homogeneous coordinates $[s₀,…,sᵣ]$ as entries where each one of the $sᵢ$ is a function on the affine cone
of $X$.
Example
julia> R, (u, v) = QQ["u", "v"];
julia> Q, _ = quo(R, ideal(R, u^2 + v^2));
julia> S, _ = grade(Q["x", "y", "z"][1])
(Graded multivariate polynomial ring in 3 variables over quotient of multivariate polynomial ring, MPolyDecRingElem{MPolyQuoRingElem{QQMPolyRingElem}, AbstractAlgebra.Generic.MPoly{MPolyQuoRingElem{QQMPolyRingElem}}}[x, y, z])
julia> P = projective_scheme(S);
julia> homogeneous_coordinates_on_affine_cone(P)
3-element Vector{MPolyQuoRingElem{QQMPolyRingElem}}:
x
y
z
julia> gens(OO(affine_cone(P)[1])) # all coordinates on the affine cone
5-element Vector{MPolyQuoRingElem{QQMPolyRingElem}}:
x
y
z
u
v
covered_scheme
— Methodcovered_scheme(P::AbsProjectiveScheme)
Return a CoveredScheme
$X$ isomorphic to P
with standard affine charts given by dehomogenization.
Use dehomogenization_map
with U
one of the affine_charts
of $X$ to obtain the dehomogenization map from the homogeneous_coordinate_ring
of P
to the coordinate_ring
of U
.
Examples
julia> P = projective_space(QQ, 2);
julia> Pcov = covered_scheme(P)
covered scheme with 3 affine patches in its default covering
The minimal concrete type realizing this interface is
ProjectiveScheme{CoeffRingType, RingType} <: AbsProjectiveScheme{CoeffRingType, RingType}
Constructors
Besides ProjectiveScheme(S)
for some graded polynomial ring or a graded affine algebra S
, we provide the following constructors:
projective_scheme(S::MPolyDecRing)
projective_scheme(S::MPolyDecRing, I::MPolyIdeal{T}) where {T<:MPolyDecRingElem}
projective_scheme(I::MPolyIdeal{<:MPolyDecRingElem})
projective_scheme(Q::MPolyQuoRing{MPolyDecRingElem{T, PT}}) where {T, PT<:MPolyRingElem{T}} = ProjectiveScheme(Q)
Subschemes defined by homogeneous ideals, ring elements, or lists of elements can be created via the respective methods of the subscheme(P::AbsProjectiveScheme, ...)
function. Special constructors are provided for projective space itself via the function projective_space
and its various methods.
projective_space
— Methodprojective_space(A::Ring, var_symb::Vector{VarName})
Create the (relative) projective space Proj(A[x₀,…,xₙ])
over A
where x₀,…,xₙ
is a list of variable names.
Examples
julia> projective_space(QQ, [:x, :PPP, :?])
Projective space of dimension 2
with homogeneous coordinates x PPP ?
over Rational field
julia> homogeneous_coordinate_ring(ans)
Multivariate polynomial ring in 3 variables over QQ graded by
x -> [1]
PPP -> [1]
? -> [1]
projective_space
— Methodprojective_space(A::Ring, r::Int; var_name::VarName=:s)
Create the (relative) projective space Proj(A[s₀,…,sᵣ])
over A
where s
is a string for the variable names.
Attributes
Besides those attributes already covered by the above general interface we have the following (self-explanatory) ones for projective schemes over a field.
dim(P::AbsProjectiveScheme{<:Field})
hilbert_polynomial(P::AbsProjectiveScheme{<:Field})
degree(P::AbsProjectiveScheme{<:Field})
arithmetic_genus(P::AbsProjectiveScheme{<:Field})
Methods
To facilitate the interplay between an AbsProjectiveScheme
and the affine charts of its covered_scheme
we provide the following methods:
dehomogenization_map
— Methoddehomogenization_map(X::AbsProjectiveScheme, U::AbsSpec)
Return the restriction morphism from the graded coordinate ring of $X$ to 𝒪(U)
.
Examples
julia> P = projective_space(QQ, ["x0", "x1", "x2"])
Projective space of dimension 2
with homogeneous coordinates x0 x1 x2
over Rational field
julia> X = covered_scheme(P);
julia> U = first(affine_charts(X))
Spec of Quotient of multivariate polynomial ring by ideal with 0 generators
julia> phi = dehomogenization_map(P, U);
julia> S = homogeneous_coordinate_ring(P);
julia> phi(S[2])
(x1//x0)
dehomogenization_map
— Methoddehomogenization_map(X::AbsProjectiveScheme, i::Int)
Return the restriction morphism from the graded coordinate ring of $X$ to 𝒪(Uᵢ)
. Where Uᵢ
is the i
-th affine chart of X
.
homogenization_map
— Methodhomogenization_map(P::AbsProjectiveScheme, U::AbsSpec)
Given an affine chart $U ⊂ P$ of an AbsProjectiveScheme
$P$, return a method $h$ for the homogenization of elements $a ∈ 𝒪(U)$.
This means that $h(a)$ returns a pair $(p, q)$ representing a fraction $p/q ∈ S$ of the ambient_coordinate_ring
of $P$ such that $a$ is the dehomogenization of $p/q$.
Note: For the time being, this only works for affine charts which are of the standard form $sᵢ ≠ 0$ for $sᵢ∈ S$ one of the homogeneous coordinates of $P$.
Note: Since this map returns representatives only, it is not a mathematical morphism and, hence, in particular not an instance of Hecke.Map
.
Examples
julia> A, _ = QQ["u", "v"];
julia> P = projective_space(A, ["x0", "x1", "x2"])
Projective space of dimension 2
with homogeneous coordinates x0 x1 x2
over Multivariate polynomial ring in 2 variables over QQ
julia> X = covered_scheme(P);
julia> U = first(affine_charts(X))
Spec of Localization of quotient of multivariate polynomial ring at products of 1 element
julia> phi = homogenization_map(P, U);
julia> R = OO(U);
julia> phi.(gens(R))
4-element Vector{Tuple{MPolyDecRingElem{QQMPolyRingElem, AbstractAlgebra.Generic.MPoly{QQMPolyRingElem}}, MPolyDecRingElem{QQMPolyRingElem, AbstractAlgebra.Generic.MPoly{QQMPolyRingElem}}}}:
(x1, x0)
(x2, x0)
(u, 1)
(v, 1)
Properties
Further properties of projective schemes (all self-explanatory):
is_empty(P::AbsProjectiveScheme{<:Field})
is_smooth(P::AbsProjectiveScheme)
is_irreducible(P::AbsProjectiveScheme)
is_reduced(P::AbsProjectiveScheme)
is_geometrically_reduced(P::AbsProjectiveScheme{<:Field})
is_geometrically_irreducible(P::AbsProjectiveScheme{<:Field})
is_integral(X::AbsProjectiveScheme{<:Field})
is_geometrically_integral(X::AbsProjectiveScheme{<:Field})