Abstract bundles

An abstract bundle on an abstract variety $X$ is determined by its rank and its Chern character (or, equivalently, its total Chern class). Abstract bundles support the standard operations on vector bundles in algebraic geometry: direct sum, tensor product, duals, determinant bundles, exterior and symmetric powers, as well as pullback and pushforward along abstract variety maps. They also carry the usual characteristic classes: Chern classes, Segre classes, Todd class, and Pontryagin classes.

The arithmetic operations +, -, * on abstract bundles correspond to direct sum, formal difference, and tensor product, respectively. In particular, multiplying a bundle by an integer n gives the direct sum of n copies.

Grothendieck ring and virtual bundles

Abstract bundles live in the Grothendieck ring $\mathrm{K}^0(X)$ of vector bundles on $X$. In this ring, every element can be written as a formal difference $[E] - [F]$ of genuine bundles. The Chern character $\mathrm{ch}\colon\mathrm{K}^0(X) \to \mathrm{N}^*(X)_{\mathbb Q}$ is a ring homomorphism that identifies the Grothendieck ring (after tensoring with $\mathbb Q$) with the Chow ring.

In OSCAR, an AbstractBundle is stored as a pair (rank, Chern character), so virtual bundles with zero (and negative) rank are fully supported:

julia> P2 = abstract_projective_space(2);

julia> T = tangent_bundle(P2);

julia> F = T - 2*OO(P2); # a virtual bundle of rank 0

julia> rank(F)
0

julia> chern_character(F)
3//2*h^2 + 3*h

Segre classes

The total Segre class $s(E) = c(E)^{-1}$ is the formal inverse of the total Chern class and arises naturally as the fundamental class of a projective bundle. For a bundle $E$ of rank $r$ the individual Segre classes satisfy $s_k(E) = (-1)^k c_k(E^\vee)$ when $k \le r$, but the relation $s(E)\cdot c(E) = 1$ also determines the higher Segre classes uniquely.

julia> P3 = abstract_projective_space(3);

julia> T = tangent_bundle(P3);

julia> total_segre_class(T)
-20*h^3 + 10*h^2 - 4*h + 1

julia> total_segre_class(T) * total_chern_class(T) # must be 1
1

Types

The OSCAR type for abstract vector bundles is AbstractBundle.

Constructors

abstract_bundleMethod
abstract_bundle(X::AbstractVariety, ch::Union{MPolyDecRingElem, MPolyQuoRingElem})
abstract_bundle(X::AbstractVariety, r::RingElement, c::Union{MPolyDecRingElem, MPolyQuoRingElem})

Return an abstract vector bundle on X by specifying its Chern character ch. Equivalently, specify its rank r and total Chern class c.

Examples

We show two ways of constructing the Horrocks-Mumford bundle F [HM73]. First, we create F as the cohomology bundle of its Beilinson monad (see Equation (2.1) in [HM73]):

\[0 \rightarrow \mathcal O_{\mathbb P^4}^5(2)\rightarrow \bigwedge^2\mathrm{T}^*_{\mathbb P^4}(5) \rightarrow \mathcal O_{\mathbb P^4}^5(3)\rightarrow 0.\]

Then, we show the constructor above at work.

julia> P4 = abstract_projective_space(4)
AbstractVariety of dim 4

julia> A = 5*OO(P4, 2)
AbstractBundle of rank 5 on AbstractVariety of dim 4

julia> B = 2*exterior_power(cotangent_bundle(P4), 2)*OO(P4, 5)
AbstractBundle of rank 12 on AbstractVariety of dim 4

julia> C = 5*OO(P4, 3)
AbstractBundle of rank 5 on AbstractVariety of dim 4

julia> F = B - A - C
AbstractBundle of rank 2 on AbstractVariety of dim 4

julia> total_chern_class(F)
10*h^2 + 5*h + 1

julia> h = gens(P4)[1]
h

julia> F == abstract_bundle(P4, 2, 10*h^2 + 5*h + 1)
true
Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source

Underlying data of an abstract bundle

An abstract bundle is made up from (a selection of) the data discussed here:

parentMethod
parent(F::AbstractBundle)

Return the underlying abstract variety of F.

Examples

julia> G = abstract_grassmannian(3, 5)
AbstractVariety of dim 6

