Given a quiver $Q$ and a stability parameter $z$, let $S_z(d)$ count (absolutely) $z$-stable representations of dimension $d\in\mathbb Z^{Q_0}$. It is a polynomial in $q=y^2$. Let $R_z(Q,d)\subset R(Q,d)$ be the subspace of $z$-semistable representations. Consider the series $$S_{z,c}=\sum_{\mu_z(d)=c}S_z(d)x^d,\qquad A_{z,c}=\sum_{\mu_z(d)=c}(-y)^{\chi(d,d)}\frac{[R_z(Q,d)]}{[{GL}_d]}x^d ,\qquad c\in\mathbb R.$$
It was proved in arXiv:0708.1259 that they satisfy $$A_{z,c}\circ T\operatorname{Exp}\left(\frac{S_{z,c}}{1-y^2}\right)=1,\qquad T(x^d)=(-y)^{\chi(d,d)}x^d,$$ in the quantum affine plane with multiplication $$\def\ang#1{\left<#1\right>} x^d\circ x^e=(-y)^{\ang{d,e}},\qquad \ang{d,e}=\chi(d,e)-\chi(e,d).$$
We compute the series $A_{z,c}$ using the algorithm from arXiv:math/0204059 (Corollary 5.5) and then apply the above formula to determine the series $S_{z,c}$.
$\def\opr{\DeclareMathOperator} \def\bb{\mathbb} \def\bbZ{\bb Z} \def\bbQ{\bb Q} \def\bbR{\bb R} \opr\Exp{Exp} \opr\GL{GL} \def\Om{\Omega} \def\hi{\chi} \def\ang#1{\left<#1\right>} \def\rbr#1{\left(#1\right)} $
import os, sys
module_path = os.path.abspath(os.path.join('..'))
if module_path not in sys.path:
sys.path.append(module_path)
from msinvar import *
Q=KroneckerQuiver(1); print(Q)
Q.prec([3,3])
z=Stability([1,0]); print(z)
Kronecker quiver Stability function [[1, 0], [1, 1]]
Q.stable(z, slope=1).dict()
{(1, 0): 1}
Q.stable(z, slope=0).dict()
{(0, 1): 1}
Q.stable(z, slope=1/2).dict()
{(1, 1): 1}
Q=KroneckerQuiver(2); print(Q)
Q.prec([3,3])
Kronecker quiver
Q.stable(z, slope=1/2).dict()
{(1, 1): y^2 + 1}
Q=CyclicQuiver(2); print(Q)
Q.prec((10,10))
Cyclic quiver
Q.stable(z, slope=1/2).dict()
{(1, 1): y^2}
Q=KroneckerQuiver(3); print(Q)
Q.prec((12,18))
Kronecker quiver
%time I=Q.stable([1,0],1/2) #stable for slope=1/2
I.dict([5,5])
CPU times: user 4.52 s, sys: 7.69 ms, total: 4.53 s Wall time: 4.53 s
{(1, 1): y^4 + y^2 + 1, (2, 2): y^10 - y^4, (3, 3): y^20 + y^18 + y^16 - 2*y^12 - y^10, (4, 4): y^34 + y^32 + 3*y^30 + 3*y^28 + 3*y^26 - 2*y^24 - 4*y^22 - 6*y^20 - 3*y^18 + 2*y^14 + 2*y^12, (5, 5): y^52 + y^50 + 3*y^48 + 5*y^46 + 8*y^44 + 10*y^42 + 9*y^40 + 4*y^38 - 6*y^36 - 16*y^34 - 22*y^32 - 20*y^30 - 10*y^28 + 4*y^26 + 13*y^24 + 14*y^22 + 7*y^20 - 3*y^16 - 2*y^14}
dct={e:c(y=1) for e,c in I.dict().items()}; dct #just the Euler numbers
{(1, 1): 3, (2, 2): 0, (3, 3): 0, (4, 4): 0, (5, 5): 0, (6, 6): 0, (7, 7): 0, (8, 8): 0, (9, 9): 0, (10, 10): 0, (11, 11): 0, (12, 12): 0}
%time I=Q.stable([1,0], slope=2/5)
dct={e:c(y=1) for e,c in I.dict().items()}; dct
CPU times: user 8.64 s, sys: 10.8 ms, total: 8.65 s Wall time: 8.65 s
{(2, 3): 13, (4, 6): 49, (6, 9): -28, (8, 12): -5277, (10, 15): -50540, (12, 18): 546995}
Q=KroneckerQuiver(4)
Q.prec((10,20))
%time S=Q.stable([1,0], slope=1/3)
CPU times: user 14.8 s, sys: 20.4 ms, total: 14.8 s Wall time: 14.8 s
dct={e:c(y=1) for e,c in S.dict().items()}; dct
{(1, 2): 6, (2, 4): -1, (3, 6): 0, (4, 8): 0, (5, 10): 0, (6, 12): 0, (7, 14): 0, (8, 16): 0, (9, 18): 0, (10, 20): 0}
Om=Q.Om(z).restrict(z,1/3)
%time Om.subs(y=1).dict()
CPU times: user 14.5 s, sys: 19.2 ms, total: 14.5 s Wall time: 14.5 s
{(1, 2): 6, (2, 4): -56, (3, 6): 990, (4, 8): -24000, (5, 10): 682170, (6, 12): -21432264, (7, 14): 721910826, (8, 16): -25590602944, (9, 18): 943269520050, (10, 20): -35857514085080}
d=[1,2]
Q.eform(d,d)
-3
Q=KroneckerQuiver(5); print(Q)
Q.prec((10,10))
z=Stability([1,0]); print(z)
Kronecker quiver Stability function [[1, 0], [1, 1]]
%time I=Q.stable(z, slope=1/2)
CPU times: user 3.18 s, sys: 6 ms, total: 3.19 s Wall time: 3.19 s
dct={e:c(y=1) for e,c in I.dict(Q).items()}; dct
{(1, 1): 5, (2, 2): 0, (3, 3): 0, (4, 4): 0, (5, 5): 0, (6, 6): 0, (7, 7): 0, (8, 8): 0, (9, 9): 0, (10, 10): 0}
%time I=Q.stable(z, slope=1/3)
dct={e:c(y=1) for e,c in I.dict(W).items()}; dct
CPU times: user 236 ms, sys: 2.23 ms, total: 238 ms Wall time: 237 ms
{(1, 2): 10, (2, 4): -5, (3, 6): 5, (4, 8): -10, (5, 10): 25}
%time I=Q.stable(z, slope=2/3)
dct={e:c(y=1) for e,c in I.dict().items()}; dct
CPU times: user 236 ms, sys: 2.19 ms, total: 238 ms Wall time: 236 ms
{(2, 1): 10, (4, 2): -5, (6, 3): 5, (8, 4): -10, (10, 5): 25}
%time I=Q.stable(z, slope=1/4)
dct={e:c(y=1) for e,c in I.dict().items()}; dct
CPU times: user 73.9 ms, sys: 1.17 ms, total: 75.1 ms Wall time: 74.2 ms
{(1, 3): 10, (2, 6): -5, (3, 9): 5}
%time I=Q.stable(z, slope=3/4)
dct={e:c(y=1) for e,c in I.dict().items()}; dct
CPU times: user 75.1 ms, sys: 1.47 ms, total: 76.6 ms Wall time: 75.2 ms
{(3, 1): 10, (6, 2): -5, (9, 3): 5}
Q=KroneckerQuiver(6)
Q.prec((6,12))
%time S=Q.stable([1,0], slope=1/3)
dct={e:c(y=1) for e,c in S.dict().items()}; dct
CPU times: user 798 ms, sys: 2.79 ms, total: 800 ms Wall time: 799 ms
{(1, 2): 15, (2, 4): -15, (3, 6): 36, (4, 8): -141, (5, 10): 660, (6, 12): -3357}
DT invariants $\Omega_d(y)$ satisfy the formula $$A_{z,c}=Exp\left(\frac{y\Omega_{z,c}}{1-y^2}\right),\qquad \Omega_{z,c}=\sum_{\mu_z(d)=c}\Omega_d(y) x^d.$$ Using the formula for stable objects and assuming that stability $z$ is generic (if $\mu_z(d)=\mu_z(e)$, then $d,e$ are proportional), we obtain $$T Exp\left(\frac{S_{z,c}}{1-y^2}\right)=Exp\left(\frac{-y\Omega_{z,c}}{1-y^2}\right)$$ This implies, in particular, that we can express numerical DT invariants $\Omega_z(d,1)$ in terms of Euler numbers $\chi_z(d)=S_z(d,1)$ of the moduli spaces of stable representations.
Let $d_0$ be the indivisible vector with $\mu_z(d_0)=c$. Let us define $S_k=S_z(kd_0)$, $\Omega_k=\Omega_z(kd_0)$, $N=-\chi(d_0,d_0)$. Then the above formula can be written in the form $$T\ Exp\left(\frac{\sum_{k\ge1}S_kx^k}{1-y^2}\right) =Exp\left(\frac{-y\sum_{k\ge1}\Omega_k x^k}{1-y^2}\right), \qquad T(x^k)=(-y)^{-Nk^2}x^k. $$ We can express the values $b_k=\Omega_k(1)$ in terms of values $a_k=S_k(1)$ as $$b_k=f_k(a_1,\dots,a_k),$$ where $f_k$ are polynomials which depend just on $N$. We will compute these polynomials for small $N$.
from msinvar.lambda_rings import adams
class TMPoly1(TMPoly):
def adams(self, a, n):
d = {e: adams(c, n) for e, c in a.dict().items()}
return self.Element(self, d)
B=RF('y')
N=1; m=5
R1=TMPoly1(B,m+1,'a')
R2=TMPoly(R1,1,'x',prec=m)
B.inject_variables()
R1.inject_variables()
R2.inject_variables()
Defining y Defining a0, a1, a2, a3, a4, a5 Defining x
g=sum(R1.gen(i)*x^i for i in range(1,m+1))
g1=(g/(1-y^2)).Exp()
g
a1*x + a2*x^2 + a3*x^3 + a4*x^4 + a5*x^5
N=1
g2=g1.term_twist(lambda d: (-y)^(-N*d[0]^2)).Log()*(1-y^2)/(-y)
dct={e[0]:c.subs_base(y=1) for e,c in g2.dict().items()}; dct
{1: a1, 2: (-1/2)*a1 - a2 + (-1/2)*a1^2, 3: a3 + 1/2*a1^2 + 2*a1*a2 + 1/2*a1^3, 4: -a4 + (-1/3)*a1^2 - a1*a2 + (-2)*a2^2 + (-3)*a1*a3 - a1^3 + (-4)*a1^2*a2 + (-2/3)*a1^4, 5: a5 + 5/12*a1^2 + 5/3*a1*a2 + 3/2*a1*a3 + 6*a2*a3 + 4*a1*a4 + 35/24*a1^3 + 5*a1^2*a2 + 10*a1*a2^2 + 15/2*a1^2*a3 + 25/12*a1^4 + 25/3*a1^3*a2 + 25/24*a1^5}
N=-1
g2=g1.term_twist(lambda d: (-y)^(-N*d[0]^2)).Log()*(1-y^2)/(-y)
dct={e[0]:c.subs_base(y=1) for e,c in g2.dict().items()}; dct
{1: a1, 2: (-1/2)*a1 - a2 + 1/2*a1^2, 3: a3 + (-1/2)*a1^2 + (-2)*a1*a2 + 1/2*a1^3, 4: -a4 + 1/3*a1^2 + a1*a2 + 2*a2^2 + 3*a1*a3 - a1^3 + (-4)*a1^2*a2 + 2/3*a1^4, 5: a5 + (-5/12)*a1^2 + (-5/3)*a1*a2 + (-3/2)*a1*a3 + (-6)*a2*a3 + (-4)*a1*a4 + 35/24*a1^3 + 5*a1^2*a2 + 10*a1*a2^2 + 15/2*a1^2*a3 + (-25/12)*a1^4 + (-25/3)*a1^3*a2 + 25/24*a1^5}
N=2
g2=g1.term_twist(lambda d: (-y)^(-N*d[0]^2)).Log()*(1-y^2)/(-y)
dct={e[0]:c.subs_base(y=1) for e,c in g2.dict().items()}; dct
{1: -a1, 2: -a2 - a1^2, 3: -a3 - a1^2 + (-4)*a1*a2 + (-2)*a1^3, 4: -a4 + (-2/3)*a1^2 + (-2)*a1*a2 + (-4)*a2^2 + (-6)*a1*a3 + (-4)*a1^3 + (-16)*a1^2*a2 + (-16/3)*a1^4, 5: -a5 + (-5/6)*a1^2 + (-10/3)*a1*a2 + (-3)*a1*a3 + (-12)*a2*a3 + (-8)*a1*a4 + (-35/6)*a1^3 + (-20)*a1^2*a2 + (-40)*a1*a2^2 + (-30)*a1^2*a3 + (-50/3)*a1^4 + (-200/3)*a1^3*a2 + (-50/3)*a1^5}
N=3
g2=g1.term_twist(lambda d: (-y)^(-N*d[0]^2)).Log()*(1-y^2)/(-y)
dct={e[0]:c.subs_base(y=1) for e,c in g2.dict().items()}; dct
{1: a1, 2: (-1/2)*a1 - a2 + (-3/2)*a1^2, 3: a3 + 3/2*a1^2 + 6*a1*a2 + 9/2*a1^3, 4: -a4 - a1^2 + (-3)*a1*a2 + (-6)*a2^2 + (-9)*a1*a3 + (-9)*a1^3 + (-36)*a1^2*a2 + (-18)*a1^4, 5: a5 + 5/4*a1^2 + 5*a1*a2 + 9/2*a1*a3 + 18*a2*a3 + 12*a1*a4 + 105/8*a1^3 + 45*a1^2*a2 + 90*a1*a2^2 + 135/2*a1^2*a3 + 225/4*a1^4 + 225*a1^3*a2 + 675/8*a1^5}
N=4
g2=g1.term_twist(lambda d: (-y)^(-N*d[0]^2)).Log()*(1-y^2)/(-y)
dct={e[0]:c.subs_base(y=1) for e,c in g2.dict().items()}; dct
{1: -a1, 2: -a2 + (-2)*a1^2, 3: -a3 + (-2)*a1^2 + (-8)*a1*a2 + (-8)*a1^3, 4: -a4 + (-4/3)*a1^2 + (-4)*a1*a2 + (-8)*a2^2 + (-12)*a1*a3 + (-16)*a1^3 + (-64)*a1^2*a2 + (-128/3)*a1^4, 5: -a5 + (-5/3)*a1^2 + (-20/3)*a1*a2 + (-6)*a1*a3 + (-24)*a2*a3 + (-16)*a1*a4 + (-70/3)*a1^3 + (-80)*a1^2*a2 + (-160)*a1*a2^2 + (-120)*a1^2*a3 + (-400/3)*a1^4 + (-1600/3)*a1^3*a2 + (-800/3)*a1^5}
We verify that for the 4-Kronecker quiver we get correct numerical DT invariants for a special stability and special slope:
Q=KroneckerQuiver(4)
Q.prec((6,12))
z=Stability([1,0])
S=Q.stable(z,1/3)
S1=S.subs(y=1); S1.dict()
{(1, 2): 6, (2, 4): -1}
Q.Om(z).restrict(z,1/3).subs(y=1).dict()
{(1, 2): 6, (2, 4): -56, (3, 6): 990, (4, 8): -24000, (5, 10): 682170, (6, 12): -21432264}
d=[1,2]
-Q.eform(d,d)
3
N=3
g2=g1.term_twist(lambda d: (-y)^(-N*d[0]^2)).Log()*(1-y^2)/(-y)
dct={e[0]:c.subs_base(y=1) for e,c in g2.dict().items()}; dct
{1: a1, 2: (-1/2)*a1 - a2 + (-3/2)*a1^2, 3: a3 + 3/2*a1^2 + 6*a1*a2 + 9/2*a1^3, 4: -a4 - a1^2 + (-3)*a1*a2 + (-6)*a2^2 + (-9)*a1*a3 + (-9)*a1^3 + (-36)*a1^2*a2 + (-18)*a1^4, 5: a5 + 5/4*a1^2 + 5*a1*a2 + 9/2*a1*a3 + 18*a2*a3 + 12*a1*a4 + 105/8*a1^3 + 45*a1^2*a2 + 90*a1*a2^2 + 135/2*a1^2*a3 + 225/4*a1^4 + 225*a1^3*a2 + 675/8*a1^5}
for i,g in dct.items():
print(i, g.subs(a1=6,a2=-1,a3=0,a4=0,a5=0))
1 6 2 -56 3 990 4 -24000 5 682170
Q=KroneckerQuiver(4)
Q.prec((4,8))
z=Stability([1,0])
d=[1,2]
mu=z.slope(d)
N=-Q.eform(d,d)
print(d,mu,N)
[1, 2] 0.333333333333 3
S=Q.stable(z,mu).subs(y=1);
s={k:int(S([k,2*k])) for k in range(1,5)}; s
{1: 6, 2: -1, 3: 0, 4: 0}
Om=Q.Om(z).restrict(z,mu).subs(y=1)
om={k:-int(Om([k,2*k])) for k in range(1,5)}; om #need to change the sign because of conventions
{1: -6, 2: 56, 3: -990, 4: 24000}
R=TMPoly(prec=[4])
x=R.gen()
F=1
for k in range(1,5):
F=F*(1-(-1)^(N*k)*x^k)^(-k*om[k])
F
1 + 6*x + 127*x^2 + 3662*x^3 + 121843*x^4
G=1
for k in range(1,5):
G=G*(1-(x*F^N)^k)^(-k*s[k]) #functional equation
G
1 + 6*x + 127*x^2 + 3662*x^3 + 121843*x^4
def s2om(k,N,s):
s1=0
for m in divisors(k):
s2=0
for p in Partitions(m):
p=p+[0]
l=[p[i]-p[i+1] for i in range(len(p)-1)]
s2 += prod((-1)^l[i]*binomial(-N*m*(i+1)*s[i+1],l[i]) for i in range(len(l)))
s1 += moebius(k/m)*(-1)^(N*m)*s2
return s1/(N*k^2)
{k:s2om(k,N,s) for k in range(1,5)}
{1: -6, 2: 56, 3: -990, 4: 24000}