Covered schemes
Oscar supports modeling abstract schemes by means of a covering by affine charts.
Types
The abstract type for these is:
AbsCoveredScheme — TypeAbsCoveredScheme{BaseRingType}An abstract scheme $X$ over some base_ring $𝕜$ of type BaseRingType, given by means of affine charts and their glueings.
The basic concrete instance of an AbsCoveredScheme is:
CoveredScheme — TypeCoveredScheme{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$.
Constructors
You can manually construct a CoveredScheme from a Covering using
CoveredScheme — MethodCoveredScheme(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
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_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 coveringAttributes
To access the affine charts of a CoveredScheme $X$ use
affine_charts — Methodaffine_charts(X::AbsCoveredScheme)Return the affine charts in the default_covering of $X$.
Examples
julia> P = projective_space(QQ, 2);
julia> S = homogeneous_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 by ideal with 1 generator
Spec of Quotient of multivariate polynomial ring by ideal with 1 generator
Spec of Quotient of multivariate polynomial ring by ideal with 1 generator
Other attributes are the base_ring over which the scheme is defined and
default_covering — Methoddefault_covering(X::AbsCoveredScheme)Return the default covering for $X$.
Examples
julia> P = projective_space(QQ, 2);
julia> S = homogeneous_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
Properties
An AbsCoveredScheme may have different properties such as
is_empty(X::AbsCoveredScheme)
is_smooth(X::AbsCoveredScheme)The modeling of covered schemes and their expected behaviour
Any AbsCoveredScheme may possess several Coverings. This is necessary for several reasons; for instance, a morphism $f : X \to Y$ between AbsCoveredSchemes will in general only be given on affine patches on a refinement of the default_covering of X. The list of available Coverings can be obtained using
coverings — Methodcoverings(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{QQField}}:
Covering with 3 patchesEvery AbsCoveredScheme $X$ has to be modeled using one original default_covering $C$, simply to gather the data necessary to fully describe $X$. The affine_charts of $X$ return the patches of this covering. For any refinement $D < C$, we require the following to hold: Every element $U$ of the affine_charts of $D$ is either
- directly an element of the
affine_chartsof $C$; - a
PrincipalOpenSubsetwith some ancestor in theaffine_chartsof $C$; - a
SimplifiedSpecwith some original in theaffine_chartsof $C$.
In all these cases, the affine subsets in the refinements form a tree and thus remember their origins and ambient spaces. In particular, affine patches and also their glueings can be recycled and reused in different coverings and the latter should be merely seen as lists pointing to the objects involved.