julia> Q = tautological_bundles(G)[2]
AbstractBundle of rank 2 on AbstractVariety of dim 6

julia> parent(Q) == G
true
Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source
chern_characterMethod
chern_character(F::AbstractBundle)

Return the Chern character of F.

Chern classes vs. Chern character

The Chern classes $\operatorname{c}_k(F)\in A^k(X)$ are the coefficients of the total Chern class $\operatorname{c}(F)=1+\operatorname{c}_1(F)+\operatorname{c}_2(F)+\cdots$, which is multiplicative: $\operatorname{c}(F\oplus G)=\operatorname{c}(F)\cdot\operatorname{c}(G)$.

The Chern character $\operatorname{ch}(F)\in A^*(X)\otimes\mathbb Q$ is instead additive and multiplicative: $\operatorname{ch}(F\oplus G)=\operatorname{ch}(F)+\operatorname{ch}(G)$ and $\operatorname{ch}(F\otimes G)=\operatorname{ch}(F)\cdot\operatorname{ch}(G)$. It is related to the Chern classes by the Newton identity $\operatorname{ch}(F)=\operatorname{rk}(F)+\sum_{k\ge1}\frac{1}{k!}s_k$ where $s_k$ is the $k$-th Newton polynomial in the Chern roots. In particular $\operatorname{ch}_0=\operatorname{rk}$, $\operatorname{ch}_1=\operatorname{c}_1$, $\operatorname{ch}_2=\frac12(\operatorname{c}_1^2-2\operatorname{c}_2)$.

Because of these ring-homomorphism properties, the Chern character — not the total Chern class — is used as the internal representation of a bundle in this package (see AbstractBundle).

Examples

julia> G = abstract_grassmannian(3, 5)
AbstractVariety of dim 6

julia> Q = tautological_bundles(G)[2]
AbstractBundle of rank 2 on AbstractVariety of dim 6

julia> chern_character(Q)
-1//2*c[1]^2 + 1//6*c[1]*c[2] - 1//24*c[1]*c[3] - c[1] + c[2] - 1//3*c[3] + 2
Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source
rankMethod
rank(F::AbstractBundle)

Return the rank of F.

Examples

julia> G = abstract_grassmannian(3, 5)
AbstractVariety of dim 6

julia> Q = tautological_bundles(G)[2]
AbstractBundle of rank 2 on AbstractVariety of dim 6

julia> rank(symmetric_power(Q, 3))
4
Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source
total_chern_classMethod
total_chern_class(F::AbstractBundle)

Return the total Chern class of F.

Examples

julia> G = abstract_grassmannian(3, 5)
AbstractVariety of dim 6

julia> Q = tautological_bundles(G)[2]
AbstractBundle of rank 2 on AbstractVariety of dim 6

julia> total_chern_class(Q)
c[1]^2 - c[1] - c[2] + 1

julia> chern_class(Q, 1)
-c[1]

julia> chern_class(Q, 2)
c[1]^2 - c[2]
Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source

Further data associated to an abstract bundle

chern_classMethod
chern_class(F::AbstractBundle, k::Int)

Return the k-th Chern class of F.

Examples

julia> T, (d,) = polynomial_ring(QQ, [:d])
(Multivariate polynomial ring in 1 variable over QQ, QQMPolyRingElem[d])

julia> QT = fraction_field(T)
Fraction field
  of multivariate polynomial ring in 1 variable over QQ

julia> P4 = abstract_projective_space(4, base = QT)
AbstractVariety of dim 4

julia> h = gens(P4)[1]
h

julia> F = abstract_bundle(P4, 2, 10*h^2 + 5*h + 1) # Horrocks-Mumford bundle
AbstractBundle of rank 2 on AbstractVariety of dim 4

julia> chern_class(F*OO(P4, d), 1)
(2*d + 5)*h

julia> chern_class(F*OO(P4, d), 2)
(d^2 + 5*d + 10)*h^2

julia> chern_class(F*OO(P4, -3), 1)
-h

julia> chern_class(F*OO(P4, -3), 2)
4*h^2
Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source
top_chern_classMethod
top_chern_class(F::AbstractBundle)

Return the top Chern class of F.

Examples

julia> P4 = abstract_projective_space(4)
AbstractVariety of dim 4

