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.

Note

We allow graded polynomial rings here since for the construction of a new abstract variety, it is occasionally useful to start from the underlying graded polynomial ring of the Chow ring, and add its defining relations step by step.

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> [chern_class(T, i) for i = 1:2]
2-element Vector{MPolyQuoRingElem{MPolyDecRingElem{QQFieldElem, QQMPolyRingElem}}}:
 3*h
 3*h^2

julia> gens(PT)[1]
z

julia> gens(PT)[1] == hyperplane_class(PT)
true
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> tautological_bundles(FB)
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 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)

If X has been given a point class, return that class.

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)

If X has been given a tangent bundle, return that bundle.

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 X has been given the class of a hyperplane section of X, return that class.

Note

Speaking of a hyperplane section 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 classes of hyperplane sections, 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)

If X has been given tautological bundles, return these bundles.

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)

If X has been given a structure map, return that map.

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)

If X has been given a hyperplane class, return the line bundle $\mathcal O_X(n)$ on X.

line_bundle(X::AbstractVariety, D::Union{MPolyDecRingElem, MPolyQuoRingElem})

Given an element D of the Chow ring of X, return the line bundle $\mathcal O_X(D)$ with first Chern class $D[1]$. Here, $D[1]$ is the degree-1 part of 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

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

julia> OO(P2, h) == 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)

If X has been given a tangent bundle, return the dual bundle.

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)

If X has been given a tangent bundle, 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)

If X has been given a tangent bundle, return the canonical bundle on X.

Examples

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)
basis(X::AbstractVariety, k::Int)

If K = base(X), return a K-basis of the Chow ring of X (return the elements of degree k in that basis).

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]

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

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

source
betti_numbersMethod
betti_numbers(X::AbstractVariety)

Return the Betti numbers of the Chow ring of X.

Note

The Betti number of X in a given degree is the number of elements of basis(X) in that degree.

Examples

julia> P2xP2 = abstract_projective_space(2, symbol = "k")*abstract_projective_space(2, symbol = "l")
AbstractVariety of dim 4

julia> betti_numbers(P2xP2)
5-element Vector{Int64}:
 1
 2
 3
 2
 1

julia> basis(P2xP2)
5-element Vector{Vector{MPolyQuoRingElem}}:
 [1]
 [l, k]
 [l^2, k*l, k^2]
 [k*l^2, k^2*l]
 [k^2*l^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 = vcat(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> basis(G)
5-element Vector{Vector{MPolyQuoRingElem}}:
 [1]
 [c[1]]
 [c[2], c[1]^2]
 [c[1]*c[2]]
 [c[2]^2]

julia> b = vcat(basis(G)...)
6-element 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[4]*b[4])
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)
dual_basis(X::AbstractVariety, k::Int)

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

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
euler_numberMethod
euler_number(X::AbstractVariety)

Return the Euler number of X.

Note

Recall that in our geometric interpretation, we think of X as a smooth projective complex variety. The returned number is then the Euler number of X considered as a compact complex manifold. Note that this number coincides with the topological Euler characteristic of the manifold.

Examples

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

julia> euler_number(P2)
3

julia> euler_number(P2) == integral(total_chern_class(tangent_bundle(P2)))
true
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 chern_class(X, k), todd_class(X), total_pontryagin_class(X), and pontryagin_class(X, k). Moreover, gens(X) returns the generators of the Chow Ring of X.

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 been given 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::Union{MPolyDecRingElem, MPolyQuoRingElem})

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

Note

If X has been given a point class, the integral will be a number (that is, a QQFieldElem or a function field element). Otherwise, the highest 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