Abstract Varieties
Types
The OSCAR type for abstract varieties is AbstractVariety.
Constructors
abstract_variety — Method
abstract_variety(n::Int, A::Union{MPolyDecRing, MPolyQuoRing{<:MPolyDecRingElem}})Return an abstract variety by specifying its dimension n and its Chow ring A.
We allow (graded) polynomial rings here since for the construction of a new abstract variety, the expert user may find it useful to start from the underlying graded polynomial ring of the Chow ring, and add its defining relations step by step.
In addition to the dimension and the Chow ring, further data making up an abstract variety can be set. See the corresponding setter functions in the section Some Particular Constructions of the documentation.
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 2The 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> chow_ring(P2)
Quotient
of multivariate polynomial ring in 1 variable over QQ graded by
h -> [1]
by ideal (h^3)
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
Typically, the coefficient ring of a Chow ring in OSCAR will be $\mathbb Q$. In order to allow the use of parameters, the coefficient ring may be extended, say to a function field of type $\mathbb Q(t_1, \dots, t_r).$ The example below shows how to do this when using built-in constructors such as abstract_projective_space:
julia> T, (t, ) = polynomial_ring(QQ, [:t])
(Multivariate polynomial ring in 1 variable over QQ, QQMPolyRingElem[t])
julia> QT = fraction_field(T)
Fraction field
of multivariate polynomial ring in 1 variable over QQ
julia> P2 = abstract_projective_space(2, base = QT)
AbstractVariety of dim 2
julia> chow_ring(P2)
Quotient
of multivariate polynomial ring in 1 variable over QT graded by
h -> [1]
by ideal (h^3)
julia> TP2 = tangent_bundle(P2)
AbstractBundle of rank 2 on AbstractVariety of dim 2
julia> chern_character(TP2*OO(P2, t))
(t^2 + 3*t + 3//2)*h^2 + (2*t + 3)*h + 2
This function is part of the experimental code in Oscar. Please read here for more details.
Specialized Constructors
abstract_point — Method
abstract_point(; base::Ring = QQ)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)This function is part of the experimental code in Oscar. Please read here for more details.
abstract_projective_space — Method
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
This function is part of the experimental code in Oscar. Please read here for more details.
abstract_grassmannian — Method
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
This function is part of the experimental code in Oscar. Please read here for more details.
abstract_flag_variety — Method
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]
This function is part of the experimental code in Oscar. Please read here for more details.
New Varieties From Given Varieties/Bundles
complete_intersection — Method
complete_intersection(X::AbstractVariety, degs::Int...)
complete_intersection(X::AbstractVariety, degs::Vector{Int})If X has been given a polarization, return the complete intersection in X of general hypersurfaces with the degrees given by degs.
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)
This function is part of the experimental code in Oscar. Please read here for more details.
projective_bundle — Method
projective_bundle(F::AbstractBundle; symbol::String = "z")Return the projective bundle of 1-dimensional subspaces in the fibers of F.
The string symbol specifies how to print the first Chern class of the line bundle $\mathcal O_{\mathbb P(\mathcal F)}(1)$.
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 = 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] == polarization(PT)
true
Number of Conics on the General Quintic Hypersurface in $\mathbb P^4$:
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 = 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
This function is part of the experimental code in Oscar. Please read here for more details.
abstract_hirzebruch_surface — Method
abstract_hirzebruch_surface(n::Int)Return the n-th Hirzebruch surface.
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)
This function is part of the experimental code in Oscar. Please read here for more details.
flag_bundle — Method
flag_bundle(F::AbstractBundle, dims::Int...; symbol::String = "c")
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$.
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 = 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
This function is part of the experimental code in Oscar. Please read here for more details.
zero_locus_section — Method
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
This function is part of the experimental code in Oscar. Please read here for more details.
degeneracy_locus — Method
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> chow_ring(Z)
Quotient
of multivariate polynomial ring in 2 variables over QQ graded by
z -> [1]
h -> [1]
by ideal (2*z - 3*h, h^3)
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 = polarization(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
This function is part of the experimental code in Oscar. Please read here for more details.
Underlying Data of an Abstract Variety
An abstract variety is made up from (a selection of) the data discussed here:
dim — Method
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
This function is part of the experimental code in Oscar. Please read here for more details.
chow_ring — Method
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)
This function is part of the experimental code in Oscar. Please read here for more details.
base — Method
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
This function is part of the experimental code in Oscar. Please read here for more details.
point_class — Method
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
This function is part of the experimental code in Oscar. Please read here for more details.
tangent_bundle — Method
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
This function is part of the experimental code in Oscar. Please read here for more details.
polarization — Method
polarization(X::AbstractVariety)If X has been given a polarization, return that polarization.
To implement a polarization $\mathcal O_X(1)$ means to implement its first Chern class. For Grassmannians, this is the polarization of the Plücker embedding. For the product of two abstract varieties with given polarizations, it is the polarization of the Segre embedding.
Examples
julia> G = abstract_grassmannian(2, 5)
AbstractVariety of dim 6
julia> D = polarization(G)
-c[1]
julia> degree(G) == integral(D^dim(G)) == 5
true
julia> Q = tautological_bundles(G)[2]
AbstractBundle of rank 3 on AbstractVariety of dim 6
julia> OO(G, D) == det(Q)
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> D = polarization(P)
s + t
julia> degree(P) == integral(D^dim(P)) == 2
true
This function is part of the experimental code in Oscar. Please read here for more details.
tautological_bundles — Method
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
This function is part of the experimental code in Oscar. Please read here for more details.
structure_map — Method
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 = 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
This function is part of the experimental code in Oscar. Please read here for more details.
Further Data Associated to an Abstract Variety
trivial_line_bundle — Method
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
This function is part of the experimental code in Oscar. Please read here for more details.
line_bundle — Method
line_bundle(X::AbstractVariety, n::RingElement)If X has been given a polarization $\mathcal O_X(1)$, 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 (geometrically, this is the codimension 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
This function is part of the experimental code in Oscar. Please read here for more details.
cotangent_bundle — Method
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
This function is part of the experimental code in Oscar. Please read here for more details.
canonical_class — Method
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
This function is part of the experimental code in Oscar. Please read here for more details.
canonical_bundle — Method
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
This function is part of the experimental code in Oscar. Please read here for more details.
degree — Method
hilbert_polynomial — Method
hilbert_polynomial(X::AbstractVariety)If X has been given a polarization, 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
This function is part of the experimental code in Oscar. Please read here for more details.
basis — Method
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).
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
This function is part of the experimental code in Oscar. Please read here for more details.
betti_numbers — Method
betti_numbers(X::AbstractVariety)Return the Betti numbers of the Chow ring of X.
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]
This function is part of the experimental code in Oscar. Please read here for more details.
intersection_matrix — Method
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
This function is part of the experimental code in Oscar. Please read here for more details.
dual_basis — Method
dual_basis(X::AbstractVariety)If X has been given a point class, 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). Here, K = base(X).
dual_basis(X::AbstractVariety, k::Int)If X has been given a point class, return the elements of degree k in the dual basis.
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
This function is part of the experimental code in Oscar. Please read here for more details.
euler_number — Method
euler_number(X::AbstractVariety)Return the Euler number of X.
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
This function is part of the experimental code in Oscar. Please read here for more details.
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
product — Method
product(X::AbstractVariety, Y::AbstractVariety)Return the product $X\times Y$. Alternatively, use *.
If both X and Y have been given a polarization, $X\times Y$ will be endowed with the polarization 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)
This function is part of the experimental code in Oscar. Please read here for more details.
Integrating Chow Ring Elements
integral(c::Union{MPolyDecRingElem, MPolyQuoRingElem})Given an element c of the Chow ring of an abstract variety, return the integral of c.
If the abstract variety has been given a (unique) point class, then the integral will be an element of the coefficient ring of the Chow ring. That is, typically, in the applications we discuss here, it will be a rational number (the degree of the 0-dimensional part of c) or an element of a function field of type $\mathbb Q(t_1, \dots, t_r)$. If one of the conditions is not fulfilled, the 0-dimensional part of c is returned.
Examples
julia> G = abstract_grassmannian(2, 5)
AbstractVariety of dim 6
julia> p = point_class(G)
c[2]^3
julia> integral(p)
1
julia> T, (t, ) = polynomial_ring(QQ, [:t])
(Multivariate polynomial ring in 1 variable over QQ, QQMPolyRingElem[t])
julia> QT = fraction_field(T)
Fraction field
of multivariate polynomial ring in 1 variable over QQ
julia> P3 = abstract_projective_space(3, base = QT)
AbstractVariety of dim 3
julia> h = gens(P3)[1]
h
julia> integral(t^2*h^3+t*h)
t^2
Lines on a general cubic hypersurface in P^3:
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
Lines on a general complete intersection Calabi-Yau threefold of type (2,2,2,2):
julia> G = abstract_grassmannian(2, 4+4)
AbstractVariety of dim 12
julia> S = tautological_bundles(G)[1]
AbstractBundle of rank 2 on AbstractVariety of dim 12
julia> E = symmetric_power(S, 2)
AbstractBundle of rank 3 on AbstractVariety of dim 12
julia> integral(top_chern_class(E)^4)
512