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_ringMethod
base_ring(X::AbsProjectiveScheme)

On $X ⊂ ℙʳ_A$ this returns $A$.

source
base_schemeMethod
base_scheme(X::AbsProjectiveScheme)

Return the base scheme $Y$ for $X ⊂ ℙʳ×ₖ Y → Y$ with $Y$ defined over a field $𝕜$.

source
homogeneous_coordinate_ringMethod
homogeneous_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)
source
relative_ambient_dimensionMethod
relative_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
source
ambient_coordinate_ringMethod
ambient_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
source
ambient_spaceMethod
ambient_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

source
defining_idealMethod
defining_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()
source
affine_coneMethod
affine_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)
source
homogeneous_coordinates_on_affine_coneMethod
homogeneous_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
source
covered_schemeMethod
covered_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
source

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_spaceMethod
projective_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]
source
projective_spaceMethod
projective_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.

source

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_mapMethod
dehomogenization_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)
source
dehomogenization_mapMethod
dehomogenization_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.

source
homogenization_mapMethod
homogenization_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)
source

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})