# Abstract Varieties

## Types

AbsVariety <: Variety

## Constructors

abstract_varietyMethod
 abstract_variety(n::Int, A::Union{MPolyDecRing, MPolyQuoRing{<:MPolyDecRingElem}})

Return an abstract variety of dimension n with Chow ring A.

Examples

julia> R, (h,) = graded_polynomial_ring(QQ, ["h"])
(Graded multivariate polynomial ring in 1 variable over QQ, MPolyDecRingElem{QQFieldElem, QQMPolyRingElem}[h])

julia> A, _ = quo(R, ideal(R, [h^3]))
(Quotient of multivariate polynomial ring by ideal (h^3), Map: R -> A)

julia> P2 = abstract_variety(2, A)
AbstractVariety of dim 2
Note

The example above shows one way of setting up a version of the abstract projective plane. A more convenient way is to use the built-in command abstract_projective_space which implements additional data such as the tangent bundle:

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

julia> TP2 = tangent_bundle(P2)
AbstractBundle of rank 2 on AbstractVariety of dim 2

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

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

source
abstract_pointMethod
abstract_point()

Return an abstract variety consisting of a point.

Examples

julia> p = abstract_point()
AbstractVariety of dim 0

julia> chow_ring(p)
Quotient
of multivariate polynomial ring in 1 variable over QQ graded by
p -> [1]
by ideal (p)
Experimental

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

source

### Specialized Constructors

abstract_projective_spaceMethod
abstract_projective_space(n::Int; base::Ring = QQ, symbol::String = "h")

Return the abstract projective space of lines in an n+1-dimensional vector space.

Examples

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

julia> chow_ring(P3)
Quotient
of multivariate polynomial ring in 1 variable over QQ graded by
h -> [1]
by ideal (h^4)
julia> T, (s,t) = polynomial_ring(QQ, ["s", "t"])
(Multivariate polynomial ring in 2 variables over QQ, QQMPolyRingElem[s, t])

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

julia> P3 = abstract_projective_space(3, base = QT)
AbstractVariety of dim 3

julia> chow_ring(P3)
Quotient
of multivariate polynomial ring in 1 variable over QT graded by
h -> [1]
by ideal (h^4)

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

julia> CTB = cotangent_bundle(P3)
AbstractBundle of rank 3 on AbstractVariety of dim 3

julia> chern_character((s*TB)*(t*CTB))
-4*s*t*h^2 + 9*s*t

Experimental

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

source
abstract_grassmannianMethod
abstract_grassmannian(k::Int, n::Int; base::Ring = QQ, symbol::String = "c")

Return the abstract Grassmannian $\mathrm{G}(k, n)$ of k-dimensional subspaces of an n-dimensional vector space.

Examples

julia> G = abstract_grassmannian(2,4)
AbstractVariety of dim 4

julia> CR = chow_ring(G)
Quotient
of multivariate polynomial ring in 2 variables over QQ graded by
c[1] -> [1]
c[2] -> [2]
by ideal (-c[1]^3 + 2*c[1]*c[2], c[1]^4 - 3*c[1]^2*c[2] + c[2]^2)

julia> S = tautological_bundles(G)[1]
AbstractBundle of rank 2 on AbstractVariety of dim 4

julia> V = [chern_class(S, i) for i = 1:2]
2-element Vector{MPolyQuoRingElem{MPolyDecRingElem{QQFieldElem, QQMPolyRingElem}}}:
c[1]
c[2]

julia> is_regular_sequence(gens(modulus(CR)))
true

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

julia> tangent_bundle(G) == dual(S)*Q
true

Experimental

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

source
abstract_flag_varietyMethod
abstract_flag_variety(dims::Int...; base::Ring = QQ, symbol::String = "c")
abstract_flag_variety(dims::Vector{Int}; base::Ring = QQ, symbol::String = "c")

