AtiyahBott.jl
AtiyahBott
— ModuleAtiyahBott is a module containing an implementation of the Atiyah-Bott residue formula in the Julia language. The theory and the algorithm behind the package is described in the paper "Effective computations of the Atiyah-Bott formula" by Giosuè Muratore and Csaba Schneider (https://doi.org/10.1016/j.jsc.2022.01.005).
A previous version used colorations from here: https://github.com/mgemath/Colorations. The current version generates internally all colorations.
In order to install the package, type:
julia> using Pkg
julia> Pkg.add("AtiyahBott")
To load the package, type:
julia> using AtiyahBott
The function AtiyahBottFormula
This is the main function of the package.
AtiyahBott.AtiyahBottFormula
— FunctionAtiyahBottFormula(n, d, m, P; do_check, show_bar)
Apply the Atiyah-Bott residue formula to the class P
, in the moduli space of rational marked stable maps to the projective space of dimension n
of degree d
with m
marks.
Arguments
n::Int64
: the dimension of the projective space.d::Int64
: the degree of the stable maps, it must be positive.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
.
The general construction of P
is the following:
julia> P =
After =
, one has to write an expression in the equivariant classes. The expression is a combination of the equivariant classes. We compute the degree of P
by
julia> AtiyahBottFormula(n, d, m, P);
Example
julia> P = Hypersurface(5);
julia> AtiyahBottFormula(3, 1, 0, P);
Warning: the class is not a 0-cycle.
julia> AtiyahBottFormula(4, 1, 0, P);
Result: 2875
julia> AtiyahBottFormula(4, 1, 0, P, do_check = false); #skip the preliminary check on `P`
julia> AtiyahBottFormula(4, 1, 0, P, show_bar = false); #it does not show the progress bar
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.
Example
julia> P = Incidency(2)*Hypersurface(3);
julia> x = AtiyahBottFormula(3, 2, 0, P)[1];
Result: 81
julia> x
81
The class P
supports parameters.
julia> P = Hypersurface(3)*(Incidency(2)//3)^(d-1);
julia> d = 2;
julia> AtiyahBottFormula(3, d, 0, P);
Result: 27
julia> d = 3;
julia> AtiyahBottFormula(3, d, 0, P);
Result: 84
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:
O1_i(j)
(Euler class of $\mathrm{ev}_j^*\mathcal{O}_{\mathbb{P}^n}(1)$)O1()
(product of allO1_i
)Psi(a)
(cycle of $\psi$-classes)Jet(p,q)
(Euler class of the jet bundle $J^p$ of $\mathrm{ev}^*\mathcal{O}_{\mathbb{P}^n}(q)$)Hypersurface(b)
(Euler class of the direct image of $\mathrm{ev}^*\mathcal{O}_{\mathbb{P}^n}(b)$)Incidency(r)
(cycle parameterizing curves meeting a linear subspace of codimension $r$)Contact()
(cycle parameterizing contact curves)R1(k)
(first derived functor of direct image of $\mathrm{ev}^*\mathcal{O}_{\mathbb{P}^n}(-k)$)
To add more classes, please contact the authors.
Equivariant Classes
Here we list all equivariant classes currently supported by the package.
AtiyahBott.Hypersurface
— FunctionHypersurface(b)
Equivariant class of the Euler class of the bundle equal to the direct image under the forgetful map of $\mathrm{ev}^*\mathcal{O}_{\mathbb{P}^n}(b)$. It parameterizes curves contained in a hypersurface of degree b
.
Arguments
b::Int64
: the degrees of the hypersurface. Alternatively, it can be an array of integers, meaning the multiplication of the equivariant class defined by each element of the array.
Example
The following Gromov-Witten invariants of Calabi-Yau threefolds
\[\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,0}(\mathbb{P}^{5},2)}\mathrm{c_{top}}(\delta_{*}(\mathrm{ev}^{*}\mathcal{O}_{\mathbb{P}^{5}}(3))^{\oplus 2}) &= \frac{423549}{8} \\ \int_{\overline{M}_{0,0}(\mathbb{P}^{5},3)}\mathrm{c_{top}}(\delta_{*}(\mathrm{ev}^{*}\mathcal{O}_{\mathbb{P}^{5}}(4)))\cdot\mathrm{c_{top}}(\delta_{*}(\mathrm{ev}^{*}\mathcal{O}_{\mathbb{P}^{5}}(2))) &= \frac{422690816}{27} \\ \int_{\overline{M}_{0,0}(\mathbb{P}^{7},4)}\mathrm{c_{top}}(\delta_{*}(\mathrm{ev}^{*}\mathcal{O}_{\mathbb{P}^{7}}(2)))^4 &= 25705160 \\ \end{aligned}\]
can be computed as
julia> P = Hypersurface(5);
julia> AtiyahBottFormula(4, 1, 0, P, show_bar=false);
Result: 2875
julia> P = Hypersurface([3,3]);
julia> AtiyahBottFormula(5, 2, 0, P, show_bar=false);
Result: 423549//8
julia> P = Hypersurface(4)*Hypersurface(2);
julia> AtiyahBottFormula(5, 3, 0, P, show_bar=false);
Result: 422690816//27
julia> P = Hypersurface(2)^4;
julia> AtiyahBottFormula(7, 4, 0, P, show_bar=false);
Result: 25705160
The program will stop if b
is not positive.
AtiyahBott.O1_i
— FunctionO1_i(j)
Equivariant class of the pull-back of $\mathcal{O}_{\mathbb{P}^n}(1)$ with respect to the j-th evaluation map.
Arguments
j::Int64
: the evaluation map.
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,1}(\mathbb{P}^{3},1)}\mathrm{ev}_{1}^{*}\mathcal{O}_{\mathbb{P}^{2}}(1)^{2}\cdot\mathrm{c_{top}}(\delta_{*}(\mathrm{ev}^{*}\mathcal{O}_{\mathbb{P}^{3}}(2))) &= 4 \end{aligned}\]
can be computed as
julia> P = O1_i(1)*O1_i(2);
julia> AtiyahBottFormula(1, 1, 2, P, show_bar=false);
Result: 1
julia> P = O1_i(1)^2*Hypersurface(2);
julia> AtiyahBottFormula(3, 1, 1, P, show_bar=false);
Result: 4
The program will stop if j
is not between 1 and the number of marks.
AtiyahBott.O1
— FunctionO1()
Equivariant class of the pull-back of $\mathcal{O}_{\mathbb{P}^n}(1)$ with respect to the product of all evaluation maps.
This function is equivalent to the product of the function O1_i(j)
where j
runs from 1 to the number of marks.
Example
The following Gromov-Witten invariants
\[\begin{aligned} \int_{\overline{M}_{0,8}(\mathbb{P}^{2},3)}\prod_{i=1}^{8}\mathrm{ev}_{i}^{*}\mathcal{O}_{\mathbb{P}^{2}}(1)^2 &= 12 \\ \int_{\overline{M}_{0,1}(\mathbb{P}^{3},2)}\mathrm{ev}_{1}^{*}\mathcal{O}_{\mathbb{P}^{3}}(1)^2\cdot\mathrm{c_{top}}(\delta_{*}(\mathrm{ev}^{*}\mathcal{O}_{\mathbb{P}^{3}}(3))) &= 81 \\ \end{aligned}\]
can be computed as
julia> P = O1()^2;
julia> AtiyahBottFormula(2, 3, 8, P, show_bar=false);
Result: 12
julia> P = O1()^2*Hypersurface(3);
julia> AtiyahBottFormula(3, 2, 1, P, show_bar=false);
Result: 81
In order to remove O1_i(j)
for some j
, it is enough to divide by that function.
Example
julia> P = O1()//O1_i(1);
Here P
is the product of all O1_i(j)
where j
runs from 2 to m
.
AtiyahBott.Incidency
— FunctionIncidency(r)
Equivariant class of the cycle parameterizing curves meeting a linear subspace of codimension r
.
Arguments
r::Int64
: the codimension of the subvariety. Alternatively, it can be an array of integers, meaning the multiplication of the equivariant class defined by each element of the array.
Example
The following Gromov-Witten invariants
\[\begin{aligned} \int_{\overline{M}_{0,0}(\mathbb{P}^{3},1)}\delta_{*}(\mathrm{ev}^{*}\mathcal{O}_{\mathbb{P}^{3}}(1)^{3})^{2} &= 1 \\ \int_{\overline{M}_{0,0}(\mathbb{P}^{3},1)}\delta_{*}(\mathrm{ev}^{*}\mathcal{O}_{\mathbb{P}^{3}}(1)^{2})^{2}\cdot \delta_{*}(\mathrm{ev}^{*}\mathcal{O}_{\mathbb{P}^{3}}(1)^{3}) &= 1 \\ \int_{\overline{M}_{0,0}(\mathbb{P}^{3},3)}\delta_{*}(\mathrm{ev}^{*}\mathcal{O}_{\mathbb{P}^{3}}(1)^{2})^{2}\cdot \mathrm{c_{top}}(\delta_{*}(\mathrm{ev}^{*}\mathcal{O}_{\mathbb{P}^{3}}(3))) &= 756 \\ \end{aligned}\]
can be computed as
julia> P = Incidency(3)^2;
julia> AtiyahBottFormula(3, 1, 0, P, show_bar=false);
Result: 1
julia> P = Incidency([2,2,3]);
julia> AtiyahBottFormula(3, 1, 0, P, show_bar=false);
Result: 1
julia> P = Incidency([2,2])*Hypersurface(3);
julia> AtiyahBottFormula(3, 3, 0, P, show_bar=false);
Result: 756
The program will stop if r
is not positive.
AtiyahBott.Psi
— FunctionPsi(a)
Equivariant class of the cycle of $\psi$-classes.
Arguments
a::Vector{Int64}
: the vector of the 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.
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,2}(\mathbb{P}^{6},2)}\mathrm{ev}_{1}^{*}\mathcal{O}_{\mathbb{P}^{6}}(1)^{5}\cdot\mathrm{ev}_{2}^{*}\mathcal{O}_{\mathbb{P}^{6}}(1)^{2}\cdot\mathrm{c_{top}}(\delta_{*}(\mathrm{ev}^{*}\mathcal{O}_{\mathbb{P}^{6}}(5)))\cdot\psi_{1}\psi_{2}^{0} &= 495000 \\ \int_{\overline{M}_{0,2}(\mathbb{P}^{10},2)}\mathrm{ev}_{1}^{*}\mathcal{O}_{\mathbb{P}^{10}}(1)^{8}\cdot\mathrm{ev}_{2}^{*}\mathcal{O}_{\mathbb{P}^{10}}(1)^{6}\cdot\mathrm{c_{top}}(\delta_{*}(\mathrm{ev}^{*}\mathcal{O}_{\mathbb{P}^{10}}(7)))\cdot\psi_{1}^{2} &= 71804533752 \\ \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,1}(\mathbb{P}^{2},2)}\delta_{*}(\mathrm{ev}^{*}\mathcal{O}_{\mathbb{P}^{2}}(1)^{2})^{4}\cdot\mathrm{ev}_{1}^{*}\mathcal{O}_{\mathbb{P}^{2}}(1)\cdot(\mathrm{ev}_{1}^{*}\mathcal{O}_{\mathbb{P}^{2}}(1)+\psi_{1}) &= 2 \\ \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> P = O1_i(1)^5*O1_i(2)^2*Hypersurface(5)*Psi([1,0]);
julia> AtiyahBottFormula(6, 2, 2, P, show_bar=false);
Result: 495000
julia> P = O1_i(1)^8*O1_i(2)^6*Hypersurface(7)*Psi(2);
julia> AtiyahBottFormula(10, 2, 2, P, show_bar=false);
Result: 71804533752
julia> P = O1()^2*Psi(4);
julia> AtiyahBottFormula(2, 2, 1, P, show_bar=false);
Result: 1//8
julia> P = Incidency(2)^4*O1_i(1)*(O1_i(1) + Psi(1));
julia> AtiyahBottFormula(2, 2, 1, P, show_bar=false); #number of plane conics through four points and tangent to a line
Result: 2
julia> P = O1()*(Psi(7)*O1()+Psi(6)*O1()^2);
julia> AtiyahBottFormula(3, 2, 1, P, show_bar=false);
Result: -5//16
Psi
cannot be multiplied by itself.
julia> P = O1()^2*Psi(1)^4; #this is **wrong**
julia> AtiyahBottFormula(2,2,1,P);
Warning: more instances of Psi has been found. Type:
julia> ?Psi
for support.
julia> P = O1()^2*Psi(3)*Psi(1); #this is **wrong**
julia> AtiyahBottFormula(2,2,1,P);
Warning: more instances of Psi has been found. Type:
julia> ?Psi
for support.
julia> P = O1()^2*Psi(4);
julia> AtiyahBottFormula(2,2,1,P);
Result: 1//8
AtiyahBott.Jet
— FunctionJet(p, q)
Equivariant class of the jet bundle $J^p$ of the pull back of $\mathcal{O}_{\mathbb{P}^n}(q)$ 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$.q::Int64
: the degree of the 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}^{2},2)}\delta_{*}(\mathrm{ev}^{*}\mathcal{O}_{\mathbb{P}^{2}}(1)^{2})^{4}\cdot\mathrm{c_{top}}(J^{1}(\mathrm{ev}_{1}^{*}\mathcal{O}_{\mathbb{P}^{2}}(1))) &= 2 \\ \int_{\overline{M}_{0,1}(\mathbb{P}^{2},2)}\delta_{*}(\mathrm{ev}^{*}\mathcal{O}_{\mathbb{P}^{2}}(1)^{2})^{4}\cdot(\mathrm{c_{top}}(J^{1}(\mathrm{ev}_{1}^{*}\mathcal{O}_{\mathbb{P}^{2}}(1)))+\mathrm{ev}_{1}^{*}\mathcal{O}_{\mathbb{P}^{2}}(1)^{2}) &= 3 \\ \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}} \\ \end{aligned}\]
can be computed as
julia> P = Incidency(2)^4*Jet(1,1);
julia> AtiyahBottFormula(2, 2, 1, P, show_bar=false);
Result: 2
julia> P = Incidency(2)^4*(Jet(1,1)+O1()^2);
julia> AtiyahBottFormula(2, 2, 1, P, show_bar=false);
Result: 3
julia> d=1;k=1; #for other values of d, change this line
julia> P = (O1()^2)//k*Jet(4*d-2,k);
julia> AtiyahBottFormula(3, d, 1, P, show_bar=false); #The value of this integral does not depend on k, only on d
Result: 2
AtiyahBott.Contact
— FunctionContact()
Equivariant class of the Euler class of the bundle equal to the direct image under the forgetful map of $\mathrm{ev}^*\mathcal{O}_{\mathbb{P}^n}(2)$ tensor the dualizing sheaf of the forgetful map. It parameterizes contact curves in an odd dimensional projective space.
Example
\[\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> P = O1_i(1)^2*O1_i(2)^3*Contact();
julia> AtiyahBottFormula(3, 1, 2, P, show_bar=false);
Result: 1
AtiyahBott.R1
— FunctionR1(k)
The equivariant class of the first derived functor of the pull-back of $\mathcal{O}_{\mathbb{P}^n}(-k)$.
Arguments
k::Int64
: a positive integer.
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> d = 1; #for other values of d, change this line
julia> P = R1(1)^2;
julia> AtiyahBottFormula(1, d, 0, P, show_bar=false);
Result: 1
The program will stop if k
is not positive.
Other Functions
AtiyahBott.dim_M
— Functiondim_M(n, d, m)
The dimension of the moduli space of stable rational map to the projective space of dimension n
, of degree d
with m
marks.
Arguments
n::Int64
: the dimension of the projective space.d::Int64
: the degree of the stable maps.m::Int64
: the number of marks.
Example
julia> dim_M(2,2,5)
10
AtiyahBott.codim
— Functioncodim(n, d, m, P)
The codimension of the equivariant class P
.
Arguments
n::Int64
: the dimension of the projective space.d::Int64
: the degree of the stable maps.m::Int64
: the number of marks.P
: the equivariant class.
Example
julia> P = Hypersurface(g,c,w,s,5);
julia> codim(4,1,0,P)
6
AtiyahBott.is_zero_cycle
— Functionis_zero_cycle(n, d, m, P)
Return true
if the equivariant class P
is a 0-cycle in the moduli space, false
otherwise.
Arguments
n::Int64
: the dimension of the projective space.deg::Int64
: the degree of the stable maps.n_marks::Int64
: the number of marks.P
: the equivariant class.
Example
julia> P = Hypersurface(g,c,w,s,5);
julia> is_zero_cycle(4,1,0,P)
true