Sheaves on covered schemes

Oscar supports modeling sheaves by means of a covering by affine charts.

Presheaves

AbsPreSheafType
AbsPreSheaf{SpaceType, OpenType, OutputType, RestrictionType}

Abstract type for a sheaf ℱ on a space X.

  • SpaceType is a parameter for the type of the space $X$ on which $ℱ$ is defined.

  • OpenType is a type (most probably abstract!) for the open sets $U ⊂ X$ which are admissible as input for $ℱ(U)$.

  • OutputType is a type (most probably abstract!) for the values that $ℱ$ takes on admissible open sets $U$.

  • RestrictionType is a parameter for the type of the restriction maps $ℱ(V) → ℱ(U)$ for $U ⊂ V ⊂ X$ open.

For any instance F of AbsPreSheaf on a topological space X the following methods are implemented:

  • F(U) for admissible open subsets $U ⊂ X$: This returns the value $ℱ(U)$ of the sheaf F on U. Note that due to technical limitations, not every type of open subset might be admissible.

  • restriction_map(F, U, V) for admissible open subsets $V ⊂ U ⊂ X$: This returns the restriction map $ρ : ℱ(U) → ℱ(V)$. Alternatively, one may also call F(U, V) to get this map.

source
PreSheafOnSchemeType
PreSheafOnScheme

A basic minimal implementation of the interface for AbsPreSheaf; to be used internally.

source

Structure sheaves

StructureSheafOfRingsType
StructureSheafOfRings <: AbsPreSheaf

On an AbsCoveredScheme $X$ this returns the sheaf $𝒪$ of rings of regular functions on $X$.

Note that due to technical reasons, the admissible open subsets are restricted to the following:

  • U::AbsAffineScheme among the basic_patches of the default_covering of X;
  • U::PrincipalOpenSubset with ambient_scheme(U) in the basic_patches of the default_covering of X;
  • W::AffineSchemeOpenSubscheme with ambient_scheme(W) in the basic_patches of the default_covering of X.

One can call the restriction maps of $𝒪$ across charts, implicitly using the identifications given by the gluings in the default_covering.

Examples

julia> IP2 = projective_space(GF(7), [:x, :y, :z])
Projective space of dimension 2
  over prime field of characteristic 7
with homogeneous coordinates [x, y, z]

julia> X = covered_scheme(IP2)
Scheme
  over prime field of characteristic 7
