Sheaves on covered schemes
OSCAR supports modeling sheaves by means of a covering by affine charts.
Presheaves
AbsPreSheaf — TypeAbsPreSheaf{SpaceType, OpenType, OutputType, RestrictionType}Abstract type for a sheaf ℱ on a space X.
- SpaceTypeis a parameter for the type of the space $X$ on which $ℱ$ is defined.
- OpenTypeis a type (most probably abstract!) for the open sets $U ⊂ X$ which are admissible as input for $ℱ(U)$.
- OutputTypeis a type (most probably abstract!) for the values that $ℱ$ takes on admissible open sets $U$.
- RestrictionTypeis 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- Fon- 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.
PreSheafOnScheme — TypePreSheafOnSchemeA basic minimal implementation of the interface for AbsPreSheaf; to be used internally.
Structure sheaves
StructureSheafOfRings — TypeStructureSheafOfRings <: AbsPreSheafOn 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::AbsAffineSchemeamong the- basic_patchesof the- default_coveringof- X;
- U::PrincipalOpenSubsetwith- ambient_scheme(U)in the- basic_patchesof the- default_coveringof- X;
- W::AffineSchemeOpenSubschemewith- ambient_scheme(W)in the- basic_patchesof the- default_coveringof- 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
Ideal sheaves
AbsIdealSheaf — TypeAbsIdealSheaf <: AbsPreSheafA 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)
IdealSheaf — TypeIdealSheaf <: AbsIdealSheafA sheaf of ideals $ℐ$ on an AbsCoveredScheme $X$ which is specified  by a collection of concrete ideals on some open covering of $X$.
PrimeIdealSheafFromChart — TypePrimeIdealSheafFromChartType 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
SumIdealSheaf — TypeSumIdealSheafSum 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)
ProductIdealSheaf — TypeProductIdealSheafProduct 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)
SimplifiedIdealSheaf — TypeSimplifiedIdealSheafFor 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
PullbackIdealSheaf — TypePullbackIdealSheafGiven 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}
RadicalOfIdealSheaf — TypeRadicalOfIdealSheafGiven 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
  (y//x)
  (y//x)*(z//x)
  (z//x)
ToricIdealSheafFromCoxRingIdeal — TypeToricIdealSheafFromCoxRingIdealThis 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}
SingularLocusIdealSheaf — TypeSingularLocusIdealSheafThis 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_1_3, x_2_3)
julia> typeof(JJ)
Oscar.SingularLocusIdealSheaf{CoveredScheme{QQField}, AbsAffineScheme, Ideal, Map}
Coherent sheaves of modules
These are some types for coherent sheaves.
SheafOfModules — TypeSheafOfModules <: AbsPreSheafA sheaf of modules $ℳ$ on an AbsCoveredScheme $X$.
Note that due to technical reasons, the admissible open subsets are restricted to the following:
- U::AbsAffineSchemeamong the- basic_patchesof the- default_coveringof- X;
- U::PrincipalOpenSubsetwith- ambient_scheme(U)in the- basic_patchesof the- default_coveringof- X.
One can call the restriction maps of $ℳ$ across charts implicitly using the identifications given by the gluings in the default_covering.
HomSheaf — TypeHomSheafFor 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}
PushforwardSheaf — TypePushforwardSheafFor 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}
PullbackSheaf — TypePullbackSheafFor 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}
DirectSumSheaf — TypeDirectSumSheafGiven 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 FreeMod{FqMPolyRingElem}[Multivariate polynomial ring in 1 variable over GF(7)^1, Multivariate polynomial ring in 1 variable over GF(7)^1]
  2: direct sum of FreeMod{FqMPolyRingElem}[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}
We provide some common constructors.
twisting_sheaf — Methodtwisting_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 QQtautological_bundle — Methodtautological_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 QQcotangent_sheaf — Methodcotangent_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)
free_module — Methodfree_module(R::StructureSheafOfRings, n::Int)Return the sheaf of free $𝒪$-modules $𝒪ⁿ$ for a structure sheaf of rings $𝒪 = R$.
dual — Methoddual(M::SheafOfModules)For a SheafOfModules $ℳ$ on an AbsCoveredScheme $X$, return the $𝒪_X$-dual $ℋ om_{𝒪_X}(ℳ , 𝒪_X)$ of $ℳ$.
tangent_sheaf — Methodtangent_sheaf(X::AbsCoveredScheme)Return the tangent sheaf $T_X$ of X, constructed as $ℋ om_{𝒪_X}(Ω¹_X, 𝒪_X)$.
projectivization — Methodprojectivization(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.