julia> h = gens(P4)[1]
h

julia> F = abstract_bundle(P4, 2, 10*h^2 + 5*h + 1)
AbstractBundle of rank 2 on AbstractVariety of dim 4

julia> top_chern_class(F)
10*h^2
Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source
total_segre_classMethod
total_segre_class(F::AbstractBundle)

Return the total Segre class of F.

Examples

julia> G = abstract_grassmannian(3, 5)
AbstractVariety of dim 6

julia> Q = tautological_bundles(G)[2]
AbstractBundle of rank 2 on AbstractVariety of dim 6

julia> C = total_chern_class(Q)
c[1]^2 - c[1] - c[2] + 1

julia> S = total_segre_class(Q)
c[1] + c[2] + c[3] + 1

julia> C*S
1
Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source
segre_classMethod
segre_class(F::AbstractBundle, k::Int)

Return the k-th Segre class of F.

Examples

julia> G = abstract_grassmannian(3, 5)
AbstractVariety of dim 6

julia> Q = tautological_bundles(G)[2]
AbstractBundle of rank 2 on AbstractVariety of dim 6

julia> segre_class(Q, 0)
1

julia> segre_class(Q, 1)
c[1]

julia> segre_class(Q, 2)
c[2]

julia> segre_class(Q, 3)
c[3]
Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source
todd_classMethod
todd_class(F::AbstractBundle)

Return the Todd class of F.

Examples

julia> P = abstract_projective_space(4, symbol = "H"); # Hartshorne, p. 433

julia> F = exterior_power(cotangent_bundle(P), 3)*OO(P, 3);

julia> G = OO(P, 1) + 4*OO(P);

julia> Z = degeneracy_locus(F, G, 3) # rational surface in P4
AbstractVariety of dim 2

julia> TZ = tangent_bundle(Z);

julia> K = canonical_class(Z)
z - H

julia> chern_class(TZ, 1) == -K
true

julia> tc = todd_class(TZ)
-1//2*z + 1//8*H^2 + 1//2*H + 1

julia> tc == 1 - 1//2*K + 1//12*(K^2 + chern_class(TZ, 2))
true
Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source
total_pontryagin_classMethod
total_pontryagin_class(F::AbstractBundle)

Return the total Pontryagin class of F.

Examples

julia> S = complete_intersection(abstract_projective_space(3), 4);

julia> total_pontryagin_class(tangent_bundle(S))
-12*h^2 + 1
Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source
pontryagin_classMethod
pontryagin_class(F::AbstractBundle, k::Int)

Return the k-th Pontryagin class of F.

Examples

julia> S = complete_intersection(abstract_projective_space(3), 4);

julia> pontryagin_class(tangent_bundle(S), 1)
-12*h^2
Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source
euler_characteristicMethod
euler_characteristic(F::AbstractBundle)

Return the Euler characteristic $\chi(F)$ computed via the Hirzebruch-Riemann-Roch formula.

Examples

julia> P = abstract_projective_space(4, symbol = "H"); # Hartshorne, p. 433

julia> F = exterior_power(cotangent_bundle(P), 3)*OO(P, 3);

julia> G = OO(P, 1) + 4*OO(P);

julia> Z = degeneracy_locus(F, G, 3) # rational surface in P4
AbstractVariety of dim 2

julia> TZ = tangent_bundle(Z);

julia> K = canonical_class(Z)
z - H

julia> H = polarization(Z)
H

julia> ec = euler_characteristic(OO(Z, H))
4