Given integers, say, $d_1, \dots, d_{k}, n$ with $0 < d_1 < \dots < d_{k} < n$ or a vector of such integers, return the abstract flag variety $\mathrm{F}(d_1, \dots, d_{k}; n)$ of nested sequences of subspaces of dimensions $d_1, \dots, d_{k}$ of an $n$-dimensional vector space.

Examples

julia> F = abstract_flag_variety(1,3,4)
AbstractVariety of dim 5

julia> chow_ring(F)
Quotient
of multivariate polynomial ring in 4 variables over QQ graded by
c[1, 1] -> [1]
c[2, 1] -> [1]
c[2, 2] -> [2]
c[3, 1] -> [1]
by ideal with 4 generators

julia> modulus(chow_ring(F))
Ideal generated by
-c[1, 1]*c[2, 2]*c[3, 1]
-c[1, 1]*c[2, 1]*c[3, 1] - c[1, 1]*c[2, 2] - c[2, 2]*c[3, 1]
-c[1, 1]*c[2, 1] - c[1, 1]*c[3, 1] - c[2, 1]*c[3, 1] - c[2, 2]
-c[1, 1] - c[2, 1] - c[3, 1]

Experimental

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

source

### New Varieties From Given Varieties/Bundles

complete_intersectionMethod
complete_intersection(X::AbstractVariety, degs::Int...)
complete_intersection(X::AbstractVariety, degs::Vector{Int})

Return the complete intersection in X of general hypersurfaces with the given degrees.

Examples

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

julia> CI = complete_intersection(P3, 2, 2)
AbstractVariety of dim 1

julia> dim(CI)
1

julia> degree(CI)
4

julia> chow_ring(CI)
Quotient
of multivariate polynomial ring in 1 variable over QQ graded by
h -> [1]
by ideal (h^2)

Experimental

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

source
abstract_projective_bundleMethod
abstract_projective_bundle(F::AbstractBundle; symbol::String = "z")

Return the projective bundle of 1-dimensional subspaces in the fibers of F.

Examples

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

julia> T = tangent_bundle(P2)
AbstractBundle of rank 2 on AbstractVariety of dim 2

julia> PT = abstract_projective_bundle(T)
AbstractVariety of dim 3

julia> chow_ring(PT)
Quotient
of multivariate polynomial ring in 2 variables over QQ graded by
z -> [1]
h -> [1]
by ideal (h^3, z^2 + 3*z*h + 3*h^2)

julia> gens(PT)[1]
z

julia> gens(PT)[1] == hyperplane_class(PT)
true

julia> [chern_class(T, i) for i = 1:2]
2-element Vector{MPolyQuoRingElem{MPolyDecRingElem{QQFieldElem, QQMPolyRingElem}}}:
3*h
3*h^2

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

julia> USBd = dual(tautological_bundles(G)[1])
AbstractBundle of rank 3 on AbstractVariety of dim 6

julia> F = symmetric_power(USBd, 2)
AbstractBundle of rank 6 on AbstractVariety of dim 6

julia> PF = abstract_projective_bundle(F)
AbstractVariety of dim 11

julia> A = symmetric_power(USBd, 5) - symmetric_power(USBd, 3)*OO(PF, -1)
AbstractBundle of rank 11 on AbstractVariety of dim 11

julia> integral(top_chern_class(A))
609250

Experimental

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

source
abstract_hirzebruch_surfaceMethod
abstract_hirzebruch_surface(n::Int)

Return the n-th Hirzebruch surface.

Note

Recall that the n-th Hirzebruch surface is the projective bundle associated to the bundle $\mathcal O_{\mathbb P_1} \oplus O_{\mathbb P_1(-n)}$.

Examples

julia> H2 =  abstract_hirzebruch_surface(2)
AbstractVariety of dim 2

julia> chow_ring(H2)
Quotient
of multivariate polynomial ring in 2 variables over QQ graded by
z -> [1]
h -> [1]
by ideal (h^2, z^2 - 2*z*h)

