Abstract Varieties
Types
AbsVariety <: Variety
Constructors
abstract_variety
— Method abstract_variety(n::Int, A::Union{MPolyDecRing, MPolyQuoRing{<:MPolyDecRingElem}})
Return an abstract variety of dimension n
with Chow ring A
.
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
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
This function is part of the experimental code in Oscar. Please read here for more details.
abstract_point
— Methodabstract_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)
This function is part of the experimental code in Oscar. Please read here for more details.
Specialized Constructors
abstract_projective_space
— Methodabstract_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
— Methodabstract_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
— Methodabstract_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
— Methodcomplete_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)
This function is part of the experimental code in Oscar. Please read here for more details.
abstract_projective_bundle
— Methodabstract_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
This function is part of the experimental code in Oscar. Please read here for more details.
abstract_hirzebruch_surface
— Methodabstract_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.
abstract_flag_bundle
— Methodabstract_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$.
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
This function is part of the experimental code in Oscar. Please read here for more details.
zero_locus_section
— Methodzero_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
— Methoddegeneracy_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
This function is part of the experimental code in Oscar. Please read here for more details.
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:
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
— Methodchow_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
— Methodbase(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
— Methodpoint_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
— Methodtangent_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.
hyperplane_class
— Methodhyperplane_class(X::AbstractVariety)
If X
has been given the class of a hyperplane section of X
, return that class.
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
This function is part of the experimental code in Oscar. Please read here for more details.
tautological_bundles
— Methodtautological_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
— Methodstructure_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
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
— Methodtrivial_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
— Methodline_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
This function is part of the experimental code in Oscar. Please read here for more details.
cotangent_bundle
— Methodcotangent_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
— Methodcanonical_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
— Methodcanonical_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
— Methoddegree(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
This function is part of the experimental code in Oscar. Please read here for more details.
hilbert_polynomial
— Methodhilbert_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
This function is part of the experimental code in Oscar. Please read here for more details.
basis
— Methodbasis(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).
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
This function is part of the experimental code in Oscar. Please read here for more details.
betti_numbers
— Methodbetti_numbers(X::AbstractVariety)
Return the Betti numbers of the Chow ring of X
.
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]
This function is part of the experimental code in Oscar. Please read here for more details.
intersection_matrix
— Methodintersection_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
— Methoddual_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).
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
This function is part of the experimental code in Oscar. Please read here for more details.
euler_number
— Methodeuler_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
— Methodproduct(X::AbstractVariety, Y::AbstractVariety)
Return the product $X\times Y$. Alternatively, use *
.
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)
This function is part of the experimental code in Oscar. Please read here for more details.
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
.
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