julia> ec == integral(1//2*H*(H - K) + 1//12*(K^2 + chern_class(TZ, 2)))
true
Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source
hilbert_polynomialMethod
hilbert_polynomial(F::AbstractBundle)

If F is an abstract vector bundle on an abstract variety with a given polarization, then return the corresponding Hilbert polynomial of F.

Examples

julia> P2 = abstract_projective_space(2)
AbstractVariety of dim 2

julia> hilbert_polynomial(OO(P2))
1//2*t^2 + 3//2*t + 1

julia> euler_characteristic(OO(P2))
1

julia> euler_characteristic(OO(P2, 1))
3

julia> euler_characteristic(OO(P2, 2))
6

julia> euler_characteristic(OO(P2, 3))
10
Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source

Operations on abstract bundles

The arithmetic operations +, -, * on abstract bundles correspond to direct sum, formal difference, and tensor product, respectively. Multiplying a bundle by an integer n gives the direct sum of n copies.

julia> P3 = abstract_projective_space(3);

julia> 4*OO(P3, 1) - OO(P3) == tangent_bundle(P3) # Euler sequence
true

Euler characteristics of line bundles on $\mathbb P^n$

The Euler characteristic $\chi(\mathcal{O}_{\mathbb P^n}(d)) = \binom{n+d}{n}$ can be computed directly:

julia> P3 = abstract_projective_space(3);

julia> [euler_characteristic(OO(P3, d)) for d in -2:5]
8-element Vector{QQFieldElem}:
 0
 0
 1
 4
 10
 20
 35
 56
dualMethod
dual(F::AbstractBundle)

Return the dual bundle of F.

Examples

julia> P4 = abstract_projective_space(4)
AbstractVariety of dim 4

julia> h = gens(P4)[1]
h

julia> F = abstract_bundle(P4, 2, 10*h^2 + 5*h + 1) # Horrocks-Mumford bundle
AbstractBundle of rank 2 on AbstractVariety of dim 4

julia> c1 = chern_class(F, 1)
5*h

julia> Fd = dual(F)
AbstractBundle of rank 2 on AbstractVariety of dim 4

julia> chern_class(Fd, 1)
-5*h

julia> F == Fd*OO(P4, 5) # self-duality up to twist
true
Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source
detMethod
det(F::AbstractBundle)

Return the determinant bundle of F.

Examples

julia> P3 = abstract_projective_space(3)
AbstractVariety of dim 3

julia> T = tangent_bundle(P3)
AbstractBundle of rank 3 on AbstractVariety of dim 3

julia> chern_class(T, 1)
4*h

julia> det(T) == OO(P3, 4)
true
Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source
exterior_powerMethod
exterior_power(F::AbstractBundle, k::Int)

Return the k-th exterior power of F.

Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source
symmetric_powerMethod
symmetric_power(F::AbstractBundle, k::Int)
symmetric_power(F::AbstractBundle, k::RingElement)

Return the k-th symmetric power of F. Here, k can contain parameters.

Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source
pullbackMethod
pullback(f::AbstractVarietyMap, F::AbstractBundle)

Return the pullback of F via f.

Examples

julia> P2 = abstract_projective_space(2)
AbstractVariety of dim 2

julia> P5 = abstract_projective_space(5, symbol = "H")
AbstractVariety of dim 5

julia> h = gens(P2)[1]
h

julia> i = map(P2, P5, [2*h])
AbstractVarietyMap from AbstractVariety of dim 2 to AbstractVariety of dim 5

julia> E = pullback(i, OO(P5,1))
AbstractBundle of rank 1 on AbstractVariety of dim 2

julia> total_chern_class(E)
2*h + 1
Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source
pushforwardMethod
pushforward(f::AbstractVarietyMap, F::AbstractBundle)

Return the pushforward of F via f, that is, return the alternating sum of all direct images of F via f.

Examples

julia> P2 = abstract_projective_space(2)
AbstractVariety of dim 2

julia> P5 = abstract_projective_space(5, symbol = "H")
AbstractVariety of dim 5

julia> h = gens(P2)[1]
h

julia> f = map(P2, P5, [2*h])
AbstractVarietyMap from AbstractVariety of dim 2 to AbstractVariety of dim 5

julia> F = OO(P2,1)
AbstractBundle of rank 1 on AbstractVariety of dim 2

julia> c = pushforward(f, chern_character(F) * todd_class(f))
7*H^5 - 7*H^4 + 4*H^3

julia> chern_character(pushforward(f, F)) == c # Grothendieck-Riemann-Roch
true
Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source

Tests on abstract bundles

==Method
==(F::AbstractBundle, G::AbstractBundle)

Return true if F is equal to G, and false otherwise. This means that the underlying varieties of F and G are the same, and that the Chern characters of F and G are equal.

Examples

julia> P2 = abstract_projective_space(2)
AbstractVariety of dim 2

julia> 3*OO(P2, 1) - OO(P2) == tangent_bundle(P2) # Euler sequence
true
Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source