Experimental

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

source
abstract_flag_bundleMethod
abstract_flag_bundle(F::AbstractBundle, dims::Int...; symbol::String = "c")
abstract_flag_bundle(F::AbstractBundle, dims::Vector{Int}; symbol::String = "c")

Given integers, say, $d_1, \dots, d_{k}, n$ with $0 < d_1 < \dots < d_{k} < n$ or a vector of such integers, and given an abstract bundle $F$ of rank $n$, return the abstract flag bundle of nested sequences of subspaces of dimensions $d_1, \dots, d_{k}$ in the fibers of $F$.

Note

Entering the number $n$ can be omitted since this number can be recovered as the rank of $F$.

Examples

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

julia> F = exterior_power(cotangent_bundle(P),  3)*OO(P,3)
AbstractBundle of rank 4 on AbstractVariety of dim 4

julia> FB = abstract_flag_bundle(F, 1, 3)
AbstractVariety of dim 9

julia> CR = chow_ring(FB)
Quotient
of multivariate polynomial ring in 5 variables over QQ graded by
c[1, 1] -> [1]
c[2, 1] -> [1]
c[2, 2] -> [2]
c[3, 1] -> [1]
h -> [1]
by ideal with 5 generators

julia> modulus(CR)
Ideal generated by
h^5
-c[1, 1]*c[2, 2]*c[3, 1] + h^4
-c[1, 1]*c[2, 1]*c[3, 1] - c[1, 1]*c[2, 2] - c[2, 2]*c[3, 1] - 2*h^3
-c[1, 1]*c[2, 1] - c[1, 1]*c[3, 1] - c[2, 1]*c[3, 1] - c[2, 2] + 4*h^2
-c[1, 1] - c[2, 1] - c[3, 1] - 3*h

julia> FB.bundles
3-element Vector{AbstractBundle}:
AbstractBundle of rank 1 on AbstractVariety of dim 9
AbstractBundle of rank 2 on AbstractVariety of dim 9
AbstractBundle of rank 1 on AbstractVariety of dim 9

Experimental

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

source
zero_locus_sectionMethod
zero_locus_section(F::AbstractBundle; class::Bool = false)

Return the zero locus of a general section of F.

Use the argument class = true to only compute the class of the zero locus (same as top_chern_class(F)).

Examples

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

julia> C = zero_locus_section(OO(P2, 3)) # a plane cubic curve
AbstractVariety of dim 1

julia> dim(C)
1

julia> degree(C)
3

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

julia> C = zero_locus_section(OO(P3, 2) + OO(P3, 2)) # a complete intersection
AbstractVariety of dim 1

julia> dim(C)
1

julia> degree(C)
4

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> A = zero_locus_section(F) # abelian surface
AbstractVariety of dim 2

julia> dim(A)
2

julia> degree(A)
10

Experimental

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

source
degeneracy_locusMethod
degeneracy_locus(F::AbstractBundle, G::AbstractBundle, k::Int; class::Bool=false)

Return the k-th degeneracy locus of a general map from F to G.

