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::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
Attributes
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 = 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)
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 = 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
coverings
— Methodcoverings(X::AbsCoveredScheme)
Return the list of internally stored Covering
s 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
Properties
An AbsCoveredScheme
may have different properties such as
is_empty(X::AbsCoveredScheme)
is_smooth(X::AbsCoveredScheme)