AtiyahBott.jl

AtiyahBottModule

AtiyahBott 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.AtiyahBottFormulaFunction
AtiyahBottFormula(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: if true, checks if P is a well defined zero cycle, and stops the computation if this is not true. If false, the computation may have an unexpected behaviour. By default is true.
  • show_bar::Bool: hide the progress bar if and only if this condition is false. By default is true.

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 all O1_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.HypersurfaceFunction
Hypersurface(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);
Result: 2875
julia> P = Hypersurface([3,3]);
julia> AtiyahBottFormula(5,2,0,P);
Result: 423549//8
julia> P = Hypersurface(4)*Hypersurface(2);
julia> AtiyahBottFormula(5,3,0,P);
Result: 422690816//27
julia> P = Hypersurface(2)^4;
julia> AtiyahBottFormula(7,4,0,P);
Result: 25705160
Attention!

The program will stop if b is not positive.

AtiyahBott.O1_iFunction
O1_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);
Result: 1
julia> P = O1_i(1)^2*Hypersurface(2);
julia> AtiyahBottFormula(3,1,1,P);
Result: 4
Attention!

The program will stop if j is not between 1 and the number of marks.

AtiyahBott.O1Function
O1()

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);
Result: 12
julia> P = O1()^2*Hypersurface(3);
julia> AtiyahBottFormula(3,2,1,P);
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.IncidencyFunction
Incidency(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);
Result: 1
julia> P = Incidency([2,2,3]);
julia> AtiyahBottFormula(3,1,0,P);
Result: 1
julia> P = Incidency([2,2])*Hypersurface(3);
julia> AtiyahBottFormula(3,3,0,P);
Result: 756
Attention!

The program will stop if r is not positive.

AtiyahBott.PsiFunction
Psi(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.
Note

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$.

Attention!

The program will stop if we have one of the following conditions:

  • the size of a is bigger than m,
  • 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);
Result: 495000
julia> P = O1_i(1)^8*O1_i(2)^6*Hypersurface(7)*Psi(2);
julia> AtiyahBottFormula(10,2,2,P);
Result: 71804533752
julia> P = O1()^2*Psi(4);
julia> AtiyahBottFormula(2,2,1,P);
Result: 1//8
julia> P = Incidency(2)^4*O1_i(1)*(O1_i(1) + Psi(1));
julia> AtiyahBottFormula(2,2,1,P); #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);
Result: -5//16
Psi is singleton!

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.JetFunction
Jet(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.
Note

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);
Result: 2
julia> P = Incidency(2)^4*(Jet(1,1)+O1()^2);
julia> AtiyahBottFormula(2,2,1,P);
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);   #The value of this integral does not depend on k, only on d
AtiyahBott.ContactFunction
Contact()

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);
Result: 1
AtiyahBott.R1Function
R1(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);
Result: 1
Attention!

The program will stop if k is not positive.

Other Functions

AtiyahBott.dim_MFunction
dim_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.codimFunction
codim(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_cycleFunction
is_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

Index