Equivariant Gromov–Witten invariants of GKM graphs
One of the main features of this package is to calculate equivariant Gromov-Witten invariants of GKM spaces $X$ (see Definition).
Informally, they are defined as follows. Given equivariant cohomology classes $y_1,\dots,y_m\in H_T^*(X;\mathbb{Q})$, a choice of genus $g\ge 0$, and a curve class $\beta\in H_2(X;\mathbb{Z})$, the associated $T$-equivariant Gromov-Witten invariant is
\[GW^T_{X,g,m,\beta}(y_1,\dots,y_m) := \int_{\left[\overline{\mathcal{M}}_{g,m}(X;\beta)\right]_T^\text{vir}} \prod_{i=1}^m \text{ev}_i^*(y_i) \in H_T^*(\text{point};\mathbb{Q})\cong \mathbb{Q}[t_1,\dots,t_r].\]
Here, $\overline{\mathcal{M}}_{g,m}(X;\beta)$ is the moduli space of stable maps of genus $g$ with $m$ marked points to $X$ in curve class $\beta$, and $\text{ev}_i\colon \overline{\mathcal{M}}_{g,m}(X;\beta) \rightarrow X$ is the evaluation map at the $i$-th marked point. We refer to [CK99] for details.
It is sometimes desirable to multiply the integrand in $\int_{\left[\overline{\mathcal{M}}_{g,m}(X;\beta)\right]_T^\text{vir}}$ by additional cohomology classes on $\overline{\mathcal{M}}_{g,m}(X;\beta)$, such as $\psi$-classes or the top Chern classes of certain vector bundles. This is supported, see Cohomology classes on the moduli space.
Mathematical ingredients: The following mathematical ingredients are used in the package:
The localization formula from [LS17, Hir23] that expresses equivariant Gromov-Witten invariants in the form
\[ GW^T_{X,g,m,\beta}(...) = \sum_{\overrightarrow{\Gamma}} GW^T_{\overrightarrow{\Gamma}}\]
where the sum is over certain decorated graphs (trees in genus zero) $\overrightarrow{\Gamma}$ mapping into the GKM graph of $X$, such that the edge multiplicities sum to the curve class $\beta\in H_2(X;\mathbb{Z})$. Here, $GW^T_{\overrightarrow{\Gamma}}$ is a rational function in $(\dim{T})$-many variables, i.e. an element of $\text{Frac}H_T^*(\text{pt};\mathbb{Q})$.
An efficient way of enumerating graphs (or trees in genus zero) with marked points and counting their automorphisms (inspired by [WROM86]).
A way of enumerating all combination of edges with multiplicities in the GKM graph that sum to a given curve class $\beta\in H_2(X;\mathbb{Z})$ (see supporting paper).
For positive genus, a table of Hodge integrals $\int_{\overline{\mathcal{M}}_{g,n}} \psi_1^{a_1}\cdots \psi_n^{a_n}\lambda_1^{l_1}\cdots\lambda_g^{l_g}$ up to the required genus, which we generate using [Yan10a, Yan10b].
Interesting aspects of the positive genus calculation will be discussed in a follow-up paper.
Integrating on the moduli space
GKMtools.gromov_witten — Function
gromov_witten(G::AbstractGKM_graph, beta::CurveClass_type, n_marks::Int64, P_input::EquivariantClass; show_bar::Bool = true, fast_mode::Bool = false, g::Int64 = 0) -> GW invariantsIntegrate the class P_input over the moduli space $\overline{\mathcal{M}}_{g,n}(X,\beta)$ of genus g stable maps to $X$ in class $\beta\in H_2(X;\mathbb{Z})$ with n_marks marked points. The result is an element of $\text{Frac}(H_T^*(\text{pt};\mathbb{Q}))$, i.e. a rational function in $\dim_\mathbb{C}(T)$ many variables.
If the underlying space is a (smooth projective or Hamiltonian) GKM space then the output should in fact live in $H_T^*(\text{pt};\mathbb{Q})$, so it should be a polynomial in the $\dim_\mathbb{C}(T)$ many variables.
The GKM graph G must have a connection, as this datum is required by the localization formula [LS17].
Arguments
G::AbstractGKM_graph: The GKM graph of the target GKM space $X$.beta::CurveClass_type: The (non-zero) curve class $\beta\in H_2(X;\mathbb{Z})$ in which the image of the stable map should lie. To producebeta, use functions likecurve_class(see Curve Classes).P_input::EquivariantClass: The equivariant cohomology class on $\overline{\mathcal{M}}_{g,n}(X,\beta)$ that is being integrated. Use the functionsev,class_one, andPsito produce this. These classes also support arithmetic using+,*, et cetera.show_bar::Bool: Iftrue, a progress bar will be displayed showing the estimated time until completion. This should be used for big examples.fast_mode::Bool: If the expected result of the computation is a number, this option will speed up the computation.g::Int64: Genus of the GW invariant to be computed. The default value is0.
If the expected result of the computation is not a number and fast_mode is true, the result will be a meaningless number.
Example
julia> P2 = projective_space(GKM_graph, 2);
julia> beta = curve_class(P2, Edge(1, 2));
julia> gromov_witten(P2, beta, 1, ev(1, point_class(P2, 1)); show_bar=false)
0
julia> gromov_witten(P2, beta, 2, ev(1, point_class(P2, 1)) * ev(2, point_class(P2, 2)); show_bar=false)
1
julia> gromov_witten(P2, beta, 2, ev(1, point_class(P2, 1)) * ev(2, point_class(P2, 1)); show_bar=false, fast_mode=true)
1
julia> gromov_witten(P2, beta, 2, ev(1, point_class(P2, 1))^2 * ev(2, point_class(P2, 2)); show_bar=false)
t1^2 - t1*t2 - t1*t3 + t2*t3
julia> gromov_witten(P2, beta, 3, ev(1, point_class(P2, 1)) * ev(2, point_class(P2, 1)) * ev(3, point_class(P2, 3)); show_bar=false)
t1 - t2Example in positive genus
In the following example, $F$ is the twisted flag manifold and $\beta=[C_e]$, where $e$ is the unique edge of the GKM graph of $F$ with $\int_{C_e} c_1(T_F)=0$. Thus, the resulting invariants agree with those of an equivariantly Calabi–Yau GKM linearization of $\mathcal{O}_{\mathbb{P}^1}(1)\oplus \mathcal{O}_{\mathbb{P}^1}(-3)$.
julia> F = gkm_3d_twisted_flag();
julia> beta = curve_class(F, "3", "4")
(-2, 1)
julia> for d in 1:3
gw = gromov_witten(F, d*beta, 0, class_one(); g=1, show_bar=false)
println("Genus 1, degree $d: $gw")
end
Genus 1, degree 1: 1//12
Genus 1, degree 2: -1//24
Genus 1, degree 3: -29//36Cohomology classes on the moduli space
GKMtools.ev — Function
ev(j::Int64, cc) -> EquivariantClassReturn the equivariant cohomology class on $\overline{\mathcal{M}}_{g,n}(X,\beta)$ that is given by pulling back the cohomology class cc on $X$ along the evaluation map at the j-th point: $\text{ev}_j\colon \overline{\mathcal{M}}_{g,n}(X,\beta)\rightarrow X$.
Example
julia> G24 = grassmannian(GKM_graph, 2, 4);
julia> e1 = ev(1, point_class(G24, 1));
julia> e2 = ev(2, first_chern_class(G24));
julia> e3 = ev(3, poincare_dual(gkm_subgraph_from_vertices(G24, [1, 2])));
julia> beta = curve_class(G24, Edge(1, 2));
julia> gromov_witten(G24, beta, 3, e1 * e2 * e3; show_bar=false)
4GKMtools.class_one — Function
class_one() -> EquivariantClassReturn the cohomology class $1$ on $\overline{\mathcal{M}}_{g,n}(X,\beta)$.
Example
julia> P2 = projective_space(GKM_graph, 2);
julia> beta = curve_class(P2, Edge(1, 2));
julia> gromov_witten(P2, beta, 2, ev(1, point_class(P2, 1)) * ev(2, point_class(P2, 2)); show_bar=false)
1
julia> gromov_witten(P2, beta, 2, ev(1, point_class(P2, 1)) * ev(2, point_class(P2, 2)) * class_one(); show_bar=false)
1
julia> gromov_witten(P2, beta, 0, class_one(); show_bar=false)
0GKMtools.Psi — Function
Psi(a) -> EquivariantClassFor each index $i$ such that $1\le i \le n$, there is a line bundle on $\overline{\mathcal{M}}_{g,n}(X,\beta)$ such that the fiber at a moduli point is the cotangent bundle of the curve at the $i^\mathrm{th}$ marked point. We denote by $\psi_i$ the first Chern class of this line bundle. In order to compute invariants involving ${\psi_1}^{a_1}\cdots {\psi_n}^{a_n}$, for some nonnegative integers $a_1,\ldots, a_n$, we write Psi(a_1,...,a_n).
Examples
Let $G$ be the GKM graph of the Hirzebruch surface $\mathbb{P}(\mathcal{O}_{\mathbb{P}^1}(0) \oplus \mathcal{O}_{\mathbb{P}^1}(1))$, let $\beta$ the class of the fiber. The invariant
\[\int_{\overline{\mathcal{M}}_{0,2}(G, \beta)}\mathrm{ev}_{1}^{*}([\mathrm{pt}])\cdot\psi_{1}^{0}\psi_{2} = -1,\]
can be computed as following.
julia> G = gkm_graph_of_toric(hirzebruch_surface(NormalToricVariety, 1));
julia> P = ev(1, point_class(G, 1)) * Psi(0,1);
julia> beta = curve_class(G, "1", "4"); # beta is a fiber of the map G -> P^1
julia> gromov_witten(G, beta, 2, P; show_bar=false)
-1Let us give an example in positive genus. Let P1 be the GKM graph of $\mathbb{P}^1$, and let $\beta$ be the class of the line. Choose $n$ and $g$ such that $d=n+1-g>0$. The invariant
\[\int_{\overline{\mathcal{M}}_{g,n}(\mathbb{P}^1, d\beta)}\prod_{i=1}^n \left(\mathrm{ev}_{i}^{*}([\mathrm{pt}]) \psi_{i}^2 \right),\]
can be computed as following:
julia> P1 = projective_space(GKM_graph, 1);
julia> beta = curve_class(P1, "1", "2"); # beta is the class of the line
julia> w = point_class(1, P1);
julia> n = 4; g = 2; # so that d > 0
julia> d = n + 1 - g;
julia> P = prod(i -> ev(i, w), 1:n); # = ev(1, w) * ev(2, w) * ev(3, w) * ev(4, w)Now we multiply P by the psi-classes:
julia> P *= Psi([2 for _ in 1:n]); # = Psi(2,2) * ev(1, w)*ev(2, w)*ev(3, w)*ev(4, w)
julia> gromov_witten(P1, d*beta, n, P; g = g, show_bar = false)
263//96Results match those in [DY19].
To see a non-compact example, let $X:=\text{Tot}(\mathcal{O}_{\mathbb{P}^2}(-1)\oplus\mathcal{O}_{\mathbb{P}^2}(-2))$ and let us compute
\[\int_{\overline{\mathcal{M}}_{0,2}(X, d\beta)}\psi_1\psi_2^2\]
for $1\le d\le 4$, where $\beta$ is the hyperplane class.
julia> G = total_space(vector_bundle_O(2, [-1, -2]));
julia> beta = curve_class(G, Edge(1, 2));
julia> P = Psi(1,2);
julia> for d in 1:4
println(gromov_witten(G, d*beta, 2, P; show_bar=false))
end
0
1
-3//2
401//144Finally, let $X:=\text{Tot}(\mathcal{O}_{\mathbb{P}^1}(-1)\oplus\mathcal{O}_{\mathbb{P}^1}(-1))$ and let us compute
\[\int_{\overline{\mathcal{M}}_{g,2}(X, d\beta)}\psi_1\psi_2\]
for $1\le d\le 3$ and $0\le g\le 3$, where $\beta$ is the hyperplane class.
julia> G = total_space(vector_bundle_O(1, [-1, -1]));
julia> beta = curve_class(G, Edge(1, 2));
julia> P = Psi(1, 1);
julia> for g in 0:3
for d in 1:3
print("g=$g, d=$d: ")
println(gromov_witten(G, d*beta, 2, P; g=g, show_bar=false))
end
end
g=0, d=1: 2
g=0, d=2: 1//4
g=0, d=3: 2//27
g=1, d=1: 0
g=1, d=2: 0
g=1, d=3: 0
g=2, d=1: 1//40
g=2, d=2: 1//20
g=2, d=3: 3//40
g=3, d=1: 5//1512
g=3, d=2: 5//189
g=3, d=3: 5//56GKMtools.virtual_zero_section — Function
virtual_zero_section(V::GKM_vector_bundle) -> EquivariantClassArguments
V::GKM_vector_bundle: A vector bundle over a GKM graph $X$.
Return the equivariant cohomology class on $\overline{\mathcal{M}}_{0,n}(X,\beta)$ of the top Chern class of $\pi_*(\text{ev}^*_{n+1}(V))$ where $\pi\colon \overline{\mathcal{M}}_{0,n+1}(X,\gamma)\rightarrow \overline{\mathcal{M}}_{0,n}(X,\gamma)$ forgets the last map.
This procedure assumes that the moduli space is of stable maps of genus zero and that the vector bundle is convex, i.e., $H^1(\mathbb{P}^1, f^*V) = 0$ for all stable maps $f:\mathbb{P}^1\to X$. If these conditions are not met, the computation will stop. If $i\colon Y\hookrightarrow X$ is the zero locus of a generic section of $V$, then the Gromov-Witten invariants of $Y$ satisfy:
\[ \sum_{\gamma:i_*(\gamma)=\beta} i_*([\overline{\mathcal{M}}_{0,n}(Y,\gamma)]^{\mathrm{vir}} = c_{\mathrm{top}}(\pi_*(\text{ev}^*_{n+1}(V)))\cap[\overline{\mathcal{M}}_{0,n}(X,\beta)]^{\mathrm{vir}}\]
Example: Complete intersections in toric varieties
In the following examples, we use Oscar to construct a toric variety $X$. At the end, we compute the invariants of $Y$ defined as the zero section of a sum of line bundles of $X$.
Let us start with $X=\mathbb{P}^7$.
julia> P7 = projective_space(NormalToricVariety, 7)
Normal toric varietyThe variety $Y$ is the zero section of $V=\mathcal{O}_{\mathbb{P}^7}(2)^{\oplus 4}$. So let us define the Oscar's toric line bundle $L=\mathcal{O}_{\mathbb{P}^7}(2)$.
julia> L = toric_line_bundle(P7, picard_group(P7)([2]))
Toric line bundle on a normal toric varietyNow, we define $l$ to be the GKM line bundle defined by $L$. We use gkm_line_bundle_of_toric.
julia> l = gkm_line_bundle_of_toric(L)
GKM vector bundle of rank 1 over GKM graph with 8 nodes and valency 7 with weights:
1: (0, 0, 0, 0, 0, 0, 0, -1, 2)
2: (2, 0, 0, 0, 0, 0, 0, -1, 0)
3: (0, 2, 0, 0, 0, 0, 0, -1, 0)
4: (0, 0, 2, 0, 0, 0, 0, -1, 0)
5: (0, 0, 0, 2, 0, 0, 0, -1, 0)
6: (0, 0, 0, 0, 2, 0, 0, -1, 0)
7: (0, 0, 0, 0, 0, 2, 0, -1, 0)
8: (0, 0, 0, 0, 0, 0, 2, -1, 0)Now we can define the GKM vector bundle $V$.
julia> V = l + l + l + l;Now we need $\mathbb{P}^7$ defined as a GKM graph.
julia> X = baseof(V);Finally, we can compute our invariants as usual
julia> beta = curve_class(X, "1", "2");
julia> P = virtual_zero_section(V);
julia> gromov_witten(X, beta, 0, P; show_bar = false, fast_mode = true)
512
julia> gromov_witten(X, 2*beta, 0, P; show_bar = false, fast_mode = true)
9792Now, let us compute the invariants of $Y$ where $X=\mathbb{P}(\mathcal{O}_{\mathbb{P}^3}\oplus \mathcal{O}_{\mathbb{P}^3}(3))$ and $V=\mathrm{det}(T_X)$.
julia> P3 = projective_space(NormalToricVariety, 3);
julia> O = trivial_line_bundle(P3);
julia> O3 = toric_line_bundle(P3, picard_group(P3)([3]));
julia> Fano = projectivization(O, O3); # Oscar's toric variety X
julia> L = anticanonical_bundle(Fano); # Oscar's anticanonical bundle
julia> V = gkm_line_bundle_of_toric(L) # GKM line bundle
GKM vector bundle of rank 1 over GKM graph with 8 nodes and valency 4 with weights:
1: (0, 0, 0, 0, -1, 2, 1)
2: (0, 0, 0, 2, -1, 0, 7)
3: (1, 0, 0, 0, -1, 2, 0)
4: (7, 0, 0, 2, -1, 0, 0)
5: (0, 1, 0, 0, -1, 2, 0)
6: (0, 7, 0, 2, -1, 0, 0)
7: (0, 0, 1, 0, -1, 2, 0)
8: (0, 0, 7, 2, -1, 0, 0)The base of $V$, that is the GKM variety $X$, has effective cone generated by two curve classes.
julia> X = baseof(V);
julia> print_curve_classes(X)
2 -> 1: (0, 1), Chern number: 2
3 -> 1: (1, -3), Chern number: 1
4 -> 2: (1, 0), Chern number: 7
4 -> 3: (0, 1), Chern number: 2
5 -> 1: (1, -3), Chern number: 1
5 -> 3: (1, -3), Chern number: 1
6 -> 2: (1, 0), Chern number: 7
6 -> 4: (1, 0), Chern number: 7
6 -> 5: (0, 1), Chern number: 2
7 -> 1: (1, -3), Chern number: 1
7 -> 3: (1, -3), Chern number: 1
7 -> 5: (1, -3), Chern number: 1
8 -> 2: (1, 0), Chern number: 7
8 -> 4: (1, 0), Chern number: 7
8 -> 6: (1, 0), Chern number: 7
8 -> 7: (0, 1), Chern number: 2
julia> beta_1 = curve_class(X, "1", "2"); # first generator
julia> beta_2 = curve_class(X, "1", "3"); # second generator
julia> P = virtual_zero_section(V);
julia> gromov_witten(X, beta_1, 0, P; show_bar = false, fast_mode = true)
28
julia> gromov_witten(X, beta_2, 0, P; show_bar = false, fast_mode = true)
3Example: Zero section of homogeneous bundles of Grassmannians
Let us compute the Gromov-Witten invariants of the quintic in $\mathbb{P}^4$. We use tautological_and_univ_bd.
julia> S, _ = tautological_and_univ_bd(GKM_graph, 1, 5);
julia> V = dual(S)^5;
julia> P4 = baseof(V);
julia> beta = curve_class(P4, "1", "2"); # line class
julia> P = virtual_zero_section(V);
julia> gromov_witten(P4, beta, 0, P; show_bar = false, fast_mode = true) # lines in the quintic in P4
2875
julia> gromov_witten(P4, 2*beta, 0, P; show_bar = false, fast_mode = true)
4876875//8
julia> gromov_witten(P4, 3*beta, 0, P; show_bar = false, fast_mode = true)
8564575000//27Let us compute the Gromov-Witten invariants of the Calabi-Yau threefold given by a zero section of $\mathcal{O}(4)$ in $G(2, 4)$.
julia> S, _ = tautological_and_univ_bd(GKM_graph, 2, 4);
julia> plucker = dual(det(S));
julia> V = plucker^4;
julia> G24 = baseof(V);
julia> beta = curve_class(G24, "12", "13");
julia> P = virtual_zero_section(V);
julia> gromov_witten(G24, beta, 0, P; show_bar = false, fast_mode = true)
1280
julia> gromov_witten(G24, 2*beta, 0, P; show_bar = false, fast_mode = true)
92448
julia> gromov_witten(G24, 3*beta, 0, P; show_bar = false, fast_mode = true)
422690816//27Let us compute the Gromov-Witten invariants of the Calabi-Yau threefolds given by a zero section in $G(2, 5)$ of the following bundles:
\[\begin{aligned} V1 &= \mathcal{O}(1)\oplus\mathcal{O}(2)\oplus\mathcal{O}(2), \\ V2 &= \mathcal{O}(1)\oplus\mathcal{O}(1)\oplus\mathcal{O}(3), \\ V3 &= \mathcal{S}^{\vee}(1)\oplus\mathcal{O}(2), \\ V4 &= \wedge^2\mathcal{Q}(1). \end{aligned}\]
julia> S, Q = tautological_and_univ_bd(GKM_graph, 2, 5);
julia> plucker = dual(det(S));
julia> V1 = plucker + (plucker^2) + (plucker^2);
julia> V2 = plucker + plucker + (plucker^3);
julia> V3 = dual(S) * plucker + (plucker^2);
julia> V4 = wedge_product(Q, 2) * plucker;
julia> P = virtual_zero_section.([V1, V2, V3, V4]);
julia> G25 = baseof(V1);
julia> beta = curve_class(G25, "12", "13");
julia> gromov_witten(G25, beta, 0, P; show_bar = false, fast_mode = true)
4-element Vector{QQFieldElem}:
400
540
336
325
julia> gromov_witten(G25, 2*beta, 0, P; show_bar = false, fast_mode = true)
4-element Vector{QQFieldElem}:
5590
25245//2
3678
25925//8GKMtools.derivated_functor — Function
derivated_functor(V::GKM_vector_bundle) -> EquivariantClassArguments
V::GKM_vector_bundle: A vector bundle over a GKM graph $X$.
Return the equivariant cohomology class on $\overline{\mathcal{M}}_{0,n}(X,\beta)$ of the top Chern class of $R^{1}\pi_*(\text{ev}^*_{n+1}(V))$ where $\pi\colon \overline{\mathcal{M}}_{0,n+1}(X,\gamma)\rightarrow \overline{\mathcal{M}}_{0,n}(X,\gamma)$ forgets the last map.
This procedure assumes that the moduli space is of stable maps of genus zero and that the vector bundle is concave, i.e., $H^0(\mathbb{P}^1, f^*V) = 0$ for all stable maps $f:\mathbb{P}^1\to X$. If these conditions are not met, the computation will stop.
Example: Manin formula
Let us compute the Manin formula, that is:
\[\int_{\overline{\mathcal{M}}_{0,0}(\mathbb{P}^1, d\beta)} c_{\mathrm{top}}(R^{1}\pi_*(\text{ev}^*_{n+1}(\mathcal{O}_{\mathbb{P}^1}(-1) \oplus \mathcal{O}_{\mathbb{P}^1}(-1)))) = \frac{1}{d^3}.\]
julia> S, _ = tautological_and_univ_bd(GKM_graph, 1, 2); # S is the Serre's twisting bundle on P1
julia> V = S + S;
julia> P1 = baseof(V);
julia> beta = curve_class(P1, "1", "2"); # line class
julia> P = derivated_functor(V);
julia> gromov_witten(P1, beta, 0, P; show_bar = false, fast_mode = true)
1
julia> gromov_witten(P1, 2*beta, 0, P; show_bar = false, fast_mode = true)
1//8
julia> gromov_witten(P1, 3*beta, 0, P; show_bar = false, fast_mode = true)
1//27GKMtools.reduced_virtual_zero_section — Function
reduced_virtual_zero_section(V::GKM_vector_bundle) -> EquivariantClassArguments
V::GKM_vector_bundle: A convex vector bundle over a GKM graph $X$.
Return the equivariant cohomology class on $\overline{\mathcal{M}}_{g,n}(X,\beta)$ of the top Chern class of $\pi_*(\text{ev}^*_{n+1}(V))'$, the subbundle of $\pi_*(\text{ev}^*_{n+1}(V))$ that vanishes at the last marked point (cf. [Pan98, Equation (19)]).
All constructions involving vector bundles of the package are under develpment and will be expanded in the future.
Example
Let us use this function to compute the equivariant twisted quantum product $[p_1]\ast_{\mathcal{O}(2)} [p_2]$ on $\mathbb{P}^3$ with respect to the convex vector bundle $\mathcal{O}(2)$, as defined in [Pan98, Seciton 2.1]. We compute the coefficients up to degree 3.
julia> P3 = projective_space(NormalToricVariety, 3);
julia> L = toric_line_bundle(P3, picard_group(P3)([2]));
julia> l = gkm_line_bundle_of_toric(L);
julia> X = baseof(l);
julia> p1 = point_class(X, 1)
(-t1*t2*t3 + t1*t2*t5 + t1*t3*t5 - t1*t5^2 + t2*t3*t5 - t2*t5^2 - t3*t5^2 + t5^3)*e[1]
julia> p2 = point_class(X, 2)
(t1^3 - t1^2*t2 - t1^2*t3 - t1^2*t5 + t1*t2*t3 + t1*t2*t5 + t1*t3*t5 - t2*t3*t5)*e[2]
julia> beta = curve_class(X, "1", "2");
julia> P = reduced_virtual_zero_section(l)
julia> quantum_product(X, beta, p1, p2; useStructureConstants=false, twist_class=P)
(2*t1^2*t2*t3 - 2*t1^2*t2*t5 - 2*t1^2*t3*t5 + 2*t1^2*t5^2 - 3*t1*t2*t3*t4 + 2*t1*t2*t3*t5 + 3*t1*t2*t4*t5 - 2*t1*t2*t5^2 + 3*t1*t3*t4*t5 - 2*t1*t3*t5^2 - 3*t1*t4*t5^2 + 2*t1*t5^3 + t2*t3*t4^2 - t2*t3*t4*t5 - t2*t4^2*t5 + t2*t4*t5^2 - t3*t4^2*t5 + t3*t4*t5^2 + t4^2*t5^2 - t4*t5^3, -t1^3*t4 + 2*t1^3*t5 + t1^2*t2*t4 - 2*t1^2*t2*t5 + t1^2*t3*t4 - 2*t1^2*t3*t5 + t1^2*t4^2 - 3*t1^2*t4*t5 + 2*t1^2*t5^2 - t1*t2*t3*t4 + 2*t1*t2*t3*t5 - t1*t2*t4^2 + 3*t1*t2*t4*t5 - 2*t1*t2*t5^2 - t1*t3*t4^2 + 3*t1*t3*t4*t5 - 2*t1*t3*t5^2 + t2*t3*t4^2 - 3*t2*t3*t4*t5 + 2*t2*t3*t5^2, 0, 0)
julia> quantum_product(X, 2*beta, p1, p2; useStructureConstants=false, twist_class=P)
(-2*t1*t4 + 4*t1*t5 + t4^2 - 2*t4*t5, -2*t1*t4 + 4*t1*t5 + t4^2 - 2*t4*t5, -2*t1*t4 + 4*t1*t5 + t4^2 - 2*t4*t5, -2*t1*t4 + 4*t1*t5 + t4^2 - 2*t4*t5)
julia> quantum_product(X, 3*beta, p1, p2; useStructureConstants=false, twist_class=P)
(0, 0, 0, 0)Note that one of the equivariant parameters in this examples comes from the fibrewise scaling of $\mathcal{O}(2)$.