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
.
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> 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
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 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)
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)
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
This function is part of the experimental code in Oscar. Please read here for more details.
tangent_bundle
— Methodtangent_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
This function is part of the experimental code in Oscar. Please read here for more details.
hyperplane_class
— Methodhyperplane_class(X::AbstractVariety)
If defined, return the class of a hyperplane section of X
.
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
This function is part of the experimental code in Oscar. Please read here for more details.
tautological_bundles
— Methodtautological_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
This function is part of the experimental code in Oscar. Please read here for more details.
structure_map
— Methodstructure_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
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)
line_bundle(X::AbstractVariety, D::Union{MPolyDecRingElem, MPolyQuoRingElem})
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
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)
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
This function is part of the experimental code in Oscar. Please read here for more details.
canonical_class
— Methodcanonical_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
This function is part of the experimental code in Oscar. Please read here for more details.
canonical_bundle
— Methodcanonical_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
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)
If K = base(X)
, return a K
-basis of the Chow ring of X
.
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]
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)
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)
.
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.
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
product
— Methodproduct(X::AbstractVariety, Y::AbstractVariety)
Return the product $X\times Y$. Alternatively, use *
.
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)
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 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