Covered schemes

Oscar supports modeling abstract schemes by means of a covering by affine charts.

Types

The abstract type for these is:

AbsCoveredSchemeType
AbsCoveredScheme{BaseRingType}

An abstract scheme $X$ over some base_ring $𝕜$ of type BaseRingType, given by means of affine charts and their glueings.

source

The basic concrete instance of an AbsCoveredScheme is:

CoveredSchemeType
CoveredScheme{BaseRingType}

A covered scheme $X$ given by means of at least one Covering.

A scheme may possess several coverings which are partially ordered by refinement. Use default_covering(X) to obtain one covering of $X$.

source

Constructors

You can manually construct a CoveredScheme from a Covering using

CoveredSchemeMethod
CoveredScheme(C::Covering)

Return a CoveredScheme $X$ with C as its default_covering.

Examples

julia> P1, (x,y) = QQ["x", "y"];

julia> P2, (u,v) = QQ["u", "v"];

julia> U1 = Spec(P1);

julia> U2 = Spec(P2);

julia> C = Covering([U1, U2]) # A Covering with two disjoint affine charts
Covering with 2 patches

julia> V1 = PrincipalOpenSubset(U1, x); # Preparations for glueing

julia> V2 = PrincipalOpenSubset(U2, u);

julia> f = SpecMor(V1, V2, [1//x, y//x]); # The glueing isomorphism

julia> g = SpecMor(V2, V1, [1//u, v//u]); # and its inverse

julia> G = Glueing(U1, U2, f, g); # Construct the glueing

julia> add_glueing!(C, G) # Make the glueing part of the Covering
Covering with 2 patches

julia> X = CoveredScheme(C) # Create a CoveredScheme from the Glueing
covered scheme with 2 affine patches in its default covering
source

In most cases, however, you may wish for the computer to provide you with a ready-made Covering and use a more high-level constructor, such as, for instance,

covered_schemeMethod
covered_scheme(P::ProjectiveScheme)

Return a CoveredScheme $X$ isomorphic to P with standard affine charts given by dehomogenization.

Use dehomogenize(P, U) with U one of the affine_charts of $X$ to obtain the dehomogenization map from the ambient_coordinate_ring of P to the coordinate_ring of U.

Example

julia> P = projective_space(QQ, 2);

julia> Pcov = covered_scheme(P)
covered scheme with 3 affine patches in its default covering
source

Attributes

To access the affine charts of a CoveredScheme $X$ use

affine_chartsMethod
affine_charts(X::AbsCoveredScheme)

Return the affine charts in the default_covering of $X$.

Examples

julia> P = projective_space(QQ, 2);

julia> S = ambient_coordinate_ring(P);

julia> I = ideal(S, [S[1]*S[2]-S[3]^2]);

julia> X = subscheme(P, I);

julia> Xcov = covered_scheme(X)
covered scheme with 3 affine patches in its default covering

julia> affine_charts(Xcov)
3-element Vector{AbsSpec}:
 Spec of Quotient of Multivariate Polynomial Ring in (s1//s0), (s2//s0) over Rational Field by ideal((s1//s0) - (s2//s0)^2, 0)
 Spec of Quotient of Multivariate Polynomial Ring in (s0//s1), (s2//s1) over Rational Field by ideal((s0//s1) - (s2//s1)^2, 0)
 Spec of Quotient of Multivariate Polynomial Ring in (s0//s2), (s1//s2) over Rational Field by ideal((s0//s2)*(s1//s2) - 1, 0)
source

Other attributes are the base_ring over which the scheme is defined and

default_coveringMethod
default_covering(X::AbsCoveredScheme)

Return the default covering for $X$.

Examples

julia> P = projective_space(QQ, 2);

julia> S = ambient_coordinate_ring(P);

julia> I = ideal(S, [S[1]*S[2]-S[3]^2]);

julia> X = subscheme(P, I);

julia> Xcov = covered_scheme(X)
covered scheme with 3 affine patches in its default covering

julia> default_covering(Xcov)
Covering with 3 patches
source
coveringsMethod
coverings(X::AbsCoveredScheme)

Return the list of internally stored Coverings of $X$.

Examples

julia> P = projective_space(QQ, 2);

julia> Pcov = covered_scheme(P);

julia> coverings(Pcov)
1-element Vector{Covering{FlintRationalField}}:
 Covering with 3 patches
source

Properties

An AbsCoveredScheme may have different properties such as

    is_empty(X::AbsCoveredScheme)
    is_smooth(X::AbsCoveredScheme)