{ "cells": [ { "cell_type": "markdown", "id": "6372b98c", "metadata": {}, "source": [ "# Counting stable quiver representations\n", "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$.\n", "Let $R_z(Q,d)\\subset R(Q,d)$ be the subspace of $z$-semistable representations.\n", "Consider the series\n", "$$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\n", ",\\qquad c\\in\\mathbb R.$$\n", "\n", "It was proved in [arXiv:0708.1259](https://arxiv.org/abs/0708.1259) that they satisfy\n", "$$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,$$\n", "in the quantum affine plane with multiplication \n", "$$\\def\\ang#1{\\left<#1\\right>}\n", "x^d\\circ x^e=(-y)^{\\ang{d,e}},\\qquad \\ang{d,e}=\\chi(d,e)-\\chi(e,d).$$\n", "\n", "We compute the series $A_{z,c}$ using the algorithm from [arXiv:math/0204059](https://arxiv.org/abs/math/0204059) (Corollary 5.5) and then apply the above formula to determine the series $S_{z,c}$." ] }, { "cell_type": "markdown", "id": "5da85255", "metadata": {}, "source": [ "$\\def\\opr{\\DeclareMathOperator}\n", "\\def\\bb{\\mathbb}\n", "\\def\\bbZ{\\bb Z}\n", "\\def\\bbQ{\\bb Q}\n", "\\def\\bbR{\\bb R}\n", "\\opr\\Exp{Exp}\n", "\\opr\\GL{GL}\n", "\\def\\Om{\\Omega}\n", "\\def\\hi{\\chi}\n", "\\def\\ang#1{\\left<#1\\right>}\n", "\\def\\rbr#1{\\left(#1\\right)}\n", "$" ] }, { "cell_type": "code", "execution_count": 1, "id": "2acf3e28", "metadata": { "tags": [] }, "outputs": [], "source": [ "import os, sys\n", "module_path = os.path.abspath(os.path.join('..'))\n", "if module_path not in sys.path:\n", " sys.path.append(module_path)\n", "from msinvar import *" ] }, { "cell_type": "markdown", "id": "75f60ac6", "metadata": {}, "source": [ "## Quiver $1\\to 2$" ] }, { "cell_type": "code", "execution_count": 3, "id": "0be3f212", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Kronecker quiver\n", "Stability function [[1, 0], [1, 1]]\n" ] } ], "source": [ "Q=KroneckerQuiver(1); print(Q)\n", "Q.prec([3,3])\n", "z=Stability([1,0]); print(z)" ] }, { "cell_type": "code", "execution_count": 4, "id": "c203f4a2", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{(1, 0): 1}" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Q.stable(z, slope=1).dict()" ] }, { "cell_type": "code", "execution_count": 5, "id": "714a9185", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{(0, 1): 1}" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Q.stable(z, slope=0).dict()" ] }, { "cell_type": "code", "execution_count": 6, "id": "db303814", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{(1, 1): 1}" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Q.stable(z, slope=1/2).dict()" ] }, { "cell_type": "markdown", "id": "65f1a65d", "metadata": { "tags": [] }, "source": [ "## Kronecker quiver (with 2 arrows)" ] }, { "cell_type": "code", "execution_count": 9, "id": "77965818", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Kronecker quiver\n" ] } ], "source": [ "Q=KroneckerQuiver(2); print(Q)\n", "Q.prec([3,3])" ] }, { "cell_type": "code", "execution_count": 10, "id": "2ff386db", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{(1, 1): y^2 + 1}" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Q.stable(z, slope=1/2).dict()" ] }, { "cell_type": "markdown", "id": "1dd6ecaf", "metadata": {}, "source": [ "## 2-Cyclic quiver" ] }, { "cell_type": "code", "execution_count": 11, "id": "b873ce0b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Cyclic quiver\n" ] } ], "source": [ "Q=CyclicQuiver(2); print(Q)\n", "Q.prec((10,10))" ] }, { "cell_type": "code", "execution_count": 12, "id": "f61617e7", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{(1, 1): y^2}" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Q.stable(z, slope=1/2).dict()" ] }, { "cell_type": "markdown", "id": "799d5a0d", "metadata": {}, "source": [ "## 3-Kronecker quiver" ] }, { "cell_type": "code", "execution_count": 13, "id": "d3ee06f3", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Kronecker quiver\n" ] } ], "source": [ "Q=KroneckerQuiver(3); print(Q)\n", "Q.prec((12,18))" ] }, { "cell_type": "code", "execution_count": 14, "id": "d3a47b50", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 4.52 s, sys: 7.69 ms, total: 4.53 s\n", "Wall time: 4.53 s\n" ] }, { "data": { "text/plain": [ "{(1, 1): y^4 + y^2 + 1,\n", " (2, 2): y^10 - y^4,\n", " (3, 3): y^20 + y^18 + y^16 - 2*y^12 - y^10,\n", " (4,\n", " 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,\n", " (5,\n", " 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}" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%time I=Q.stable([1,0],1/2) #stable for slope=1/2\n", "I.dict([5,5])" ] }, { "cell_type": "code", "execution_count": 15, "id": "1ee7ab13", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{(1, 1): 3,\n", " (2, 2): 0,\n", " (3, 3): 0,\n", " (4, 4): 0,\n", " (5, 5): 0,\n", " (6, 6): 0,\n", " (7, 7): 0,\n", " (8, 8): 0,\n", " (9, 9): 0,\n", " (10, 10): 0,\n", " (11, 11): 0,\n", " (12, 12): 0}" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dct={e:c(y=1) for e,c in I.dict().items()}; dct #just the Euler numbers" ] }, { "cell_type": "code", "execution_count": 16, "id": "dcd306eb", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 8.64 s, sys: 10.8 ms, total: 8.65 s\n", "Wall time: 8.65 s\n" ] }, { "data": { "text/plain": [ "{(2, 3): 13,\n", " (4, 6): 49,\n", " (6, 9): -28,\n", " (8, 12): -5277,\n", " (10, 15): -50540,\n", " (12, 18): 546995}" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%time I=Q.stable([1,0], slope=2/5)\n", "dct={e:c(y=1) for e,c in I.dict().items()}; dct" ] }, { "cell_type": "markdown", "id": "a1362b58", "metadata": {}, "source": [ "## 4-Kronecker quiver" ] }, { "cell_type": "code", "execution_count": 17, "id": "352e5750", "metadata": {}, "outputs": [], "source": [ "Q=KroneckerQuiver(4)\n", "Q.prec((10,20))" ] }, { "cell_type": "code", "execution_count": 18, "id": "243bee49", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 14.8 s, sys: 20.4 ms, total: 14.8 s\n", "Wall time: 14.8 s\n" ] } ], "source": [ "%time S=Q.stable([1,0], slope=1/3)" ] }, { "cell_type": "code", "execution_count": 19, "id": "6a9d0f90", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{(1, 2): 6,\n", " (2, 4): -1,\n", " (3, 6): 0,\n", " (4, 8): 0,\n", " (5, 10): 0,\n", " (6, 12): 0,\n", " (7, 14): 0,\n", " (8, 16): 0,\n", " (9, 18): 0,\n", " (10, 20): 0}" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dct={e:c(y=1) for e,c in S.dict().items()}; dct" ] }, { "cell_type": "code", "execution_count": 20, "id": "45566425", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 14.5 s, sys: 19.2 ms, total: 14.5 s\n", "Wall time: 14.5 s\n" ] }, { "data": { "text/plain": [ "{(1, 2): 6,\n", " (2, 4): -56,\n", " (3, 6): 990,\n", " (4, 8): -24000,\n", " (5, 10): 682170,\n", " (6, 12): -21432264,\n", " (7, 14): 721910826,\n", " (8, 16): -25590602944,\n", " (9, 18): 943269520050,\n", " (10, 20): -35857514085080}" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Om=Q.Om(z).restrict(z,1/3)\n", "%time Om.subs(y=1).dict()" ] }, { "cell_type": "code", "execution_count": 21, "id": "18916368", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "-3" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d=[1,2]\n", "Q.eform(d,d)" ] }, { "cell_type": "markdown", "id": "943625bc", "metadata": {}, "source": [ "## 5-Kronecker quiver" ] }, { "cell_type": "code", "execution_count": 22, "id": "57b02709", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Kronecker quiver\n", "Stability function [[1, 0], [1, 1]]\n" ] } ], "source": [ "Q=KroneckerQuiver(5); print(Q)\n", "Q.prec((10,10))\n", "z=Stability([1,0]); print(z)" ] }, { "cell_type": "code", "execution_count": 23, "id": "4d7d2416", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 3.18 s, sys: 6 ms, total: 3.19 s\n", "Wall time: 3.19 s\n" ] } ], "source": [ "%time I=Q.stable(z, slope=1/2)" ] }, { "cell_type": "code", "execution_count": 24, "id": "3be0cf32", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{(1, 1): 5,\n", " (2, 2): 0,\n", " (3, 3): 0,\n", " (4, 4): 0,\n", " (5, 5): 0,\n", " (6, 6): 0,\n", " (7, 7): 0,\n", " (8, 8): 0,\n", " (9, 9): 0,\n", " (10, 10): 0}" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dct={e:c(y=1) for e,c in I.dict(Q).items()}; dct" ] }, { "cell_type": "code", "execution_count": 26, "id": "b16b03af", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 236 ms, sys: 2.23 ms, total: 238 ms\n", "Wall time: 237 ms\n" ] }, { "data": { "text/plain": [ "{(1, 2): 10, (2, 4): -5, (3, 6): 5, (4, 8): -10, (5, 10): 25}" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%time I=Q.stable(z, slope=1/3)\n", "dct={e:c(y=1) for e,c in I.dict(W).items()}; dct" ] }, { "cell_type": "code", "execution_count": 25, "id": "2174539f", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 236 ms, sys: 2.19 ms, total: 238 ms\n", "Wall time: 236 ms\n" ] }, { "data": { "text/plain": [ "{(2, 1): 10, (4, 2): -5, (6, 3): 5, (8, 4): -10, (10, 5): 25}" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%time I=Q.stable(z, slope=2/3)\n", "dct={e:c(y=1) for e,c in I.dict().items()}; dct" ] }, { "cell_type": "code", "execution_count": 26, "id": "527257fe", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 73.9 ms, sys: 1.17 ms, total: 75.1 ms\n", "Wall time: 74.2 ms\n" ] }, { "data": { "text/plain": [ "{(1, 3): 10, (2, 6): -5, (3, 9): 5}" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%time I=Q.stable(z, slope=1/4)\n", "dct={e:c(y=1) for e,c in I.dict().items()}; dct" ] }, { "cell_type": "code", "execution_count": 27, "id": "5372fee8", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 75.1 ms, sys: 1.47 ms, total: 76.6 ms\n", "Wall time: 75.2 ms\n" ] }, { "data": { "text/plain": [ "{(3, 1): 10, (6, 2): -5, (9, 3): 5}" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%time I=Q.stable(z, slope=3/4)\n", "dct={e:c(y=1) for e,c in I.dict().items()}; dct" ] }, { "cell_type": "markdown", "id": "99a46151", "metadata": {}, "source": [ "## 6-Kronecker quiver" ] }, { "cell_type": "code", "execution_count": 32, "id": "b315ee86", "metadata": {}, "outputs": [], "source": [ "Q=KroneckerQuiver(6)\n", "Q.prec((6,12))" ] }, { "cell_type": "code", "execution_count": 33, "id": "aa5dbdc0", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 798 ms, sys: 2.79 ms, total: 800 ms\n", "Wall time: 799 ms\n" ] }, { "data": { "text/plain": [ "{(1, 2): 15,\n", " (2, 4): -15,\n", " (3, 6): 36,\n", " (4, 8): -141,\n", " (5, 10): 660,\n", " (6, 12): -3357}" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%time S=Q.stable([1,0], slope=1/3)\n", "dct={e:c(y=1) for e,c in S.dict().items()}; dct" ] }, { "cell_type": "markdown", "id": "83b8319e", "metadata": {}, "source": [ "# Relation to DT invariants" ] }, { "cell_type": "markdown", "id": "38fee796", "metadata": {}, "source": [ "DT invariants $\\Omega_d(y)$ satisfy the formula\n", "$$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.$$\n", "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\n", "$$T Exp\\left(\\frac{S_{z,c}}{1-y^2}\\right)=Exp\\left(\\frac{-y\\Omega_{z,c}}{1-y^2}\\right)$$\n", "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.\n", "\n", "Let $d_0$ be the indivisible vector with $\\mu_z(d_0)=c$.\n", "Let us define $S_k=S_z(kd_0)$, $\\Omega_k=\\Omega_z(kd_0)$, $N=-\\chi(d_0,d_0)$.\n", "Then the above formula can be written in the form\n", "$$T\\ Exp\\left(\\frac{\\sum_{k\\ge1}S_kx^k}{1-y^2}\\right)\n", "=Exp\\left(\\frac{-y\\sum_{k\\ge1}\\Omega_k x^k}{1-y^2}\\right),\n", "\\qquad T(x^k)=(-y)^{-Nk^2}x^k.\n", "$$\n", "We can express the values $b_k=\\Omega_k(1)$ in terms of values $a_k=S_k(1)$ as\n", "$$b_k=f_k(a_1,\\dots,a_k),$$\n", "where $f_k$ are polynomials which depend just on $N$.\n", "We will compute these polynomials for small $N$." ] }, { "cell_type": "markdown", "id": "29d26021", "metadata": {}, "source": [ "## Calculation of polynomials" ] }, { "cell_type": "code", "execution_count": 2, "id": "79537a8b", "metadata": {}, "outputs": [], "source": [ "from msinvar.lambda_rings import adams\n", "class TMPoly1(TMPoly):\n", " def adams(self, a, n):\n", " d = {e: adams(c, n) for e, c in a.dict().items()}\n", " return self.Element(self, d)" ] }, { "cell_type": "code", "execution_count": 3, "id": "2d9eeced", "metadata": {}, "outputs": [], "source": [ "B=RF('y')\n", "N=1; m=5\n", "R1=TMPoly1(B,m+1,'a')\n", "R2=TMPoly(R1,1,'x',prec=m)" ] }, { "cell_type": "code", "execution_count": 4, "id": "9ebd8c84", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Defining y\n", "Defining a0, a1, a2, a3, a4, a5\n", "Defining x\n" ] } ], "source": [ "B.inject_variables()\n", "R1.inject_variables()\n", "R2.inject_variables()" ] }, { "cell_type": "code", "execution_count": 37, "id": "a05fed24", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "a1*x + a2*x^2 + a3*x^3 + a4*x^4 + a5*x^5" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "g=sum(R1.gen(i)*x^i for i in range(1,m+1))\n", "g1=(g/(1-y^2)).Exp()\n", "g" ] }, { "cell_type": "code", "execution_count": 38, "id": "9d1b9237", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{1: a1,\n", " 2: (-1/2)*a1 - a2 + (-1/2)*a1^2,\n", " 3: a3 + 1/2*a1^2 + 2*a1*a2 + 1/2*a1^3,\n", " 4: -a4 + (-1/3)*a1^2 - a1*a2 + (-2)*a2^2 + (-3)*a1*a3 - a1^3 + (-4)*a1^2*a2 + (-2/3)*a1^4,\n", " 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}" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "N=1\n", "g2=g1.term_twist(lambda d: (-y)^(-N*d[0]^2)).Log()*(1-y^2)/(-y)\n", "dct={e[0]:c.subs_base(y=1) for e,c in g2.dict().items()}; dct" ] }, { "cell_type": "code", "execution_count": 39, "id": "95a070c4", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{1: a1,\n", " 2: (-1/2)*a1 - a2 + 1/2*a1^2,\n", " 3: a3 + (-1/2)*a1^2 + (-2)*a1*a2 + 1/2*a1^3,\n", " 4: -a4 + 1/3*a1^2 + a1*a2 + 2*a2^2 + 3*a1*a3 - a1^3 + (-4)*a1^2*a2 + 2/3*a1^4,\n", " 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}" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "N=-1\n", "g2=g1.term_twist(lambda d: (-y)^(-N*d[0]^2)).Log()*(1-y^2)/(-y)\n", "dct={e[0]:c.subs_base(y=1) for e,c in g2.dict().items()}; dct" ] }, { "cell_type": "code", "execution_count": 39, "id": "61957f8f", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{1: -a1,\n", " 2: -a2 - a1^2,\n", " 3: -a3 - a1^2 + (-4)*a1*a2 + (-2)*a1^3,\n", " 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,\n", " 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}" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "N=2\n", "g2=g1.term_twist(lambda d: (-y)^(-N*d[0]^2)).Log()*(1-y^2)/(-y)\n", "dct={e[0]:c.subs_base(y=1) for e,c in g2.dict().items()}; dct" ] }, { "cell_type": "code", "execution_count": 40, "id": "ab37b950", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{1: a1,\n", " 2: (-1/2)*a1 - a2 + (-3/2)*a1^2,\n", " 3: a3 + 3/2*a1^2 + 6*a1*a2 + 9/2*a1^3,\n", " 4: -a4 - a1^2 + (-3)*a1*a2 + (-6)*a2^2 + (-9)*a1*a3 + (-9)*a1^3 + (-36)*a1^2*a2 + (-18)*a1^4,\n", " 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}" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "N=3\n", "g2=g1.term_twist(lambda d: (-y)^(-N*d[0]^2)).Log()*(1-y^2)/(-y)\n", "dct={e[0]:c.subs_base(y=1) for e,c in g2.dict().items()}; dct" ] }, { "cell_type": "code", "execution_count": 41, "id": "4b29ae7c", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{1: -a1,\n", " 2: -a2 + (-2)*a1^2,\n", " 3: -a3 + (-2)*a1^2 + (-8)*a1*a2 + (-8)*a1^3,\n", " 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,\n", " 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}" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "N=4\n", "g2=g1.term_twist(lambda d: (-y)^(-N*d[0]^2)).Log()*(1-y^2)/(-y)\n", "dct={e[0]:c.subs_base(y=1) for e,c in g2.dict().items()}; dct" ] }, { "cell_type": "markdown", "id": "52ca03a8", "metadata": {}, "source": [ "## Some checks\n", "We verify that for the 4-Kronecker quiver we get correct numerical DT invariants for a special stability and special slope:" ] }, { "cell_type": "code", "execution_count": 42, "id": "6d310036", "metadata": {}, "outputs": [], "source": [ "Q=KroneckerQuiver(4)\n", "Q.prec((6,12))\n", "z=Stability([1,0])" ] }, { "cell_type": "code", "execution_count": 43, "id": "3da40151", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{(1, 2): 6, (2, 4): -1}" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "S=Q.stable(z,1/3)\n", "S1=S.subs(y=1); S1.dict()" ] }, { "cell_type": "code", "execution_count": 44, "id": "26b65204", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{(1, 2): 6,\n", " (2, 4): -56,\n", " (3, 6): 990,\n", " (4, 8): -24000,\n", " (5, 10): 682170,\n", " (6, 12): -21432264}" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Q.Om(z).restrict(z,1/3).subs(y=1).dict()" ] }, { "cell_type": "code", "execution_count": 45, "id": "792218d5", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "3" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "d=[1,2]\n", "-Q.eform(d,d)" ] }, { "cell_type": "code", "execution_count": 46, "id": "cb5d65a5", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{1: a1,\n", " 2: (-1/2)*a1 - a2 + (-3/2)*a1^2,\n", " 3: a3 + 3/2*a1^2 + 6*a1*a2 + 9/2*a1^3,\n", " 4: -a4 - a1^2 + (-3)*a1*a2 + (-6)*a2^2 + (-9)*a1*a3 + (-9)*a1^3 + (-36)*a1^2*a2 + (-18)*a1^4,\n", " 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}" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "N=3\n", "g2=g1.term_twist(lambda d: (-y)^(-N*d[0]^2)).Log()*(1-y^2)/(-y)\n", "dct={e[0]:c.subs_base(y=1) for e,c in g2.dict().items()}; dct" ] }, { "cell_type": "code", "execution_count": 47, "id": "87186e50", "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1 6\n", "2 -56\n", "3 990\n", "4 -24000\n", "5 682170\n" ] } ], "source": [ "for i,g in dct.items():\n", " print(i, g.subs(a1=6,a2=-1,a3=0,a4=0,a5=0))" ] }, { "cell_type": "markdown", "id": "2f8f4fd2", "metadata": {}, "source": [ "### Further checks" ] }, { "cell_type": "code", "execution_count": 5, "id": "860f807f", "metadata": {}, "outputs": [], "source": [ "Q=KroneckerQuiver(4)\n", "Q.prec((4,8))\n", "z=Stability([1,0])" ] }, { "cell_type": "code", "execution_count": 55, "id": "d55296aa", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1, 2] 0.333333333333 3\n" ] } ], "source": [ "d=[1,2]\n", "mu=z.slope(d)\n", "N=-Q.eform(d,d)\n", "print(d,mu,N)" ] }, { "cell_type": "code", "execution_count": 56, "id": "85391d84", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{1: 6, 2: -1, 3: 0, 4: 0}" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "S=Q.stable(z,mu).subs(y=1);\n", "s={k:int(S([k,2*k])) for k in range(1,5)}; s" ] }, { "cell_type": "code", "execution_count": 57, "id": "694c1a38", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{1: -6, 2: 56, 3: -990, 4: 24000}" ] }, "execution_count": 57, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Om=Q.Om(z).restrict(z,mu).subs(y=1)\n", "om={k:-int(Om([k,2*k])) for k in range(1,5)}; om #need to change the sign because of conventions" ] }, { "cell_type": "code", "execution_count": 51, "id": "2f417530", "metadata": {}, "outputs": [], "source": [ "R=TMPoly(prec=[4])\n", "x=R.gen()" ] }, { "cell_type": "code", "execution_count": 58, "id": "c8dbeb19", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1 + 6*x + 127*x^2 + 3662*x^3 + 121843*x^4" ] }, "execution_count": 58, "metadata": {}, "output_type": "execute_result" } ], "source": [ "F=1\n", "for k in range(1,5):\n", " F=F*(1-(-1)^(N*k)*x^k)^(-k*om[k])\n", "F" ] }, { "cell_type": "code", "execution_count": 61, "id": "6a8f58a8", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1 + 6*x + 127*x^2 + 3662*x^3 + 121843*x^4" ] }, "execution_count": 61, "metadata": {}, "output_type": "execute_result" } ], "source": [ "G=1\n", "for k in range(1,5):\n", " G=G*(1-(x*F^N)^k)^(-k*s[k]) #functional equation\n", "G" ] }, { "cell_type": "code", "execution_count": 95, "id": "f832219c", "metadata": {}, "outputs": [], "source": [ "def s2om(k,N,s):\n", " s1=0\n", " for m in divisors(k):\n", " s2=0\n", " for p in Partitions(m):\n", " p=p+[0]\n", " l=[p[i]-p[i+1] for i in range(len(p)-1)]\n", " s2 += prod((-1)^l[i]*binomial(-N*m*(i+1)*s[i+1],l[i]) for i in range(len(l)))\n", " s1 += moebius(k/m)*(-1)^(N*m)*s2\n", " return s1/(N*k^2) " ] }, { "cell_type": "code", "execution_count": 102, "id": "cc0c6268", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{1: -6, 2: 56, 3: -990, 4: 24000}" ] }, "execution_count": 102, "metadata": {}, "output_type": "execute_result" } ], "source": [ "{k:s2om(k,N,s) for k in range(1,5)}" ] }, { "cell_type": "code", "execution_count": null, "id": "2c0dcb8d", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "author": { "name": "Sergey Mozgovoy" }, "kernelspec": { "display_name": "SageMath 9.2", "language": "sage", "name": "sagemath" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5" }, "title": "Stable quiver representations" }, "nbformat": 4, "nbformat_minor": 5 }