with default covering
  described by patches
    1: affine 2-space
    2: affine 2-space
    3: affine 2-space
  in the coordinate(s)
    1: [(y//x), (z//x)]
    2: [(x//y), (z//y)]
    3: [(x//z), (y//z)]

julia> OOX = OO(X)
Structure sheaf of rings of regular functions
  on scheme over GF(7) covered with 3 patches
    1: [(y//x), (z//x)]   affine 2-space
    2: [(x//y), (z//y)]   affine 2-space
    3: [(x//z), (y//z)]   affine 2-space

julia> typeof(OOX)
StructureSheafOfRings{CoveredScheme{FqField}, Union{AbsAffineScheme, AffineSchemeOpenSubscheme}, Ring, Map}

julia> U, V, W = affine_charts(X)
3-element Vector{AffineScheme{FqField, FqMPolyRing}}:
 Affine 2-space
 Affine 2-space
 Affine 2-space

julia> glue = default_covering(X)[U, V]
Gluing
  of affine 2-space
  and affine 2-space
along the open subsets
  [(y//x), (z//x)]   AA^2 \ scheme((y//x))
  [(x//y), (z//y)]   AA^2 \ scheme((x//y))
given by the pullback function
  (x//y) -> 1/(y//x)
  (z//y) -> (z//x)/(y//x)

julia> UV, VU = gluing_domains(glue)
(AA^2 \ scheme((y//x)), AA^2 \ scheme((x//y)))

julia> y, z = gens(OOX(U))
2-element Vector{FqMPolyRingElem}:
 (y//x)
 (z//x)

julia> pb = OOX(U, VU)
Ring homomorphism
  from multivariate polynomial ring in 2 variables over GF(7)
  to localization of multivariate polynomial ring in 2 variables over GF(7) at products of ((x//y))
defined by
  (y//x) -> 1/(x//y)
  (z//x) -> (z//y)/(x//y)

julia> pb(y^2)
1/(x//y)^2
source

Ideal sheaves

AbsIdealSheafType
AbsIdealSheaf <: AbsPreSheaf

A sheaf of ideals $I$ on an AbsCoveredScheme $X$.

For an affine open subset $U ⊂ X$ call $I(U)$ to obtain an ideal in OO(U) representing I.

Examples

julia> IP2 = projective_space(GF(7), [:x, :y, :z])
Projective space of dimension 2
  over prime field of characteristic 7
with homogeneous coordinates [x, y, z]

julia> X = covered_scheme(IP2)
Scheme
  over prime field of characteristic 7
with default covering
  described by patches
    1: affine 2-space
    2: affine 2-space
    3: affine 2-space
  in the coordinate(s)
    1: [(y//x), (z//x)]
    2: [(x//y), (z//y)]
    3: [(x//z), (y//z)]

julia> S = homogeneous_coordinate_ring(IP2)
Multivariate polynomial ring in 3 variables over GF(7) graded by
  x -> [1]
  y -> [1]
  z -> [1]

julia> II = ideal_sheaf(IP2, ideal(S, [S[1] + S[2]]))
Sheaf of ideals
  on scheme over GF(7) covered with 3 patches
    1: [(y//x), (z//x)]   affine 2-space
    2: [(x//y), (z//y)]   affine 2-space
    3: [(x//z), (y//z)]   affine 2-space
with restrictions
  1: Ideal ((y//x) + 1)
  2: Ideal ((x//y) + 1)
  3: Ideal ((x//z) + (y//z))

julia> U, V, W = affine_charts(X)
3-element Vector{AffineScheme{FqField, FqMPolyRing}}:
 Affine 2-space
 Affine 2-space
 Affine 2-space

julia> II(U)
Ideal generated by
  (y//x) + 1

julia> II(V)
Ideal generated by
  (x//y) + 1

julia> glue = default_covering(X)[U, V];

julia> UV, VU = gluing_domains(glue);

julia> II(U, VU) # transition functions are ring homomorphisms for ideal sheaves!
Ring homomorphism
  from multivariate polynomial ring in 2 variables over GF(7)
  to localization of multivariate polynomial ring in 2 variables over GF(7) at products of ((x//y))
defined by
  (y//x) -> 1/(x//y)
  (z//x) -> (z//y)/(x//y)
source
IdealSheafType
IdealSheaf <: AbsIdealSheaf

A sheaf of ideals $ℐ$ on an AbsCoveredScheme $X$ which is specified by a collection of concrete ideals on some open covering of $X$.

source
PrimeIdealSheafFromChartType
PrimeIdealSheafFromChart

Type for sheaves of prime ideals $P$ on a covered scheme $X$ constructed from a prime ideal of the coordinate ring of a chart. Essentially this is a scheme theoretic point.

For $U$ an affine chart of $X$, the ideal $P(U)$ is computed using the gluings. The implementation is lazy.

Examples

julia> IP2 = projective_space(GF(7), [:x, :y, :z])
Projective space of dimension 2
  over prime field of characteristic 7
with homogeneous coordinates [x, y, z]

julia> X = covered_scheme(IP2)
Scheme
  over prime field of characteristic 7
with default covering
  described by patches
    1: affine 2-space
    2: affine 2-space
    3: affine 2-space
  in the coordinate(s)
    1: [(y//x), (z//x)]
    2: [(x//y), (z//y)]
    3: [(x//z), (y//z)]

julia> U, V, W = affine_charts(X);

julia> glue = default_covering(X)[U, V];

julia> y, z = gens(OO(U))
2-element Vector{FqMPolyRingElem}:
 (y//x)
 (z//x)

julia> P = ideal(OO(U), [y - z])
Ideal generated by
  (y//x) + 6*(z//x)

julia> PP = Oscar.PrimeIdealSheafFromChart(X, U, P)
Prime ideal sheaf on Scheme over GF(7) covered with 3 patches extended from Ideal ((y//x) + 6*(z//x)) on Affine 2-space

julia> PP(W)
Ideal generated by
  (y//z) + 6
source
SumIdealSheafType
SumIdealSheaf

Sum of two or more ideal sheaves.

Examples

julia> IP2 = projective_space(GF(7), [:x, :y, :z])
Projective space of dimension 2
  over prime field of characteristic 7
with homogeneous coordinates [x, y, z]

julia> X = covered_scheme(IP2)
Scheme
  over prime field of characteristic 7
with default covering
  described by patches
    1: affine 2-space
    2: affine 2-space
    3: affine 2-space
  in the coordinate(s)
    1: [(y//x), (z//x)]
    2: [(x//y), (z//y)]
    3: [(x//z), (y//z)]

julia> U, V, W = affine_charts(X);

julia> y, z = gens(OO(U));

julia> P1 = ideal(OO(U), [y - z]);

julia> PP1 = Oscar.PrimeIdealSheafFromChart(X, U, P1);

julia> P2 = ideal(OO(V), [OO(V)[1]]);

julia> PP2 = Oscar.PrimeIdealSheafFromChart(X, V, P2)
Prime ideal sheaf on Scheme over GF(7) covered with 3 patches extended from Ideal ((x//y)) on Affine 2-space

julia> II = PP1 + PP2
Sum of
  Prime ideal sheaf on scheme over GF(7) covered with 3 patches extended from ideal ((y//x) + 6*(z//x)) on affine 2-space
  Prime ideal sheaf on scheme over GF(7) covered with 3 patches extended from ideal ((x//y)) on affine 2-space

julia> typeof(II)
Oscar.SumIdealSheaf{CoveredScheme{FqField}, AbsAffineScheme, Ideal, Map}

julia> II(W)
Ideal generated by
  (y//z) + 6
  (x//z)
source
ProductIdealSheafType
ProductIdealSheaf

Product of two or more ideal sheaves.

Examples

julia> IP2 = projective_space(GF(7), [:x, :y, :z])
Projective space of dimension 2
  over prime field of characteristic 7
with homogeneous coordinates [x, y, z]

julia> X = covered_scheme(IP2)
Scheme
  over prime field of characteristic 7
with default covering
  described by patches
    1: affine 2-space
    2: affine 2-space
    3: affine 2-space
  in the coordinate(s)
    1: [(y//x), (z//x)]
    2: [(x//y), (z//y)]
    3: [(x//z), (y//z)]

julia> U, V, W = affine_charts(X);

julia> y, z = gens(OO(U));

julia> P1 = ideal(OO(U), [y - z]);

julia> PP1 = Oscar.PrimeIdealSheafFromChart(X, U, P1);

julia> P2 = ideal(OO(V), [OO(V)[1]]);

julia> PP2 = Oscar.PrimeIdealSheafFromChart(X, V, P2)
Prime ideal sheaf on Scheme over GF(7) covered with 3 patches extended from Ideal ((x//y)) on Affine 2-space

julia> II = PP1 * PP2
Product of
  Prime ideal sheaf on scheme over GF(7) covered with 3 patches extended from ideal ((y//x) + 6*(z//x)) on affine 2-space
  Prime ideal sheaf on scheme over GF(7) covered with 3 patches extended from ideal ((x//y)) on affine 2-space

julia> typeof(II)
Oscar.ProductIdealSheaf{CoveredScheme{FqField}, AbsAffineScheme, Ideal, Map}

julia> II(W)
Ideal generated by
  (x//z)*(y//z) + 6*(x//z)
source
SimplifiedIdealSheafType
SimplifiedIdealSheaf

For a given AbsIdealSheaf II on an AbsCoveredScheme X this uses a heuristic to replace the generating set of II(U) by a hopefully smaller one on every affine chart of X.

Examples

julia> IP2 = projective_space(GF(7), [:x, :y, :z])
Projective space of dimension 2
  over prime field of characteristic 7
with homogeneous coordinates [x, y, z]

julia> X = covered_scheme(IP2)
Scheme
  over prime field of characteristic 7
with default covering
  described by patches
    1: affine 2-space
    2: affine 2-space
    3: affine 2-space
  in the coordinate(s)
    1: [(y//x), (z//x)]
    2: [(x//y), (z//y)]
    3: [(x//z), (y//z)]

julia> U, V, W = affine_charts(X);

julia> y, z = gens(OO(U));

julia> P1 = ideal(OO(U), [y - z]);

julia> PP1 = Oscar.PrimeIdealSheafFromChart(X, U, P1);

julia> P2 = ideal(OO(V), [OO(V)[1], OO(V)[2]]);

julia> PP2 = Oscar.PrimeIdealSheafFromChart(X, V, P2)
Prime ideal sheaf on Scheme over GF(7) covered with 3 patches extended from Ideal ((x//y), (z//y)) on Affine 2-space

julia> II = PP1 + PP2
Sum of 
  Prime ideal sheaf on scheme over GF(7) covered with 3 patches extended from ideal ((y//x) + 
  6*(z//x)) on affine 2-space
  Prime ideal sheaf on scheme over GF(7) covered with 3 patches extended from ideal ((x//y), (
  z//y)) on affine 2-space

julia> JJ = simplify(II)
Sheaf of ideals
  on scheme over GF(7) covered with 3 patches
    1: [(y//x), (z//x)]   affine 2-space
    2: [(x//y), (z//y)]   affine 2-space
    3: [(x//z), (y//z)]   affine 2-space
with restrictions
  1: Ideal (1)
  2: Ideal (1)
  3: Ideal (1)

julia> typeof(JJ)
Oscar.SimplifiedIdealSheaf{CoveredScheme{FqField}, AbsAffineScheme, Ideal, Map}

julia> II(W)
Ideal generated by
  (y//z) + 6
  1

julia> JJ(W)
Ideal generated by
  1
source
PullbackIdealSheafType
PullbackIdealSheaf

Given an morphism f : X -> Y of AbsCoveredSchemes and an ideal sheaf II on Y, this computes the pullback f^* II on X.

Examples

julia> IP2 = projective_space(GF(7), [:x, :y, :z])
Projective space of dimension 2
  over prime field of characteristic 7
with homogeneous coordinates [x, y, z]

julia> Y = covered_scheme(IP2)
Scheme
  over prime field of characteristic 7
with default covering
  described by patches
    1: affine 2-space
    2: affine 2-space
    3: affine 2-space
  in the coordinate(s)
    1: [(y//x), (z//x)]
    2: [(x//y), (z//y)]
    3: [(x//z), (y//z)]

julia> U, _ = affine_charts(Y);

julia> y, z = gens(OO(U));

julia> P1 = ideal(OO(U), [y, z]);

julia> PP1 = Oscar.PrimeIdealSheafFromChart(Y, U, P1);

julia> bl = blow_up(PP1);

julia> X = domain(bl);

julia> JJ = pullback(bl, PP1)
Sheaf of ideals
  on scheme over GF(7) covered with 4 patches
    1: [(s1//s0), (y//x)]   scheme(0)
    2: [(s0//s1), (z//x)]   scheme(0)
    3: [(x//y), (z//y)]     affine 2-space
    4: [(x//z), (y//z)]     affine 2-space
with restrictions
  1: Ideal ((y//x), (s1//s0)*(y//x))
  2: Ideal ((s0//s1)*(z//x), (z//x))
  3: Ideal (1)
  4: Ideal (1)

julia> typeof(JJ)
Oscar.PullbackIdealSheaf{CoveredScheme{FqField}, AbsAffineScheme, Ideal, Map}
source
RadicalOfIdealSheafType
RadicalOfIdealSheaf

Given an AbsIdealSheaf II on an AbsCoveredScheme X, this computes the sheaf associated to the radicals of the ideals on the charts.

Examples

julia> IP2 = projective_space(GF(7), [:x, :y, :z])
Projective space of dimension 2
  over prime field of characteristic 7
with homogeneous coordinates [x, y, z]

julia> Y = covered_scheme(IP2)
Scheme
  over prime field of characteristic 7
with default covering
  described by patches
    1: affine 2-space
    2: affine 2-space
    3: affine 2-space
  in the coordinate(s)
    1: [(y//x), (z//x)]
    2: [(x//y), (z//y)]
    3: [(x//z), (y//z)]

julia> U, _ = affine_charts(Y);

julia> y, z = gens(OO(U));

julia> P1 = ideal(OO(U), [y, z]);

julia> PP1 = Oscar.PrimeIdealSheafFromChart(Y, U, P1);

julia> PP1_squared = PP1^2;

julia> JJ = radical(PP1_squared);

julia> typeof(JJ)
Oscar.RadicalOfIdealSheaf{CoveredScheme{FqField}, AbsAffineScheme, Ideal, Map}

julia> PP1_squared(U)
Ideal generated by
  (y//x)^2
  (y//x)*(z//x)
  (z//x)^2

julia> JJ(U)
Ideal generated by
  (z//x)
  (y//x)
source
ToricIdealSheafFromCoxRingIdealType
ToricIdealSheafFromCoxRingIdeal

This is the ideal sheaf associated to a NormalToricVariety X with cox_ring S and an ideal I of S.

Examples

julia> IP2 = projective_space(NormalToricVariety, 2)
Normal toric variety

julia> S = cox_ring(IP2)
Multivariate polynomial ring in 3 variables over QQ graded by
  x1 -> [1]
  x2 -> [1]
  x3 -> [1]

julia> x, y, z = gens(S);

julia> I = ideal(S, x^2 - y*z);

julia> II = ideal_sheaf(IP2, I)
Sheaf of ideals
  on normal toric variety
with restrictions
  1: Ideal (x_1_1^2 - x_2_1)
  2: Ideal (x_1_2*x_2_2 - 1)
  3: Ideal (x_1_3^2 - x_2_3)

julia> typeof(II)
Oscar.ToricIdealSheafFromCoxRingIdeal{NormalToricVariety, AbsAffineScheme, Ideal, Map}
source
SingularLocusIdealSheafType
SingularLocusIdealSheaf

This is the (radical) ideal sheaf for the singular locus of an AbsCoveredScheme X.

Examples

julia> IP2 = projective_space(NormalToricVariety, 2)
Normal toric variety

julia> S = cox_ring(IP2)
Multivariate polynomial ring in 3 variables over QQ graded by
  x1 -> [1]
  x2 -> [1]
  x3 -> [1]

julia> x, y, z = gens(S);

julia> I = ideal(S, x^3 - y*z^2);

julia> II = ideal_sheaf(IP2, I);

julia> X, inc_X = sub(II);

julia> JJ = Oscar.ideal_sheaf_of_singular_locus(X)
Sheaf of ideals
  on scheme over QQ covered with 3 patches
    1: [x_1_1, x_2_1]   scheme(x_1_1^3 - x_2_1)
    2: [x_1_2, x_2_2]   scheme(x_1_2^2*x_2_2 - 1)
    3: [x_1_3, x_2_3]   scheme(x_1_3^3 - x_2_3^2)
with restrictions
  1: Ideal (1)
  2: Ideal (1)
  3: Ideal (x_2_3, x_1_3)

julia> typeof(JJ)
Oscar.SingularLocusIdealSheaf{CoveredScheme{QQField}, AbsAffineScheme, Ideal, Map}
source

Coherent sheaves of modules

These are some types for coherent sheaves.

SheafOfModulesType
SheafOfModules <: AbsPreSheaf

A sheaf of modules $ℳ$ on an AbsCoveredScheme $X$.

Note that due to technical reasons, the admissible open subsets are restricted to the following:

  • U::AbsAffineScheme among the basic_patches of the default_covering of X;
  • U::PrincipalOpenSubset with ambient_scheme(U) in the basic_patches of the default_covering of X.

One can call the restriction maps of $ℳ$ across charts implicitly using the identifications given by the gluings in the default_covering.

source
HomSheafType
HomSheaf

For two AbsCoherentSheafs F and G on an AbsCoveredScheme X this computes the sheaf associated to U -> Hom(F(U), G(U)).

Examples

julia> IP1 = projective_space(GF(7), [:x, :y])
Projective space of dimension 1
  over prime field of characteristic 7
with homogeneous coordinates [x, y]

julia> Y = covered_scheme(IP1);

julia> Omega = cotangent_sheaf(Y)
Coherent sheaf of modules
  on scheme over GF(7) covered with 2 patches
    1: [(y//x)]   affine 1-space
    2: [(x//y)]   affine 1-space
with restrictions
  1: free module of rank 1 over multivariate polynomial ring in 1 variable over GF(7)
  2: free module of rank 1 over multivariate polynomial ring in 1 variable over GF(7)

julia> F = free_module(OO(Y), 1)
Coherent sheaf of modules
  on scheme over GF(7) covered with 2 patches
    1: [(y//x)]   affine 1-space
    2: [(x//y)]   affine 1-space
with restrictions
  1: free module of rank 1 over multivariate polynomial ring in 1 variable over GF(7)
  2: free module of rank 1 over multivariate polynomial ring in 1 variable over GF(7)

julia> T = Oscar.HomSheaf(Omega, F)
Coherent sheaf of modules
  on scheme over GF(7) covered with 2 patches
    1: [(y//x)]   affine 1-space
    2: [(x//y)]   affine 1-space
with restrictions
  1: hom of (Multivariate polynomial ring in 1 variable over GF(7)^1, Multivariate polynomial ring in 1 variable over GF(7)^1)
  2: hom of (Multivariate polynomial ring in 1 variable over GF(7)^1, Multivariate polynomial ring in 1 variable over GF(7)^1)

julia> typeof(T)
Oscar.HomSheaf{CoveredScheme{FqField}, AbsAffineScheme, ModuleFP, Map}

source
PushforwardSheafType
PushforwardSheaf

For a CoveredClosedEmbedding i : X -> Y and an AbsCoherentSheaf F on X this computes the coherent sheaf i_* F on Y.

Examples

julia> IP2 = projective_space(NormalToricVariety, 2)
Normal toric variety

julia> S = cox_ring(IP2)
Multivariate polynomial ring in 3 variables over QQ graded by
  x1 -> [1]
  x2 -> [1]
  x3 -> [1]

julia> x, y, z = gens(S);

julia> I = ideal(S, x^3 - y*z^2);

julia> II = ideal_sheaf(IP2, I);

julia> X, inc_X = sub(II);

julia> F = cotangent_sheaf(X)
Coherent sheaf of modules
  on scheme over QQ covered with 3 patches
    1: [x_1_1, x_2_1]   scheme(x_1_1^3 - x_2_1)
    2: [x_1_2, x_2_2]   scheme(x_1_2^2*x_2_2 - 1)
    3: [x_1_3, x_2_3]   scheme(x_1_3^3 - x_2_3^2)
with restrictions
  1: subquotient of submodule with 2 generators
    1: dx_1_1
    2: dx_2_1
  by submodule with 1 generator
    1: 3*x_1_1^2*dx_1_1 - dx_2_1
  2: subquotient of submodule with 2 generators
    1: dx_1_2
    2: dx_2_2
  by submodule with 1 generator
    1: 2*x_1_2*x_2_2*dx_1_2 + x_1_2^2*dx_2_2
  3: subquotient of submodule with 2 generators
    1: dx_1_3
    2: dx_2_3
  by submodule with 1 generator
    1: 3*x_1_3^2*dx_1_3 - 2*x_2_3*dx_2_3

julia> inc_F = Oscar.PushforwardSheaf(inc_X, F)
Coherent sheaf of modules
  on normal toric variety
with restrictions
  1: subquotient of submodule with 2 generators
    1: dx_1_1
    2: dx_2_1
  by submodule with 5 generators
    1: (x_1_1^3 - x_2_1)*dx_1_1
    2: (x_1_1^3 - x_2_1)*dx_2_1
    3: 3*x_1_1^2*dx_1_1 - dx_2_1
    4: (x_1_1^3 - x_2_1)*dx_1_1
    5: (x_1_1^3 - x_2_1)*dx_2_1
  2: subquotient of submodule with 2 generators
    1: dx_1_2
    2: dx_2_2
  by submodule with 5 generators
    1: (x_1_2^2*x_2_2 - 1)*dx_1_2
    2: (x_1_2^2*x_2_2 - 1)*dx_2_2
    3: 2*x_1_2*x_2_2*dx_1_2 + x_1_2^2*dx_2_2
    4: (x_1_2^2*x_2_2 - 1)*dx_1_2
    5: (x_1_2^2*x_2_2 - 1)*dx_2_2
  3: subquotient of submodule with 2 generators
    1: dx_1_3
    2: dx_2_3
  by submodule with 5 generators
    1: (x_1_3^3 - x_2_3^2)*dx_1_3
    2: (x_1_3^3 - x_2_3^2)*dx_2_3
    3: 3*x_1_3^2*dx_1_3 - 2*x_2_3*dx_2_3
    4: (x_1_3^3 - x_2_3^2)*dx_1_3
    5: (x_1_3^3 - x_2_3^2)*dx_2_3

julia> typeof(inc_F)
PushforwardSheaf{NormalToricVariety, AbsAffineScheme, ModuleFP, Map}
source
PullbackSheafType
PullbackSheaf

For a morphism f : X -> Y of AbsCoveredSchemes and a coherent sheaf F on Y this computes the pullback f^* F on X.

Examples

julia> IP2 = projective_space(NormalToricVariety, 2)
Normal toric variety

julia> S = cox_ring(IP2)
Multivariate polynomial ring in 3 variables over QQ graded by
  x1 -> [1]
  x2 -> [1]
  x3 -> [1]

julia> x, y, z = gens(S);

julia> I = ideal(S, x^3 - y*z^2);

julia> II = ideal_sheaf(IP2, I);

julia> X, inc_X = sub(II);

julia> F = cotangent_sheaf(codomain(inc_X))
Coherent sheaf of modules
  on normal toric variety
with restrictions
  1: submodule with 2 generators
    1: dx_1_1
    2: dx_2_1
  represented as subquotient with no relations
  2: submodule with 2 generators
    1: dx_1_2
    2: dx_2_2
  represented as subquotient with no relations
  3: submodule with 2 generators
    1: dx_1_3
    2: dx_2_3
  represented as subquotient with no relations

julia> inc_F = Oscar.PullbackSheaf(inc_X, F)
Coherent sheaf of modules
  on scheme over QQ covered with 3 patches
    1: [x_1_1, x_2_1]   scheme(x_1_1^3 - x_2_1)
    2: [x_1_2, x_2_2]   scheme(x_1_2^2*x_2_2 - 1)
    3: [x_1_3, x_2_3]   scheme(x_1_3^3 - x_2_3^2)
with restrictions
  1: submodule with 2 generators
    1: dx_1_1
    2: dx_2_1
  represented as subquotient with no relations
  2: submodule with 2 generators
    1: dx_1_2
    2: dx_2_2
  represented as subquotient with no relations
  3: submodule with 2 generators
    1: dx_1_3
    2: dx_2_3
  represented as subquotient with no relations

julia> typeof(inc_F)
PullbackSheaf{CoveredScheme{QQField}, AbsAffineScheme, ModuleFP, Map}
source
DirectSumSheafType
DirectSumSheaf

Given two or more AbsCoherentSheafs F and G on an AbsCoveredScheme X, this holds the sheaf associated to the direct sum of F and G

Examples

julia> IP1 = projective_space(GF(7), [:x, :y])
Projective space of dimension 1
  over prime field of characteristic 7
with homogeneous coordinates [x, y]

julia> Y = covered_scheme(IP1);

julia> Omega = cotangent_sheaf(Y)
Coherent sheaf of modules
  on scheme over GF(7) covered with 2 patches
    1: [(y//x)]   affine 1-space
    2: [(x//y)]   affine 1-space
with restrictions
  1: free module of rank 1 over multivariate polynomial ring in 1 variable over GF(7)
  2: free module of rank 1 over multivariate polynomial ring in 1 variable over GF(7)

julia> F = free_module(OO(Y), 1)
Coherent sheaf of modules
  on scheme over GF(7) covered with 2 patches
    1: [(y//x)]   affine 1-space
    2: [(x//y)]   affine 1-space
with restrictions
  1: free module of rank 1 over multivariate polynomial ring in 1 variable over GF(7)
  2: free module of rank 1 over multivariate polynomial ring in 1 variable over GF(7)

julia> W = Oscar.DirectSumSheaf(Y, [Omega, F])
Coherent sheaf of modules
  on scheme over GF(7) covered with 2 patches
    1: [(y//x)]   affine 1-space
    2: [(x//y)]   affine 1-space
with restrictions
  1: direct sum of (Multivariate polynomial ring in 1 variable over GF(7)^1, Multivariate polynomial ring in 1 variable over GF(7)^1)
  2: direct sum of (Multivariate polynomial ring in 1 variable over GF(7)^1, Multivariate polynomial ring in 1 variable over GF(7)^1)

julia> typeof(W)
DirectSumSheaf{CoveredScheme{FqField}, AbsAffineScheme, ModuleFP, Map}
source

We provide some common constructors.

twisting_sheafMethod
twisting_sheaf(IP::AbsProjectiveScheme{<:Field}, d::Int)

For a ProjectiveScheme $ℙ$ return the $d$-th twisting sheaf $𝒪(d)$ as a CoherentSheaf on $ℙ$.

Examples

julia> P = projective_space(QQ,3)
Projective space of dimension 3
  over rational field
with homogeneous coordinates [s0, s1, s2, s3]

julia> twisting_sheaf(P, 4)
Coherent sheaf of modules
  on scheme over QQ covered with 4 patches
    1: [(s1//s0), (s2//s0), (s3//s0)]   affine 3-space
    2: [(s0//s1), (s2//s1), (s3//s1)]   affine 3-space
    3: [(s0//s2), (s1//s2), (s3//s2)]   affine 3-space
    4: [(s0//s3), (s1//s3), (s2//s3)]   affine 3-space
with restrictions
  1: free module of rank 1 over multivariate polynomial ring in 3 variables over QQ
  2: free module of rank 1 over multivariate polynomial ring in 3 variables over QQ
  3: free module of rank 1 over multivariate polynomial ring in 3 variables over QQ
  4: free module of rank 1 over multivariate polynomial ring in 3 variables over QQ
source
tautological_bundleMethod
tautological_bundle(IP::AbsProjectiveScheme{<:Field})

For a ProjectiveScheme $ℙ$ return the sheaf $𝒪(-1)$ as a CoherentSheaf on $ℙ$.

Examples

julia> P = projective_space(QQ,3)
Projective space of dimension 3
  over rational field
with homogeneous coordinates [s0, s1, s2, s3]

julia> tautological_bundle(P)
Coherent sheaf of modules
  on scheme over QQ covered with 4 patches
    1: [(s1//s0), (s2//s0), (s3//s0)]   affine 3-space
    2: [(s0//s1), (s2//s1), (s3//s1)]   affine 3-space
    3: [(s0//s2), (s1//s2), (s3//s2)]   affine 3-space
    4: [(s0//s3), (s1//s3), (s2//s3)]   affine 3-space
with restrictions
  1: free module of rank 1 over multivariate polynomial ring in 3 variables over QQ
  2: free module of rank 1 over multivariate polynomial ring in 3 variables over QQ
  3: free module of rank 1 over multivariate polynomial ring in 3 variables over QQ
  4: free module of rank 1 over multivariate polynomial ring in 3 variables over QQ
source
cotangent_sheafMethod
cotangent_sheaf(X::AbsCoveredScheme)

For an AbsCoveredScheme $X$, return the sheaf $Ω¹(X)$ of Kaehler-differentials on $X$ as a CoherentSheaf.

Examples

julia> IP1 = projective_space(QQ, 1);

julia> X = covered_scheme(IP1)
Scheme
  over rational field
with default covering
  described by patches
    1: affine 1-space
    2: affine 1-space
  in the coordinate(s)
    1: [(s1//s0)]
    2: [(s0//s1)]

julia> Omega = cotangent_sheaf(X);

julia> U, V = affine_charts(X);

julia> UV, VU = gluing_domains(default_covering(X)[U, V]);

julia> dx = Omega(U)[1]
d(s1//s0)

julia> Omega(V)
Free module of rank 1 over multivariate polynomial ring in 1 variable over QQ

julia> Omega(U, VU)(dx)
-1/(s0//s1)^2*d(s0//s1)
source
free_moduleMethod
free_module(R::StructureSheafOfRings, n::Int)

Return the sheaf of free $𝒪$-modules $𝒪ⁿ$ for a structure sheaf of rings $𝒪 = R$.

source
dualMethod
dual(M::SheafOfModules)

For a SheafOfModules $ℳ$ on an AbsCoveredScheme $X$, return the $𝒪_X$-dual $ℋ om_{𝒪_X}(ℳ , 𝒪_X)$ of $ℳ$.

source
tangent_sheafMethod
tangent_sheaf(X::AbsCoveredScheme)

Return the tangent sheaf $T_X$ of X, constructed as $ℋ om_{𝒪_X}(Ω¹_X, 𝒪_X)$.

source
projectivizationMethod
projectivization(E::AbsCoherentSheaf;
    var_names::Vector{String}=Vector{String}(),
    check::Bool=true
  )

For a locally free sheaf $E$ on an AbsCoveredScheme $X$ this produces the associated projectivization $ℙ (E) → X$ as a CoveredProjectiveScheme.

A list of names for the variables of the relative homogeneous coordinate rings can be provided with var_names.

!!! note: The sheaf $E$ needs to be locally free so that a trivializing_covering can be computed. The check for this can be turned off by setting check=false.

source