Use the argument class = true to only compute the class of the degeneracy locus (Porteous' formula).

Examples

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

julia> F = 3*OO(P4, -1)
AbstractBundle of rank 3 on AbstractVariety of dim 4

julia> G = cotangent_bundle(P4)*OO(P4,1)
AbstractBundle of rank 4 on AbstractVariety of dim 4

julia> CZ = degeneracy_locus(F, G, 2, class = true) # only class of degeneracy locus
4*h^2

julia> CZ == chern_class(G-F, 2) # Porteous' formula
true

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

julia> degree(Z)
4

julia> P = abstract_projective_space(4, symbol = "H")
AbstractVariety of dim 4

julia> F = exterior_power(cotangent_bundle(P), 3)*OO(P,3)
AbstractBundle of rank 4 on AbstractVariety of dim 4

julia> G = OO(P, 1)+4*OO(P)
AbstractBundle of rank 5 on AbstractVariety of dim 4

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

julia> K = canonical_class(Z)
z - H

julia> integral(K^2)
-7

julia> H = hyperplane_class(Z)
H

julia> integral(H^2) # degree of surface
8

julia> A = K+H
z

julia> integral(A^2) # degree of first adjoint surface which is a Del Pezzo surface in P5
5

Experimental

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

source
Note

Products and blowups are described elsewhere.

## Underlying Data of an Abstract Variety

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

dimMethod
 dim(X::AbstractVariety)

Return the dimension of X.

Examples

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

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

julia> dim(P2*P3)
5

Experimental

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

source
chow_ringMethod
chow_ring(X::AbstractVariety)

Return the Chow ring of the abstract variety X.

Examples

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

julia> P3 = abstract_projective_space(3, symbol = "H")
AbstractVariety of dim 3

julia> chow_ring(P2*P3)
Quotient
of multivariate polynomial ring in 2 variables over QQ graded by
h -> [1]
H -> [1]
by ideal (h^3, H^4)

Experimental

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

source
baseMethod
base(X::AbstractVariety)

Return the coefficient ring of the polynomial ring underlying the Chow ring of X.

Examples

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

julia> chow_ring(P2)
Quotient
of multivariate polynomial ring in 1 variable over QQ graded by
h -> [1]
by ideal (h^3)

julia> base(P2)
Rational field

Experimental

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

source
point_classMethod
point_class(X::AbstractVariety)

Return the point class of X.

Examples

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

julia> P3 = abstract_projective_space(3, symbol = "H")
AbstractVariety of dim 3

julia> p = point_class(P2*P3)
h^2*H^3

julia> degree(p)
[5]

julia> integral(p)
1

Experimental

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

source
tangent_bundleMethod
tangent_bundle(X::AbstractVariety)

Return the tangent bundle of X.

Examples

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

julia> TG = tangent_bundle(G)
AbstractBundle of rank 6 on AbstractVariety of dim 6

julia> chern_character(TG)
-5//6*c[1]^3 + 5//24*c[1]^2*c[2] + 3//2*c[1]^2 + 5//2*c[1]*c[2] - 5*c[1] + 7//72*c[2]^3 - 25//24*c[2]^2 - c[2] + 6

Experimental

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

source
hyperplane_classMethod
hyperplane_class(X::AbstractVariety)

If defined, return the class of a hyperplane section of X.

Note

Speaking of a hyperplane class of X means that we have a specific embedding of X into projective space in mind. For Grassmanians, for example, this embedding is the Plücker embedding. For the product of two abstract varieties with given hyperplane classes, it is the Segre embedding.

Examples

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

julia> hyperplane_class(G)
-c[1]

julia> degree(G) == integral(hyperplane_class(G)^dim(G)) == 5
true

julia> P1s = abstract_projective_space(1, symbol = "s")
AbstractVariety of dim 1

julia> P1t = abstract_projective_space(1, symbol = "t")
AbstractVariety of dim 1

julia> P = P1s*P1t
AbstractVariety of dim 2

julia> H = hyperplane_class(P)
s + t

julia> integral(H^dim(P))
2

Experimental

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

source
tautological_bundlesMethod
tautological_bundles(X::AbstractVariety)

Return the tautological_bundles of X (if applicable).

Examples

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

julia> TB = tautological_bundles(P2)
2-element Vector{AbstractBundle}:
AbstractBundle of rank 1 on AbstractVariety of dim 2
AbstractBundle of rank 2 on AbstractVariety of dim 2

julia> TB[1] == OO(P2, -1)
true

julia> TB[2] == tangent_bundle(P2)*OO(P2, -1)
true

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

julia> tautological_bundles(G)
2-element Vector{AbstractBundle}:
AbstractBundle of rank 3 on AbstractVariety of dim 6
AbstractBundle of rank 2 on AbstractVariety of dim 6

Experimental

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

source
structure_mapMethod
structure_map(X::AbstractVariety)

Return the structure map of X.

Examples

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

julia> structure_map(P2)
AbstractVarietyMap from AbstractVariety of dim 2 to AbstractVariety of dim 0

julia> T = tangent_bundle(P2)
AbstractBundle of rank 2 on AbstractVariety of dim 2

julia> E = abstract_projective_bundle(T, symbol = "H")
AbstractVariety of dim 3

julia> chow_ring(E)
Quotient
of multivariate polynomial ring in 2 variables over QQ graded by
H -> [1]
h -> [1]
by ideal (h^3, H^2 + 3*H*h + 3*h^2)

julia> structure_map(E)
AbstractVarietyMap from AbstractVariety of dim 3 to AbstractVariety of dim 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 Variety

trivial_line_bundleMethod
trivial_line_bundle(X::AbstractVariety)

Return the trivial line bundle $\mathcal O_X$ on X. Alternatively, use OO instead of trivial_line_bundle.

Examples

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

julia> OX = trivial_line_bundle(P2)
AbstractBundle of rank 1 on AbstractVariety of dim 2

julia> chern_character(OX)
1

Experimental

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

source
line_bundleMethod
line_bundle(X::AbstractVariety, n::RingElement)
line_bundle(X::AbstractVariety, D::MPolyDecRingElem)

Return the line bundle $\mathcal O_X(n)$ on X if X has been given a hyperplane class, or a line bundle $\mathcal O_X(D)$ with first Chern class $D$. Alternatively, use OO instead of line_bundle.

Examples

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

julia> tautological_bundles(P2)[1] == OO(P2, -1)
true

Experimental

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

source
cotangent_bundleMethod
cotangent_bundle(X::AbstractVariety)

Return the cotangent bundle of X.

Examples

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

julia> cotangent_bundle(P2) == dual(tangent_bundle(P2))
true

Experimental

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

source
canonical_classMethod
canonical_class(X::AbstractVariety)

Return the canonical class of X.

Examples

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

julia> canonical_class(P2) == chern_class(cotangent_bundle(P2), 1)
true

julia> canonical_class(P2)
-3*h

Experimental

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

source
canonical_bundleMethod
canonical_bundle(X::AbstractVariety)

Return the canonical bundle of X.

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

julia> canonical_bundle(P2) == det(cotangent_bundle(P2))
true

Experimental

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

source
degreeMethod
degree(X::AbstractVariety)

If X has been given a hyperplane class, return the corresponding degree of X.

Examples

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

julia> degree(G)
5

Experimental

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

source
hilbert_polynomialMethod
hilbert_polynomial(X::AbstractVariety)

If X has been given a hyperplane class, return the corresponding Hilbert polynomial of X.

Examples

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

julia> hilbert_polynomial(P2) == hilbert_polynomial(OO(P2))
true

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

Experimental

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

source
basisMethod
basis(X::AbstractVariety)

If K = base(X), return a K-basis of the Chow ring of X.

Note

The basis elements are ordered by increasing degree (geometrically, by increasing codimension).

Examples

julia> G = abstract_grassmannian(2,4)
AbstractVariety of dim 4

julia> chow_ring(G)
Quotient
of multivariate polynomial ring in 2 variables over QQ graded by
c[1] -> [1]
c[2] -> [2]
by ideal (-c[1]^3 + 2*c[1]*c[2], c[1]^4 - 3*c[1]^2*c[2] + c[2]^2)

julia> basis(G)
5-element Vector{Vector{MPolyQuoRingElem}}:
[1]
[c[1]]
[c[2], c[1]^2]
[c[1]*c[2]]
[c[2]^2]

Experimental

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

source
intersection_matrixMethod
intersection_matrix(X::AbstractVariety)

If b = basis(X), return matrix([integral(bi*bj) for bi in b, bj in b]).

intersection_matrix(a::Vector, b::Vector)

Return matrix([integral(ai*bj) for ai in a, bj in b]).

intersection_matrix(a::Vector)

As above, with b = a.

Examples

julia> G = abstract_grassmannian(2,4)
AbstractVariety of dim 4

julia> b = basis(G)
5-element Vector{Vector{MPolyQuoRingElem}}:
[1]
[c[1]]
[c[2], c[1]^2]
[c[1]*c[2]]
[c[2]^2]

julia> intersection_matrix(G)
[0   0   0   0   0   1]
[0   0   0   0   1   0]
[0   0   1   1   0   0]
[0   0   1   2   0   0]
[0   1   0   0   0   0]
[1   0   0   0   0   0]

julia> integral(b[3][2]*b[3][2])
2

Experimental

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

source
dual_basisMethod
dual_basis(X::AbstractVariety)

If K = base(X), return a K-basis for the Chow ring of X which is dual to basis(X) with respect to the K-bilinear form defined by intersection_matrix(X).

Note

The basis elements are ordered by decreasing degree (geometrically, by decreasing codimension).

Examples

julia> G = abstract_grassmannian(2,4)
AbstractVariety of dim 4

julia> b = basis(G)
5-element Vector{Vector{MPolyQuoRingElem}}:
[1]
[c[1]]
[c[2], c[1]^2]
[c[1]*c[2]]
[c[2]^2]

julia> intersection_matrix(G)
[0   0   0   0   0   1]
[0   0   0   0   1   0]
[0   0   1   1   0   0]
[0   0   1   2   0   0]
[0   1   0   0   0   0]
[1   0   0   0   0   0]

julia> bd = dual_basis(G)
5-element Vector{Vector{MPolyQuoRingElem{MPolyDecRingElem{QQFieldElem, QQMPolyRingElem}}}}:
[c[2]^2]
[c[1]*c[2]]
[-c[1]^2 + 2*c[2], c[1]^2 - c[2]]
[c[1]]
[1]

julia> integral(b[3][2]*b[3][2])
2

julia> integral(b[3][2]*bd[3][2])
1

Experimental

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

source
Note

If X is of type AbstractVariety, entering total_chern_class(X) returns the total Chern class of the tangent bundle of X. Similarly for entering euler(X), chern_class(X, k), todd_class(X), total_pontryagin_class(X), pontryagin_class(X, k)

## Operations on Abstract Varieties

productMethod
product(X::AbstractVariety, Y::AbstractVariety)

Return the product $X\times Y$. Alternatively, use *.

!!!note If both X and Y have a hyperplane class, $X\times Y$ will be endowed with the hyperplane class corresponding to the Segre embedding.

julia> P2 = abstract_projective_space(2);

julia> P3 = abstract_projective_space(3, symbol = "H");

julia> P2xP3 = P2*P3
AbstractVariety of dim 5

julia> chow_ring(P2xP3)
Quotient
of multivariate polynomial ring in 2 variables over QQ graded by
h -> [1]
H -> [1]
by ideal (h^3, H^4)

Experimental

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

source
Note

Blowups are described in their own section.

## Integrate Chow Ring Elements

integral(x::MPolyDecRingElem)

Given an element x of the Chow ring of an abstract variety X, say, return the integral of x.

Note

If X has a (unique) point class, the integral will be a number (that is, a QQFieldElem or a function field element). Otherwise, the highests degree part of $x$ is returned (geometrically, this is the 0-dimensional part of $x$).

###### Examples
julia> G = abstract_grassmannian(2, 4)
AbstractVariety of dim 4

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

julia> E = symmetric_power(Q, 3)
AbstractBundle of rank 4 on AbstractVariety of dim 4

julia> integral(top_chern_class(E))
27