ToricAtiyahBott.jl
ToricAtiyahBott
— ModuleToricAtiyahBott is a module containing an implementation of the Kontsevich-Atiyah-Bott residue formula for toric varieties in the Julia language. The theory and the algorithm behind the package is described in the paper "Computations of Gromov-Witten invariants of toric varieties" by Giosuè Muratore.
In order to install the package, type:
julia> using Pkg
julia> Pkg.add("ToricAtiyahBott")
After the installation, simply type:
julia> using ToricAtiyahBott
every time you want to use the program. This package requires Oscar, so make sure that you can use Oscar before installing this package. See https://www.oscar-system.org/install/.
The function IntegrateAB
This is the main function of the package.
ToricAtiyahBott.IntegrateAB
— FunctionIntegrateAB(v, beta, m, P; do_check, show_bar)
Apply the Atiyah-Bott residue formula to compute the integral of the equivariant class P
in the moduli space of rational marked stable maps to the toric variety v
of class beta
with m
marks.
Arguments
v::NormalToricVariety
: the toric variety.beta::CohomologyClass
: the class of the stable maps, it must be the effective class of a curve.m::Int64
: the number of marks.P
: the equivariant class.do_check::Bool
: iftrue
, checks ifP
is a well defined zero cycle, and stops the computation if this is not true. Iffalse
, the computation may have an unexpected behaviour. By default istrue
.show_bar::Bool
: hide the progress bar if and only if this condition isfalse
. By default istrue
.
In order to use this function, one must define v
, beta
and P
using Oscar:
julia> v = del_pezzo_surface(NormalToricVariety, 1); # this is the blow-up of the projective plane at a point
julia> beta = cohomology_class(toric_divisor(v, [0,0,1,0])); # class of pull back of a line of P2
julia> P = ev(1, a_point(v))*ev(2, a_point(v)); # pull back of a point through the first and second evaluations maps
julia> IntegrateAB(v, beta, 2, P, show_bar=false); # show_bar can be also true
Result: 1
The function returns an array of the same dimension of P
(non-vectorized classes are assumed as 1-dimensional arrays). The Julia notation for accessing to array is name_of_array[i]
where i
is an index starting from 1.
More examples are available in the support of the equivariant classes. It is enough to type ?
and then the name of the class. Currently, the supported classes are:
ev(j, cc)
(Euler class of $\mathrm{ev}_j^*(cc)$ where $cc$ is either a cohomology class or a line bundle)Psi(a)
(cycle of $\psi$-classes)push_ev(l)
(push-forward under the forget map of $\mathrm{ev}_j^*(l)$)R1_ev(l)
(first derived functor of the pull-back of $\mathrm{ev}_j^*(l)$)Jet(p, l)
(Euler class of the jet bundle $J^p$ of the line bundle $l$)
To add more classes, please contact the authors.
Equivariant Classes
Here we list all equivariant classes currently supported by the package.
ToricAtiyahBott.ev
— Functionev(j, cc)
ev(j, l)
Equivariant class of the pull-back of the cohomology class $cc$ (or the toric line bundle $l$) with respect to the j-th evaluation map.
Arguments
j::Int64
: the evaluation map.cc::CohomologyClass
: the cohomology class.l::ToricLineBundle
: the line bundle.
Example
The following Gromov-Witten invariants
\[\begin{aligned} \int_{\overline{M}_{0,2}(\mathbb{P}^{1},1)}\mathrm{ev}_{1}^{*}\mathcal{O}_{\mathbb{P}^{1}}(1)\cdot\mathrm{ev}_{2}^{*}\mathcal{O}_{\mathbb{P}^{1}}(1) &= 1 \\ \int_{\overline{M}_{0,2}(\mathbb{P}^{2},1)}(\mathrm{ev}_{1}^{*}\mathcal{O}_{\mathbb{P}^{2}}(1)\cdot\mathrm{ev}_{2}^{*}\mathcal{O}_{\mathbb{P}^{2}}(1))^2 &= 1 \\ \end{aligned}\]
can be computed as
julia> v = projective_space(NormalToricVariety, 1); # 1-dimensional projective space
julia> p = a_point(v); # the cohomology class of a point. Note that p^0 gives the class of the entire variety
julia> P = ev(1, p)*ev(2, p);
julia> IntegrateAB(v, p^0, 2, P, show_bar=false); # show_bar can be also true
Result: 1
julia> v = projective_space(NormalToricVariety, 2); # 2-dimensional projective space
julia> l = toric_line_bundle(v, [1]);
julia> P = (ev(1, l)*ev(2, l))^2;
julia> line = cohomology_class(toric_divisor(v, [1,0,0]));
julia> IntegrateAB(v, line, 2, P, show_bar=false); # show_bar can be also true
Result: 1
The program will stop if j
is not between 1 and the number of marks.
Let us give some more examples. Let $v = \mathbb{P}(\mathcal{O}_{\mathbb{P}^3}\oplus\mathcal{O}_{\mathbb{P}^3}(5))$.
julia> P3 = projective_space(NormalToricVariety, 3);
julia> v = proj(toric_line_bundle(P3, [0]),toric_line_bundle(P3, [5]));
Using moment_graph
we have a quick access to the moment graph of $v$.
julia> mg = moment_graph(v);
Consider the following curve class.
julia> beta = mg[1,2];
If $\mathrm{p}$ is the class of a point of $v$, in order to compute the following invariant
\[\begin{aligned} \int_{\overline{M}_{0,1}(v, \beta)} \mathrm{ev}_{1}^{*}(\mathrm{p}) &= 1 \\ \end{aligned}\]
we use the code:
julia> P = ev(1, a_point(v));
julia> IntegrateAB(v, beta, 1, P);
In order to speed up the computation, many equivariant classes of the same moduli space can be vectorized. For example the following two invariants are in the same moduli space.
\[\begin{aligned} \int_{\overline{M}_{0,2}(\mathbb{P}^2, 1)} \mathrm{ev}_{1}^{*}(\mathrm{p})\cdot\mathrm{ev}_{2}^{*}(\mathrm{p}) &= 1 \\ \int_{\overline{M}_{0,2}(\mathbb{P}^2, 1)} \mathrm{ev}_{1}^{*}(\mathrm{p})\cdot\psi_{1}^{1}\cdot\psi_{2}^{1} &= -1. \ \end{aligned}\]
The best way to compute them is by defining an array P=[P1,P2]
and compute them together.
julia> v = projective_space(NormalToricVariety, 2);
julia> p = a_point(v);
julia> P1 = ev(1, p)*ev(2, p);
julia> P2 = ev(1, p)*Psi([1,1]);
julia> P = [P1,P2];
julia> line = cohomology_class(toric_divisor(v, [1,0,0]));
julia> IntegrateAB(v, line, 2, P, show_bar=false);
Result number 1: 1
Result number 2: -1
ToricAtiyahBott.Psi
— FunctionPsi(a)
Equivariant class of the cycle of $\psi$-classes.
Arguments
a
: the list of exponents of the $\psi$ classes. It is ordered, meaning that the first element is the exponent of $\psi_1$, the second is the exponent of $\psi_2$, and so on. Alternatively,a
can be a number. In this case it is equivalent to [1,0,0,...,0].
The size of a
must be at most m
. If it is smaller, missing exponents will be considered as zeros. If a
is a number, it will be considered as the exponent of $\psi_1$.
The program will stop if we have one of the following conditions:
- the size of
a
is bigger thanm
, a
contains a negative number.
Example
The following Gromov-Witten invariants
\[\begin{aligned} \int_{\overline{M}_{0,1}(\mathbb{P}^{2},2)}\mathrm{ev}_{1}^{*}\mathcal{O}_{\mathbb{P}^{2}}(1)^{2}\cdot\psi_{1}^{4} &= \frac{1}{8} \\ \int_{\overline{M}_{0,2}(\mathbb{P}^{2},1)}\psi_{1}^{2}\psi_{2}^{2} &= 6 \\ \int_{\overline{M}_{0,1}(\mathbb{P}^{3},2)}\mathrm{ev}_{1}^{*}\mathcal{O}_{\mathbb{P}^{2}}(1)\cdot(\psi_{1}^{7}\cdot\mathrm{ev}_{1}^{*}\mathcal{O}_{\mathbb{P}^{2}}(1)+\psi_{1}^{6}\cdot\mathrm{ev}_{1}^{*}\mathcal{O}_{\mathbb{P}^{2}}(1)^{2}) &= -\frac{5}{16} \\ \end{aligned}\]
can be computed as
julia> v = projective_space(NormalToricVariety, 2); # 2-dimensional projective space
julia> line = cohomology_class(toric_divisor(v, [1,0,0])); # the cohomology class of a line
julia> P = ev(1, line)^2*Psi(4);
julia> IntegrateAB(v, 2*line, 1, P, show_bar=false);
Result: 1//8
julia> Q = Psi(2,2);
julia> IntegrateAB(v, line, 2, Q, show_bar=false);
Result: 6
julia> v = projective_space(NormalToricVariety, 3); # 3-dimensional projective space
julia> plane = cohomology_class(toric_line_bundle(v, [1])); # cohomology class of a plane
julia> P = ev(1, plane)*(Psi(7)*ev(1, plane)+Psi(6)*ev(1, plane)^2);
julia> IntegrateAB(v, 2*plane^2, 1, P, show_bar=false);
Result: -5//16
Psi
cannot be multiplied by itself.
julia> v = projective_space(NormalToricVariety, 2); # 2-dimensional projective space
julia> line = cohomology_class(toric_divisor(v, [1,0,0])); # the cohomology class of a line
julia> P = ev(1, line)^2*Psi(1)^4; #this is **wrong**
julia> IntegrateAB(v, 2*line, 1, P);
Warning: more instances of Psi has been found. Type:
julia> ?Psi
for support.
julia> P = ev(1, line)^2*Psi(3)*Psi(1); #this is **wrong**
julia> IntegrateAB(v, 2*line, 1, P);
Warning: more instances of Psi has been found. Type:
julia> ?Psi
for support.
julia> P = ev(1, line)^2*Psi(4);
julia> IntegrateAB(v, 2*line, 1, P);
Result: 1//8
ToricAtiyahBott.push_ev
— Functionpush_ev(l)
Equivariant class of the push-forward under the forget map of the pull-back of the toric line bundle $l$.
Arguments
l::ToricLineBundle
: the line bundle.
Example
The following Gromov-Witten invariants
\[\begin{aligned} \int_{\overline{M}_{0,0}(\mathbb{P}^{4},1)}\mathrm{c_{top}}(\delta_{*}(\mathrm{ev}^{*}\mathcal{O}_{\mathbb{P}^{4}}(5))) &= 2875 \\ \int_{\overline{M}_{0,1}(\mathbb{P}^{4},1)}\mathrm{c_{top}}(\delta_{*}(\mathrm{ev}^{*}\mathcal{O}_{\mathbb{P}^{4}}(5)))\cdot\psi_{1}^{1} &= -5750 \end{aligned}\]
can be computed as
julia> v = projective_space(NormalToricVariety, 4);
julia> line = cohomology_class(toric_line_bundle(v, [1]))^3;
julia> P = push_ev(toric_line_bundle(v, [5]));
julia> IntegrateAB(v, line, 0, P, show_bar=false);
Result: 2875
julia> P = push_ev(toric_line_bundle(v, [5]))*Psi(1);
julia> IntegrateAB(v, line, 1, P, show_bar=false);
Result: -5750
ToricAtiyahBott.R1_ev
— FunctionR1_ev(l)
The equivariant class of the first derived functor of the pull-back of the toric line bundle $l$.
Arguments
l::ToricLineBundle
: the line bundle.
Example
\[\begin{aligned} \int_{\overline{M}_{0,0}(\mathbb{P}^{1},d)}\mathrm{c_{top}}(R^{1}\delta_{*}(\mathrm{ev}^{*}\mathcal{O}_{\mathbb{P}^{3}}(-1)))^2 &= \frac{1}{d^3} \ \end{aligned}\]
can be computed as
julia> P1 = projective_space(NormalToricVariety, 1);
julia> beta = moment_graph(P1)[1,2];
(1,2) -> 1
julia> P = R1_ev(toric_line_bundle(P1, [-1]))^2;
julia> IntegrateAB(P1, beta, 0, P, show_bar=false);
Result: 1
ToricAtiyahBott.Jet
— FunctionJet(p, l)
Equivariant class of the jet bundle $J^p$ of the pull back of the toric line bundle $l$ with respect to the first $\psi$-class.
Arguments
p::Int64
: the exponent of the Jet bundle. In particular, it is a bundle of rank $p+1$.l::Int64
: the toric line bundle that is pulled back.
In order to define this bundle, the number of marks must be at least 1. You cannot multiply this bundle by the class Psi(a)
.
Example
\[\begin{aligned} \int_{\overline{M}_{0,1}(\mathbb{P}^{3},d)}\frac{\mathrm{ev}_{1}^{*}\mathcal{O}_{\mathbb{P}^{3}}(1)^{2}}{k}\cdot\mathrm{c_{top}}(J^{4d-2}(\mathrm{ev}_{1}^{*}\mathcal{O}_{\mathbb{P}^{3}}(k))) &= \frac{(4d-2)!}{(d!)^{4}} \\ \int_{\overline{M}_{0,1}(\mathbb{P}^{2},1)}\mathrm{c_{top}}(J^{2}(\mathrm{ev}_{1}^{*}\mathcal{O}_{\mathbb{P}^{2}}(3))) &= 9 \\ \end{aligned}\]
can be computed as
julia> d=1;k=1; #for other values of d, change this line
julia> v = projective_space(NormalToricVariety, 3);
julia> line = cohomology_class(toric_divisor(v, [1,0,0,0]))^2;
julia> beta = d*line;
julia> l = toric_line_bundle(v, [k]);
julia> P = ev(1,line)//k*Jet(4*d-2,l);
julia> IntegrateAB(v, beta, 1, P, show_bar=false); #The value of this integral does not depend on k, only on d
Result: 2
julia> v = projective_space(NormalToricVariety, 2);
julia> l = toric_line_bundle(v, [1]);
julia> line = cohomology_class(l);
julia> IntegrateAB(v, line, 1, Jet(2, l^3), show_bar=false); # flexes of a cubic curve
Result: 9
ToricAtiyahBott.class_one
— Functionclass_one()
Equivariant class equals to the number one. Useful to compute the degree of a moduli space of dimension 0.
Example
Let $v$ be a toric variety and $\beta$ be a class such that $\overline{M}_{0,0}(v,\beta)$ is zero dimensional. The following Gromov-Witten invariants
\[\int_{\overline{M}_{0,0}(v,\beta)}1 \]
can be computed, for example, as
julia> P3 = projective_space(NormalToricVariety, 3);
julia> x = domain(blow_up(P3, [1,1,1]; coordinate_name="Ex1"));
julia> v = domain(blow_up(x, [-1,0,0]; coordinate_name="Ex2"));
julia> mg = moment_graph(v, show_graph=false);
julia> (H, E1, E2) = (mg[7,8], mg[4,5], mg[1,2]);
julia> (d, e1, e2) = (2, -2, -2);
julia> beta = d*H + e1*E1 + e2*E2;
julia> P = class_one();
julia> IntegrateAB(v, beta, 0, P, show_bar=false);
Result: 1//8
ToricAtiyahBott.push_omega
— Functionpush_omega(l)
Equivariant class of the push-forward under the forgetful map of $ev^*l$ tensored the cotangent bundle of the forgetful map.
Arguments
l::ToricLineBundle
: the line bundle.
Example
The following Gromov-Witten invariants
\[\begin{aligned} \int_{\overline{M}_{0,2}(\mathbb{P}^{3},1)}\mathrm{ev}_{1}^{*}\mathcal{O}_{\mathbb{P}^{3}}(1)^{2}\cdot\mathrm{ev}_{2}^{*}\mathcal{O}_{\mathbb{P}^{3}}(1)^{3}\cdot\mathrm{c_{top}}(\delta_{*}(\omega_{\delta}\otimes\mathrm{ev}^{*}\mathcal{O}_{\mathbb{P}^{3}}(2))) &= 1 \\ \end{aligned}\]
can be computed as
julia> v = projective_space(NormalToricVariety, 3);
julia> line = cohomology_class(toric_line_bundle(v, [1]))^2;
julia> P = push_omega(toric_line_bundle(v, [2]))*ev(1, line)*ev(2, a_point(v));
julia> IntegrateAB(v, line, 2, P, show_bar=false);
Result: 1
Other Functions
ToricAtiyahBott.vir_dim_M
— Functionvir_dim_M(v, beta, m)
The virtual dimension of the moduli space of stable rational map to the toric variety v
, of class beta
with m
marks.
Arguments
v::NormalToricVariety
: the toric variety.beta::CohomologyClass
: the class of the stable maps.m::Int64
: the number of marks.
Example
julia> v = projective_space(NormalToricVariety, 2);
julia> beta = cohomology_class(toric_divisor(v, [1,0,0]));
julia> vir_dim_M(v,beta,0)
2
ToricAtiyahBott.codimension
— Functioncodimension(v, beta, m, P)
The codimension of the equivariant class P
.
Arguments
v::NormalToricVariety
: the toric variety.beta::CohomologyClass
: the class of the stable maps.m::Int64
: the number of marks. If omitted, it is assumed asm=0
.P
: the equivariant class.
ToricAtiyahBott.is_zero_cycle
— Functionis_zero_cycle(v, beta, m, P)
Return true
if the equivariant class P
is a 0-cycle in the moduli space, false
otherwise.
Arguments
v::NormalToricVariety
: the toric variety.beta::CohomologyClass
: the class of the stable maps.m::Int64
: the number of marks.P
: the equivariant class.
ToricAtiyahBott.a_point
— Functiona_point(v)
The cohomology of a point of v
.
Arguments
v::NormalToricVariety
: the toric variety.
ToricAtiyahBott.moment_graph
— Functionmoment_graph(v; show_graph)
The moment graph of the toric variety $v$. It prints all pairs $(i,j)$, together with the cohomology class of the invariant curve passing through the points corresponding to the maximal cones $i$ and $j$. The cohomology class is expressed in the coordinates of the Chow ring.
Arguments
v::NormalToricVariety
: the toric variety.
Example
julia> P2 = projective_space(NormalToricVariety, 2);
julia> mg = moment_graph(P2);
(1,2) -> x3
(1,3) -> x3
(2,3) -> x3
julia> C = mg[1,2];
If show_graph
is omitted or false, the output is omitted.
julia> P1 = projective_space(NormalToricVariety, 1);
julia> mg = moment_graph(P1, show_graph=false);
Index
ToricAtiyahBott
ToricAtiyahBott.IntegrateAB
ToricAtiyahBott.Jet
ToricAtiyahBott.Psi
ToricAtiyahBott.R1_ev
ToricAtiyahBott.a_point
ToricAtiyahBott.class_one
ToricAtiyahBott.codimension
ToricAtiyahBott.ev
ToricAtiyahBott.is_zero_cycle
ToricAtiyahBott.moment_graph
ToricAtiyahBott.push_ev
ToricAtiyahBott.push_omega
ToricAtiyahBott.vir_dim_M