Coverings

Coverings are the backbone data structure for CoveredSchemes in Oscar.

CoveringType
Covering

A covering of a scheme $X$ by affine charts $Uᵢ$ which are glued along isomorphisms $gᵢⱼ : Uᵢ⊃ Vᵢⱼ → Vⱼᵢ ⊂ Uⱼ$.

Note: The distinction between the different affine charts of the scheme is made from their hashes. Thus, an affine scheme must not appear more than once in any covering!

source

Constructors

CoveringMethod
Covering(patches::Vector{<:AbsSpec})

Return a Covering with pairwise disjoint affine charts $Uᵢ$ given by the entries of patches. This Covering will have no glueings except those glueings along the identity of every affine chart to itself.

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
source
disjoint_unionMethod
disjoint_union(C1::Covering, C2::Covering)

Return the Covering corresponding to the disjoint union of C1 and C2.

The charts and glueings of the disjoint union are given by the disjoint union of the charts and glueings of the covers C1 and C2.

Examples

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

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

julia> U1 = Spec(P1);

julia> U2 = Spec(P2);

julia> C1 = Covering(U1) # Set up the trivial covering with only one patch
Covering with 1 patch

julia> C2 = Covering(U2)
Covering with 1 patch

julia> C = disjoint_union(C1, C2)
Covering with 2 patches
source

Attributes

affine_chartsMethod
affine_charts(C::Covering)

Return the list of affine charts that make up the Covering C.

source
glueingsMethod
glueings(C::Covering)

Return a dictionary of glueings of the affine_charts of C.

The keys are pairs (U, V) of affine_charts. One can also use C[U, V] to obtain the respective glueing.

Note: Glueings are lazy in the sense that they are in general only computed when asked for. This method only returns the internal cache, but does not try to compute new glueings.

source

Methods

add_glueing!Method
add_glueing!(C::Covering, G::AbsGlueing)

Add a glueing G to the covering C.

The patches of G must be among the affine_charts of C.

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> C[U1, U2] == G # Check whether the glueing of U1 and U2 in C is G.
true
source

Glueings

Glueings are used to identify open subsets $U \subset X$ and $V \subset Y$ of affine schemes along an isomorphism $f \colon U \leftrightarrow V \colon g$.

Types

The abstract type of any such glueing is

AbsGlueingType
AbsGlueing

A glueing of two affine schemes $X$ and $Y$ (the patches) along open subsets $U$ in $X$ and $V$ in $Y$ (the glueing_domains) along mutual isomorphisms $f : U ↔ V : g$ (the glueing_morphisms).

source

The available concrete types are

GlueingType
Glueing

Concrete instance of an AbsGlueing for glueings of affine schemes $X ↩ U ≅ V ↪ Y$ along open subsets $U$ and $V$ of type SpecOpen.

source
SimpleGlueingType
SimpleGlueing

Concrete instance of an AbsGlueing for glueings of affine schemes $X ↩ U ≅ V ↪ Y$ along open subsets $U$ and $V$ of type PrincipalOpenSubset.

source

Constructors

GlueingMethod
Glueing(X::AbsSpec, Y::AbsSpec, f::SchemeMor, g::SchemeMor)

Glue two affine schemes $X$ and $Y$ along mutual isomorphisms $f$ and $g$ of open subsets $U$ of $X$ and $V$ of $Y$.

Examples

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

julia> U1 = Spec(P1); U2 = Spec(P2);

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
Glueing of Spec of Multivariate Polynomial Ring in x, y over Rational Field and Spec of Multivariate Polynomial Ring in u, v over Rational Field along the map morphism from

	Spec of localization of Multivariate Polynomial Ring in x, y over Rational Field at the powers of fmpq_mpoly[x]

to

	Spec of localization of Multivariate Polynomial Ring in u, v over Rational Field at the powers of fmpq_mpoly[u]

with coordinates

	1//x, y//x

julia> typeof(G)<:SimpleGlueing # Since the glueing domains were `PrincipalOpenSubsets`, this defaults to a `SimpleGlueing`
true

julia> # Alternative using SpecOpens as glueing domains:

julia> W1 = SpecOpen(U1, [x]); W2 = SpecOpen(U2, [u]);

julia> h1 = SpecOpenMor(W1, W2, [1//x, y//x]);

julia> h2 = SpecOpenMor(W2, W1, [1//u, v//u]);

julia> H = Glueing(U1, U2, h1, h2)
Glueing of Spec of Multivariate Polynomial Ring in x, y over Rational Field and Spec of Multivariate Polynomial Ring in u, v over Rational Field along the map Morphism from complement of zero locus of fmpq_mpoly[x] in Spec of Multivariate Polynomial Ring in x, y over Rational Field to complement of zero locus of fmpq_mpoly[u] in Spec of Multivariate Polynomial Ring in u, v over Rational Field

julia> typeof(H)<:Glueing
true
source

Attributes

patchesMethod
patches(G::AbsGlueing)

Return a pair of affine schemes (X, Y) which are glued by G.

source
glueing_domainsMethod
glueing_domains(G::AbsGlueing)

Return a pair of open subsets $U$ and $V$ of the respective patches of G which are glued by G along the glueing_morphisms of G.

source
glueing_morphismsMethod
glueing_morphisms(G::AbsGlueing)

Return a pair of mutually inverse isomorphisms (f, g) of open subsets $U$ and $V$ of the respective patches of G which are used for the glueing identification.

source
inverseMethod
inverse(G::AbsGlueing)

Return the glueing H with patches, glueing_domains, and glueing_morphisms in opposite order compared to G.

source

Methods

composeMethod
compose(G::AbsGlueing, H::AbsGlueing)

Given glueings X ↩ U ≅ V ↪ Y and Y ↩ V' ≅ W ↪ Z, return the glueing X ↩ V ∩ V' ↪ Z.

WARNING: In general such a glueing will not provide a separated scheme. Use maximal_extension to extend the glueing.

source
maximal_extensionMethod
maximal_extension(G::Glueing)

Given a glueing X ↩ U ≅ V ↪ Y, try to find the maximal extension to an open subset U' ⊃ U in X and V' ⊃ V in Y so that the resulting scheme is separated.

source
restrictMethod
restrict(G::AbsGlueing, f::AbsSpecMor, g::AbsSpecMor; check::Bool=true)

Given a glueing $X ↩ U ≅ V ↪ Y$ and isomorphisms $f : X → X'$ and $g: Y → Y'$, return the induced glueing of $X'$ and $Y'$.

source