{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Command below to toggle pretty LateX-style display of results. This worksheet may take some time to start, and I have experienced issues with pretty_print so if results do not display, use print to force them. Before some heavy lines of pretty printing (for example the expressions of $h_6$ and $h_{12}$, I have commented the instruction to display (generally given by the function **affiche**) to shorten the startup. Do NOT run all cells on startup, as there are heavy computations, especially in the end of the worksheet." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "%display typeset" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this worksheet, we will work in the algebra $A(\\Gamma_2(2))$ of Siegel modular forms of degree $2$, even weight and level $2$. We mainly use the results and notations of Jun-Ichi Igusa in his article \\ \\Siegel modular forms of genus two $(II)$ '', later referred to as [Ig]. For the definitions of Igusa invariants, we will follow a second article of Igusa, namely \\ \\Modular forms and projective invariants'', later referred to as [Ig2].\n", "\n", "With the classical notations, there are ten even theta constants of even characteristic, namely $$\n", "\\vartheta_{(0,0,0,0)}, \\vartheta_{(0,0,0,1/2)}, \\vartheta_{(0,0,1/2,0)}, \\vartheta_{(0,0,1/2,1/2)}, \\vartheta_{(0,1/2,0,0)}, \\vartheta_{(0,1/2,1/2,0)}, \\vartheta_{(1/2,0,0,0)}, \\vartheta_{(1/2,0,0,1/2)}, \\vartheta_{(1/2,1/2,0,0)}, \\vartheta_{(1/2,1/2,1/2,1/2)} .$$\n", "\n", "They are holomorphic functions on the Siegel half-plane $\\mathcal{H}_2$ of degree 2 and from the theory we know that they are integral over the $\\mathbb{Q}$-algebra of Siegel modular forms of degree 2, level 1 and even weight, which is itself generated by the four Igusa invariants. \n", "\n", "**Goal of this worksheet** : make explicit this integral dependence. \n", "\n", "We number the ten theta constants as written above from 0 to 9, and denote for any $i \\in \\{0,\\cdots,9\\}$ by $x_i$ the fourth power of the $i$-th theta constant, so that e.g.\n", "$$x_6 = \\vartheta_{(0,1/2,1/2,0)}^4 .$$\n", "Furthermore, there is a classical transformation formula of theta constants by the symplectic group $\\operatorname{Sp}_4(\\mathbb{Z})$ such that in particular, every $x_i$ belongs to $A(\\Gamma_2(2))_2$, and the whole group $\\operatorname{Sp}_4(\\mathbb{Z})$ only permutes them with sign $\\pm 1$.\n", "The fundamental result for the following is the exact description in Lemma 1 and Theorem 1 of [Ig] the ideal of relations between squares of the ten theta constants (implying in particular some linear ones between the $x_i$).\n", "\n", "Following this, [Ig] proves (p.397) that there are explicit linear combinations $y_0, y_1,y_2,y_3,y_4$ of the ten $x_i$ generating over $\\mathbb{C}$ the algebra $A(\\Gamma_2(2))$, and whose ideal of relations is generated by the quartic equation $$(y_0 y_1 + y_0 y_2 + y_1 y_2 -y_3 y_4)^2 = 4 y_0 y_1 y_2 (y_0+y_1+y_2+y_3+y_4)$$\n", "Given there is no details of how Igusa obtained this equation and how it is the only one, we computed in another worksheet the implicitation of the equations to reprove this claim. We thus begin by defining the algebra over $\\mathbb{Q}$ generated by formal variables $y_0,y_1,y_2,y_3,y_4$ and the quartic relation. The function **affiche** is for nice displaying of a lot of further results." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "R= \\Bold{Q}[y_{0}, y_{1}, y_{2}, y_{3}, y_{4}]" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "RQuart= y_{0}^{2} y_{1}^{2} - 2 y_{0}^{2} y_{1} y_{2} + y_{0}^{2} y_{2}^{2} - 2 y_{0} y_{1}^{2} y_{2} - 2 y_{0} y_{1} y_{2}^{2} - 4 y_{0} y_{1} y_{2} y_{3} - 4 y_{0} y_{1} y_{2} y_{4} - 2 y_{0} y_{1} y_{3} y_{4} - 2 y_{0} y_{2} y_{3} y_{4} + y_{1}^{2} y_{2}^{2} - 2 y_{1} y_{2} y_{3} y_{4} + y_{3}^{2} y_{4}^{2}" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def affiche(S,c):\n", " pretty_print(c+'='+latex(S))\n", "\n", "R = PolynomialRing(QQ,'y0,y1,y2,y3,y4', order='lex');\n", "y0,y1,y2,y3,y4=R.gens(); \n", "affiche(R,'R');\n", "\n", "RQuart = (y0*y1 + y0*y2 + y1*y2 -y3*y4)^2 - 4*y0*y1*y2*(y0+y1+y2+y3+y4); J = R.ideal(RQuart); affiche(RQuart,'RQuart')" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "Let $J$ be the ideal generated by the quartic relation $RQuart$ (so that $R/J$ is naturally isomorphic to $A(\\Gamma_2(2))$). We fix as monomial order on $R$ the lexicographic order. Hence, according to the theory of division by generators of an ideal (here, a principal one), the normal form of a polynomial $f \\in R$ modulo $J$ is the unique $r \\in R$ congruent to $f$ modulo $J$ whose expression does not contain any monomial being a multiple of the maximal monomial of $RQuart$, namely here a multiple of $$y_0^2 y_1^2.$$ The Sage reduction operator **.mod(J)** does not exactly do this (although it still gives 0 if and only if the polynomial belongs to the ideal) so we recoded it quickly below for our special case.\n", "\n", "The function **first_divisible_term**, given a polynomial $P$ and a monomial $M$, looks for a term of $P$ which is a multiple of $M$ (beginning by the maximal term of $P$ and then decreasing in the total monomial order). If there is not, it returns False and the initial $P$. If there is, it returns True and the quotient of such a term by $M$." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "[True, 2*y0]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def first_divisible_term(P,M):\n", " Q=P;\n", " ctr=False\n", " while ((Q != 0) and not(ctr)) :\n", " S=Q.lt()\n", " aux=S/M\n", " if (aux in R):\n", " ctr=True\n", " aux=S//M\n", " else: \n", " Q = Q-S\n", " if ctr:\n", " return [ctr,aux]\n", " else:\n", " return [ctr,P]\n", "first_divisible_term(y0^5+y0^4*y1 + 2*y0^3*y1^2,y0^2*y1^2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The function **red_Groebner_iteree** below, given a polynomial $G$ generating an ideal (we could generalise it to a family of polynomials if necessary) and $P$ any polynomial, reduces $P$ modulo $G$ so that the result does not contain any term which is a multiple of the leading term of $G$. In particular, this reduction is 0 if and only if $P$ is a multiple of $G$, but more, two elements of $R$ are equal in $R/J$ if and only if their reduction is the same." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def red_Groebner_iteree(P,G):\n", " Aux = 0\n", " Q=P\n", " E= G.lt()\n", " ctr=True\n", " while ctr:\n", " L=first_divisible_term(Q,E);\n", " if L:\n", " Q = Q - L*G\n", " else:\n", " ctr=False\n", " return Q" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "y0^2*y1 - y2^2 - 2*y2 - y3^2 + y3 + y4^3 - 1" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "red_Groebner_iteree(y0^2*y1 + y2^2*y3 + y2*y3^3 + y4^3,y2*y3+y2+1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will now define the theta functions and Igusa invariants. To begin with, we denote by $E$ the list of even characteristics (multiplied by 2) as a list of ten lists of four elements, sorted in lexicographical order. " ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "E= \\left[\\left[0, 0, 0, 0\\right], \\left[0, 0, 0, 1\\right], \\left[0, 0, 1, 0\\right], \\left[0, 0, 1, 1\\right], \\left[0, 1, 0, 0\\right], \\left[0, 1, 1, 0\\right], \\left[1, 0, 0, 0\\right], \\left[1, 0, 0, 1\\right], \\left[1, 1, 0, 0\\right], \\left[1, 1, 1, 1\\right]\\right]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "L = [[x,y,z,t] for x in [0..1] for y in [0..1] for z in [0..1] for t in [0..1]];\n", "def even_char (L):\n", " return (L*L + L*L) % 2 == 0\n", "E = filter (even_char, L); affiche(E,'E')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, using the definitions of $y_0,y_1,y_2,y_3,y_4$ p. 397 of [Ig], we revert the linear system and figure out the following expressions of $x_0, \\cdots, x_9$ in terms of these five functions." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "x0= y_{2}" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "x1= y_{2} + y_{4}" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "x2= y_{0} + y_{1} + y_{2} + y_{3} + y_{4}" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "x3= y_{2} + y_{3}" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "x4= y_{1}" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "x5= y_{0}" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "x6= - y_{0} - y_{3}" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "x7= - y_{1} - y_{3}" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "x8= - y_{0} - y_{4}" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "x9= - y_{1} - y_{4}" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "x= \\left[y_{2}, y_{2} + y_{4}, y_{0} + y_{1} + y_{2} + y_{3} + y_{4}, y_{2} + y_{3}, y_{1}, y_{0}, - y_{0} - y_{3}, - y_{1} - y_{3}, - y_{0} - y_{4}, - y_{1} - y_{4}\\right]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x0 =y2; affiche(x0,'x0'); x1= y2 + y4; affiche(x1,'x1'); x2 = y0 + y1 + y2 + y3 +y4; affiche(x2,'x2'); \n", "x3 = y2+y3; affiche(x3,'x3');x4 = y1; affiche(x4,'x4'); x5 = y0; affiche(x5,'x5'); \n", "x6 = - y0-y3; affiche(x6,'x6'); x7 = - y1 - y3; affiche(x7,'x7'); x8 = -y0 - y4; affiche(x8,'x8'); \n", "x9 = -y1 - y4; affiche(x9,'x9'); x = [x0,x1,x2,x3,x4,x5,x6,x7,x8,x9]; affiche(x,'x')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We now follow the usual instructions to write the four Igusa invariants. The standard ones are denoted by $\\psi_4,\\psi_6,\\chi_{10},\\chi_{12}$ in p. 848 of [Ig2] (made to have integral Fourier coefficients with pgcd 1), but we will normalise them slightly differently to have four invariants denoted by $h_4,h_6,h_{10},h_{12}$) whose normal form above has integer coefficients with pgcd 1. More precisely, with the notations of p.848 and our choices of normalisations, we have \n", "\\begin{eqnarray*}\n", "h_4 & = & 2 \\cdot \\psi_4 \\\\\n", "h_6 & = & 2^2 \\cdot \\psi_6 \\\\\n", "h_{10} & = & 2^{15} \\cdot \\chi_{10} \\\\\n", "h_{12} & = & 2^{16} \\cdot 3 \\cdot \\chi_{12}\n", "\\end{eqnarray*}\n", "\n", "Notice that usually, the invariant $h_{10}$ is only written as a product of the ten squares of theta constants, not in terms of their fourth powers, but p.397 of [Ig] gives it. Uncomment and rerun the cell below to obtain the expansion of $h_{10}$." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "h4= 2 y_{0}^{2} + y_{0} y_{1} + y_{0} y_{2} + 2 y_{0} y_{3} + 2 y_{0} y_{4} + 2 y_{1}^{2} + y_{1} y_{2} + 2 y_{1} y_{3} + 2 y_{1} y_{4} + 2 y_{2}^{2} + 2 y_{2} y_{3} + 2 y_{2} y_{4} + 2 y_{3}^{2} + y_{3} y_{4} + 2 y_{4}^{2}" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "h4p= sum(x[i]^2 for i in [0..9]); h4 = red_Groebner_iteree(h4p/2,RQuart); affiche(h4,'h4');\n", "h10p= (y0*y1 + y0*y2 + y1*y2-y3*y4)*(2*y0*y1*y2 + y0*y1*y3+y0*y1*y4 + y0*y2*y3 + y0*y2*y4 + 2*y0*y3*y4 + y1*y2*y3+y1*y2*y4 + 2*y1*y3*y4 + 2*y2*y3*y4 + y3^2*y4 + y3*y4^2);\n", "h10 = red_Groebner_iteree(h10p/2,RQuart); \n", "#affiche(h10,'h10');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "For the definitions of $h_6$ and $h_{12}$, we need the notion of syzygous set of even characteristics, defined following readily below and listed here. As we have $E$ to go from the even characteristics to the $x_i$, for compactness we will only refer to the triples of syzygies as the triples of their indices in $E$." ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def somme_listes (L):\n", " s = len(L)\n", " l = len(L)\n", " M = [0 for n in [1..l]]\n", " for i in [0..l-1]:\n", " for j in [0..s-1]:\n", " M[i] = M[i] + L[j][i]\n", " return M\n", "#sum of a list of lists of same size term by term\n", "\n", "def is_syzygous (L1,L2,L3): \n", " M = somme_listes([L1,L2,L3])\n", " return even_char(M)\n", "# definition of a syzygous triple\n", "def syzygy_sign (L1,L2,L3):\n", " a = L1 + L1 + L2 + L2 + L3 + L3 + L1*L2 + L1*L2+ L1*L2 + L1*L2 - L1*L2 + L1*L3 - L1*L3 + L2*L3+ L1*L3 + L2*L3 + L2*L3 + L2*L3 - L1*L1*L2 - L1*L1* L2 - L1*L1*L2 - L1*L1*L3 - L1*L2*L3 - L1*L2*L3 - L1*L1*L3 - L1*L2*L3 - L1*L1*L3 - L1*L2*L3 - L1* L2*L3\n", " return (-1)^a" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the above definitions, the formula for the sign of the syzygous triple in $h_6$ is given p. 68 of Marco Streng's thesis. We can now make the list of syzygous triples of even characteristics, denoted by $S$ and of length 60. Uncomment and rerun the cell below to see this list $S$." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "Card(S)= 60" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def syzygies(L):\n", " M=[]\n", " for i in [0..9]:\n", " for j in [0..9]:\n", " for k in [0..9]:\n", " if i" ], "text/plain": [ "h6= 4 y_{0}^{3} + 3 y_{0}^{2} y_{1} + 3 y_{0}^{2} y_{2} + 6 y_{0}^{2} y_{3} + 6 y_{0}^{2} y_{4} + 3 y_{0} y_{1}^{2} - 30 y_{0} y_{1} y_{2} - 6 y_{0} y_{1} y_{3} - 6 y_{0} y_{1} y_{4} + 3 y_{0} y_{2}^{2} - 6 y_{0} y_{2} y_{3} - 6 y_{0} y_{2} y_{4} - 6 y_{0} y_{3}^{2} + 6 y_{0} y_{3} y_{4} - 6 y_{0} y_{4}^{2} + 4 y_{1}^{3} + 3 y_{1}^{2} y_{2} + 6 y_{1}^{2} y_{3} + 6 y_{1}^{2} y_{4} + 3 y_{1} y_{2}^{2} - 6 y_{1} y_{2} y_{3} - 6 y_{1} y_{2} y_{4} - 6 y_{1} y_{3}^{2} + 6 y_{1} y_{3} y_{4} - 6 y_{1} y_{4}^{2} + 4 y_{2}^{3} + 6 y_{2}^{2} y_{3} + 6 y_{2}^{2} y_{4} - 6 y_{2} y_{3}^{2} + 6 y_{2} y_{3} y_{4} - 6 y_{2} y_{4}^{2} - 4 y_{3}^{3} - 3 y_{3}^{2} y_{4} - 3 y_{3} y_{4}^{2} - 4 y_{4}^{3}" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def constructionh6(L):\n", " P = 0\n", " for i in [0..59]:\n", " char1=L[i]\n", " char2=L[i]\n", " char3=L[i]\n", " P = P + syzygy_sign(E[char1],E[char2],E[char3]) * x[char1]*x[char2]*x[char3]\n", " return P\n", "h6p = constructionh6(S); h6 = red_Groebner_iteree(h6p,RQuart); affiche(h6,'h6')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For the definition of the last Igusa invariant $h_{12}$, one needs the Göpel quadruples, namely the fourtuples of even theta characteristics whose sum has each coordinate even. There are 15 such quadruples as the short algorithm below finds, and we denote by $G$ the set of quadruples of indices of characteristics in Göpel configuration." ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "G= \\left[\\left[0, 1, 2, 3\\right], \\left[0, 1, 6, 7\\right], \\left[0, 2, 4, 5\\right], \\left[0, 3, 8, 9\\right], \\left[0, 4, 6, 8\\right], \\left[0, 5, 7, 9\\right], \\left[1, 2, 8, 9\\right], \\left[1, 3, 4, 5\\right], \\left[1, 4, 7, 8\\right], \\left[1, 5, 6, 9\\right], \\left[2, 3, 6, 7\\right], \\left[2, 4, 7, 9\\right], \\left[2, 5, 6, 8\\right], \\left[3, 4, 6, 9\\right], \\left[3, 5, 7, 8\\right]\\right]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def is_Gopel_quadruple_indices(L):\n", " L0 = E[L]\n", " L1 = E[L]\n", " L2 = E[L]\n", " L3 = E[L]\n", " M = somme_listes([L0,L1,L2,L3])\n", " epsilon=True\n", " for i in [0..3]:\n", " if M[i] % 2 == 1:\n", " epsilon=False\n", " return epsilon\n", "def Gopel_quadruples_indices(E):\n", " M=[]\n", " for i in [0..9]:\n", " for j in [0..9]:\n", " for k in [0..9]:\n", " for l in [0..9]:\n", " if i" ], "text/plain": [ "Sigma1= 4 y_{0}^{2} + 2 y_{0} y_{1} + 2 y_{0} y_{2} + 4 y_{0} y_{3} + 4 y_{0} y_{4} + 4 y_{1}^{2} + 2 y_{1} y_{2} + 4 y_{1} y_{3} + 4 y_{1} y_{4} + 4 y_{2}^{2} + 4 y_{2} y_{3} + 4 y_{2} y_{4} + 4 y_{3}^{2} + 2 y_{3} y_{4} + 4 y_{4}^{2}" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "Rsym = PolynomialRing(R,'Z'); Z = Rsym.gen(); \n", "\n", "Psym = (Z - x0^2)*(Z-x1^2)*(Z-x2^2)*(Z - x3^2)*(Z-x4^2)*(Z-x5^2)*(Z - x6^2)*(Z-x7^2)*(Z-x8^2)*(Z-x9^2);\n", "Sigma1 = -red_Groebner_iteree(Psym,RQuart); \n", "Sigma2 = red_Groebner_iteree(Psym,RQuart); \n", "affiche(Sigma1,'Sigma1')\n", "#affiche(Sigma2,'Sigma2')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A natural idea would be to use the elimination algorithms in a larger algebra with the relations defining the $\\Sigma_i$ and the Igusa invariants to figure out the explicit expressions, but unless there is some trick we did not think about, it proves to be by far too computationally expensive (there are after all $5+4+1=10$ variables and polynomials of degree up to 18)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "We can now begin to figure out how to express the $\\Sigma_i$ in function of the four Igusa invariants. First, for practical uses, we define the function **prodhred** which to a list of integers amonst $4,6,10$ and $12$ associates the normal form of the corresponding product of $h_4,h_6,h_{10}$ and $h_{12}$. To shorten the code, we also define the function **Sigmared** to give the $\\Sigma_i$ reduced modulo $RQuart$." ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def prodhred(L):\n", " P=1\n", " Aux=[1,1,1,1,h4,1,h6,1,1,1,h10,1,h12]\n", " l=len(L)\n", " for i in [0..l-1]:\n", " P = P*Aux[L[i]]\n", " Q=red_Groebner_iteree(P,RQuart)\n", " return Q\n", "\n", "def Sigmared(a):\n", " P=red_Groebner_iteree((-1)^a*Psym[10-a],RQuart)\n", " return P" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us begin with the simplest case, i.e. $\\Sigma_2$ : by definition, we have $\\Sigma_1 = 2 h_4$. The only modular form of weight 8 and level 1 is up to constant $h_4^2$, so we know $\\Sigma_2$ is a multiple of this form, and we figure out the exact expression. Uncomment and rerun the cell below to obtain the expansions of $h_4^2$ and $\\Sigma_2$." ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false }, "outputs": [], "source": [ "#affiche(prodhred([4,4]),'h4^2 \\, \\, mod \\, \\, RQuart'); affiche(Sigmared(2),'Sigma2 \\, \\, mod \\, \\, RQuart')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Given the expansions, we have readily obtained the equality $$\\Sigma_2 = \\frac{3}{2} h_4^2.$$ Actually, this is more of a test of consistence of the algorithm, as the quartic relation $RQuart$ is seen to be equivalent to this relation between the $x[i]$, which is readily expressed as $$\\left( \\sum_{i=0}^9 \\vartheta_i^8 \\right)^2 = 4 \\sum_{i=0}^9 \\vartheta_i^{16}.$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, for $\\Sigma_3$, we have three independant modular forms : $h_4^3$, $h_6^2$ and $h_{12}$, so we know $\\Sigma_3$, as a modular form of level 1 and weight 12, is of the unique shape \n", "$$\\Sigma_3 = \\lambda h_4^3 + \\mu h_6^2 + \\gamma h_{12}.$$\n", "We figure out the coefficients below, using the normal form. Uncomment and rerun the four cell belows for the respective expansions of the normal forms of $h_4^3$, $h_6^2$, $h_{12}$ and $\\Sigma_3$." ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [], "source": [ "#affiche(prodhred([4,4,4]),'h4^3 \\, \\, mod \\, \\, RQuart')" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false }, "outputs": [], "source": [ "#affiche(prodhred([6,6]),'h6^2 \\, \\, mod \\, \\, RQuart')" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false }, "outputs": [], "source": [ "#affiche(prodhred(),'h12 \\, \\, mod \\, \\, RQuart')" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [], "source": [ "Sigma3 = Sigmared(3); \n", "#affiche(Sigma3,'Sigma3 \\, \\, mod \\, \\, RQuart')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The computations are already hard to visualise at this point, but we can see the first six monomials (for lexicographic order) only appear in $h_4^3$ and $h_6^2$, hence we can figure out the coefficient from there. The first coefficient making them independent is the coefficient in $y_0^4y_1 y_2$, for which the coefficients are respectively $84$ and $-156$, and $48$ for $\\Sigma_3$. Therefore, solving this linear system, we get \n", "$$\n", "\\lambda = \\frac{29}{54}, \\quad \\mu = \\frac{-1}{54}.$$\n", "Choosing a last coefficient appearing in $h_{12}$ (for example the one before its leading monomial $y_0^3 y_1 y_2^2$), we figure out that the coefficient $\\gamma$ before $h_{12}$ satisfies\n", "$$372 \\lambda - 66 \\mu + 6 \\gamma = 234,$$ hence the following value of $\\gamma$." ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "gamma= 2^{-1} \\cdot 11" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "gamma=(234 - 372*29/54 - 66/54)/6; affiche(factor(gamma),'gamma')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To be sure, we will now check if our relation holds, namely if our sum is indeed $\\Sigma_3$." ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "0" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "prodhred([4,4,4])* 29/54 - prodhred([6,6])/54 + 11*prodhred()/2 - Sigma3" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Hence, we have exactly proven the following relation (given with factored integers) \n", "$$\n", "\\Sigma_3 = \\frac{29}{2 \\cdot 3^3} h_4^3 - \\frac{1}{2 \\cdot 3^3} h_6^2 + \\frac{1}{2 \\cdot 3} h_{12}\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "From this example, we also see that even printing the whole expansion for the following terms will be difficult, so we devise a quick algorithm to let the machine do it itself (using, intuitively, random monomials until the linear system associated to these random monomials has a unique solution). \n", "\n", "The result will be returned in a factored form such as above, and we will then check ourselves if the sums are indeed equal by typing the given expression (although the algorithm ensures this is the good one) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First, let us build a function **Igusapow** which to every number $n$ associates the list of different possibilities of sums of $4,6,10,12$ being equal to $n$ ; namely, this will give us an index for the family of modular forms of level 1 and even weight, and a basis with the corresponding powers of the Igusa invariants. We also define the function **prodhrednew** with this new convention, which to a list of four integers associate the product of powers of $h_4,h_6,h_{10},h_{12}$ (in this order) in normal form." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def Igusapow(n):\n", " L=[]\n", " j=0\n", " k=0\n", " l=0\n", " for i in [0..n/4]:\n", " for j in [0..(n - 4*i)]:\n", " for k in [0..(n - 4*i - 6*j)]:\n", " for l in [0..n - 4*i - 6*j - 10*k]:\n", " if (n==4*i + 6*j + 10*k + 12*l):\n", " L.append([i,j,k,l])\n", " L.reverse()\n", " return L\n", "def prodhrednew(L):\n", " P=h4^(L)*h6^(L)*h10^(L)*h12^(L)\n", " Q=red_Groebner_iteree(P,RQuart)\n", " return Q" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "[[9, 0, 0, 0],\n", " [6, 2, 0, 0],\n", " [6, 0, 0, 1],\n", " [5, 1, 1, 0],\n", " [4, 0, 2, 0],\n", " [3, 4, 0, 0],\n", " [3, 2, 0, 1],\n", " [3, 0, 0, 2],\n", " [2, 3, 1, 0],\n", " [2, 1, 1, 1],\n", " [1, 2, 2, 0],\n", " [1, 0, 2, 1],\n", " [0, 6, 0, 0],\n", " [0, 4, 0, 1],\n", " [0, 2, 0, 2],\n", " [0, 1, 3, 0],\n", " [0, 0, 0, 3]]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Igusapow(36)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For example, in weight 20, there are five linearly independant modular forms given by $h_4^5$, $h_4^2 h_6^2$, $h_4^2 h_{12}$, $h_4 h_6 h_{10}$ and $h_{10}^2$. Uncomment and rerun the cell below for the normal form of $h_4 h_6$, for example." ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": false }, "outputs": [], "source": [ "#prodhrednew([1,1,0,0])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, we will define the operator of succession in the lexicographic order of indices of monomials in $y_0,y_1,y_2,y_3,y_4$ (for monomials of the same degree). For example, the successor of $y_0^6$ is $y_0^5 y_1$, then it is $y_0^5 y_2$, etc... This function **next_monomial_same_degree** takes a list of $k$ integers and returns the list of $k$ integers being right after the first list for lexicographic order. The second function (more to test the validity of the first one) gives the list of exponents of the monomials of total degree $n$ in $d$ variable in decreasing lexicographic order. Uncomment the second cell below and rerun for a check" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def next_monomial_same_degree(L):\n", " l=len(L)\n", " n = sum(L[i] for i in [0..l-1])\n", " if L[l-1]==n:\n", " return 'no_next_monomial'\n", " else:\n", " j=l-2\n", " while ((j>=0) and (L[j]==0)):\n", " j=j-1\n", " k=L[j] + L[l-1]\n", " return (L[0:j]+[L[j]-1,L[l-1]+1]+[0 for m in [j+2..l-1]])\n", "def list_monomials_degree(n,d):\n", " L=[n] + [0 for i in [1..d-1]]\n", " pretty_print(L)\n", " while not(L[d-1]==n):\n", " L=next_monomial_same_degree(L)\n", " pretty_print(L)" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "collapsed": false }, "outputs": [], "source": [ "#list_monomials_degree(2,5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will now write down our algorithm to express the $\\Sigma_i$ using the product of powers of $h_4,h_6,h_{10},h_{12}$. This algorithm has three stages : \n", "\n", "First, compute the list of possible powers having the correct degree in $y_0,\\cdots, y_4$ (which is $2i$), which is what **Igusapow** does (its cardinal will be denoted by $\\ell$).\n", "\n", "Second, compute all the products of the Igusa invariants associated to these powers, and $\\Sigma_i$ itself, in normal form.\n", "\n", "Third, beginning with the highest exponent, build the column vector of coefficients of these powers in an exponent, then consider the next one and apply Gauss pivot (while keeping only in memory the columns increasing the rank) until we have gone through enough coefficients so that there is only a unique solution to our problem, which will give us the wanted coefficients. Practically, it amounts to solve a linear equation of the shape \n", "$$\n", "L M = L'\n", "$$\n", "where respectively : \n", "\n", " $L$ is a row with $\\ell$ coefficients, the ones we are looking for.\n", " \n", " $M$ is a matrix with $\\ell$ rows and a a huge number (say $n$) of columns (one for each monomial term of degree $2i$ in 5 variables).\n", " \n", " $L'$ is the row of the $n$ coefficients of $\\Sigma_i$ in the monomials. \n", "\n", "To avoid working too much with the matrix $M$, we actually do a Gauss pivot on its successive largest rows for the lexicographic order. We act on the colums, hence by right multiplication, and we act the same way on $L'$ so at the end, $L$ remains the row of coefficients we wanted. We stop as soon as we have gone through $\\ell$ independant columns in $M$.\n", "\n", "Fourth, return the list of all possible powers and the associated coefficients. All this is what the function **Sigmadecomp** below does. For comfort, it also displays the list of powers of Igusa invariants considered, the list of exponents of monomials which formed a linear system (so the one he used), the list of coefficients before each product of Igusa invariants to obtain $\\Sigma_i$, and the number of exponents which were needed to explore to obtain an invertible linear system. During the computation, it also displays when each polynomial is computed, as given the computation time, it is good to have an idea of the progress of the execution.\n", "\n", "With this list, we will finally check the equality holds, by letting Sage compute the difference of normal forms of both sides : it has to be zero.\n" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def Sigmadecomp(j):\n", " L=Igusapow(4*j)\n", " affiche(L,'L')\n", " l=len(L)\n", " liste_prod=[0 for i in [0..l-1]]\n", " liste_vect=matrix(QQ,l,l)\n", " liste_exp=[[0,0,0,0,0] for i in [0..l-1]]\n", " liste_indices_pivots=[1 for i in [0..l-1]]\n", " liste_coeffs_Sigma=[0 for i in [0..l-1]]\n", " for i in [0..l-1]:\n", " liste_prod[i] = prodhrednew(L[i])\n", " print 'product computed'\n", " Sigma=Sigmared(j)\n", " print 'Symmetric polynomial computed'\n", " runexp=[2*j,0,0,0,0]\n", " liste_coeffs_Sigma=Sigma[2*j,0,0,0,0]\n", " r=1\n", " liste_vect[:,0] = vector([(liste_prod[i][2*j,0,0,0,0]) for i in [0..l-1]])\n", " liste_exp=runexp\n", " liste_indices_pivots=0\n", " monomes_parcourus=1\n", " while ((r" ], "text/plain": [ "L= \\left[\\left[3, 0, 0, 0\\right], \\left[0, 2, 0, 0\\right], \\left[0, 0, 0, 1\\right]\\right]" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "product computed\n", "product computed\n", "product computed\n", "Symmetric polynomial computed\n" ] }, { "data": { "text/html": [ "" ], "text/plain": [ "list \\, of \\, powers \\, of \\, Igusa \\, invariants \\, having \\, the \\, good \\, degree= \\left[\\left[3, 0, 0, 0\\right], \\left[0, 2, 0, 0\\right], \\left[0, 0, 0, 1\\right]\\right]" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "exponents \\, of \\, monomials\\, forming \\, an \\, invertible \\, linear \\, system= \\left[\\left[6, 0, 0, 0, 0\\right], \\left[4, 1, 1, 0, 0\\right], \\left[3, 1, 2, 0, 0\\right]\\right]" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "list \\, \\, of \\, \\, coefficients \\, \\, of \\, the \\, solutions= \\left(\\frac{29}{54},\\,-\\frac{1}{54},\\,\\frac{11}{2}\\right)" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "number \\, of \\, monomials \\, gone \\, through= 20" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "([[3, 0, 0, 0], [0, 2, 0, 0], [0, 0, 0, 1]], (29/54, -1/54, 11/2))" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Sigmadecomp(3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To sum up what this algorithm just has done, it has found out that : \n", "\n", "1) A generating family of the vector space of modular forms of level 1 and weight $4 \\cdot 3=12$ is given by $h_4^3,h_6^2,h_{12}$, so $\\Sigma_3$ is a linear combination of these three.\n", "\n", "2) Looking at their respective coefficients for the monomials $y_0^6,y_0^4 y_1y_2$ and $y_0^3 y_1y_2^2$, we obtain an invertible system. Included this last one, we have looked at 20 monomials to extract this invertible system.\n", "\n", "3) This invertible system gives the relation \n", "$$\n", "\\Sigma_3 = \\frac{29}{54} h_4^3 - \\frac{1}{54} h_6^2 + \\frac{11}{2} h_{12}.\n", "$$\n", "In other words, we have just retrieved what we obtained before \"manually\" ! This was a good test for the correctness of the algorithm. We will now apply it to higher-degree $\\Sigma_i$." ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "L= \\left[\\left[4, 0, 0, 0\\right], \\left[1, 2, 0, 0\\right], \\left[1, 0, 0, 1\\right], \\left[0, 1, 1, 0\\right]\\right]" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "product computed\n", "product computed\n", "product computed\n", "product computed\n", "Symmetric polynomial computed\n" ] }, { "data": { "text/html": [ "" ], "text/plain": [ "list \\, of \\, powers \\, of \\, Igusa \\, invariants \\, having \\, the \\, good \\, degree= \\left[\\left[4, 0, 0, 0\\right], \\left[1, 2, 0, 0\\right], \\left[1, 0, 0, 1\\right], \\left[0, 1, 1, 0\\right]\\right]" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "exponents \\, of \\, monomials\\, forming \\, an \\, invertible \\, linear \\, system= \\left[\\left[8, 0, 0, 0, 0\\right], \\left[6, 1, 1, 0, 0\\right], \\left[5, 1, 2, 0, 0\\right], \\left[4, 1, 3, 0, 0\\right]\\right]" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "list \\, \\, of \\, \\, coefficients \\, \\, of \\, the \\, solutions= \\left(\\frac{43}{432},\\,-\\frac{1}{54},\\,\\frac{23}{6},\\,\\frac{2}{3}\\right)" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "number \\, of \\, monomials \\, gone \\, through= 46" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "SolutionSigma4=Sigmadecomp(4)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In other words, we have the relation \n", "$$\n", "\\Sigma_4 = \\frac{43}{2^4 \\cdot 3^3} h_4^4 - \\frac{1}{2 \\cdot 3^3} h_4 h_6^2 + \\frac{23}{2 \\cdot 3} h_4 h_{12} + \\frac{2}{3} h_6 h_{10}. \n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To be sure of it, we devise the function **checkSigmadecomp** to check the result (notice that it does not compute with the Groebner reduction above, so as to gain some time). When given the output of **Sigmadecomp** together with the index $i$, it must return 0 if and only if the relation obtained between $\\Sigma_i$ and the Igusa invariants is correct." ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def prodh(L):\n", " P=h4^(L)*h6^(L)*h10^(L)*h12^(L)\n", " return P\n", "\n", "def checkSigmadecomp(S,j):\n", " L=list(S)\n", " Igusaexp=L\n", " coeffs=tuple(L)\n", " l=len(Igusaexp)\n", " P = 0\n", " for i in [0..l-1]:\n", " P=P + coeffs[i]*prodh(Igusaexp[i])\n", " Q=P-Sigmared(j)\n", " return (Q.mod(J))" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "0" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "checkSigmadecomp(SolutionSigma4,4)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This process will now allow us to obtain one by one every remaining $\\Sigma_i$." ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "L= \\left[\\left[5, 0, 0, 0\\right], \\left[2, 2, 0, 0\\right], \\left[2, 0, 0, 1\\right], \\left[1, 1, 1, 0\\right], \\left[0, 0, 2, 0\\right]\\right]" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "list \\, of \\, powers \\, of \\, Igusa \\, invariants \\, having \\, the \\, good \\, degree= \\left[\\left[5, 0, 0, 0\\right], \\left[2, 2, 0, 0\\right], \\left[2, 0, 0, 1\\right], \\left[1, 1, 1, 0\\right], \\left[0, 0, 2, 0\\right]\\right]" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "exponents \\, of \\, monomials\\, forming \\, an \\, invertible \\, linear \\, system= \\left[\\left[10, 0, 0, 0, 0\\right], \\left[8, 1, 1, 0, 0\\right], \\left[7, 1, 2, 0, 0\\right], \\left[6, 1, 3, 0, 0\\right], \\left[4, 1, 5, 0, 0\\right]\\right]" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "list \\, \\, of \\, \\, coefficients \\, \\, of \\, the \\, solutions= \\left(\\frac{1}{108},\\,-\\frac{1}{216},\\,\\frac{25}{24},\\,-\\frac{1}{6},\\,\\frac{123}{4}\\right)" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "number \\, of \\, monomials \\, gone \\, through= 162" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "SolutionSigma5=Sigmadecomp(5)" ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "0" ] }, "execution_count": 47, "metadata": {}, "output_type": "execute_result" } ], "source": [ "checkSigmadecomp(SolutionSigma5,5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Hence, the algorithm has computed that\n", "$$\n", "\\Sigma_5 = \\frac{1}{2^2 \\cdot 3^3} h_4^5 - \\frac{1}{2^3 \\cdot 3^3} h_4^2 h_6^2 + \\frac{5^2}{2^3 \\cdot 3} h_4^2 h_{12} - \\frac{1}{2 \\cdot 3} h_4 h_6 h_{10} + \\frac{3 \\cdot 41}{2^2} h_{10}^2.\n", "$$\n", "Let's compute $\\Sigma_6$ now." ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "L= \\left[\\left[6, 0, 0, 0\\right], \\left[3, 2, 0, 0\\right], \\left[3, 0, 0, 1\\right], \\left[2, 1, 1, 0\\right], \\left[1, 0, 2, 0\\right], \\left[0, 4, 0, 0\\right], \\left[0, 2, 0, 1\\right], \\left[0, 0, 0, 2\\right]\\right]" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "product \\, computed\n", "product \\, computed\n", "product \\, computed\n", "product \\, computed\n", "product \\, computed\n", "product \\, computed\n", "product \\, computed\n", "product \\, computed\n", "Symmetric \\, polynomial \\, computed\n" ] }, { "data": { "text/html": [ "" ], "text/plain": [ "list \\, of \\, powers \\, of \\, Igusa \\, invariants \\, having \\, the \\, good \\, degree= \\left[\\left[6, 0, 0, 0\\right], \\left[3, 2, 0, 0\\right], \\left[3, 0, 0, 1\\right], \\left[2, 1, 1, 0\\right], \\left[1, 0, 2, 0\\right], \\left[0, 4, 0, 0\\right], \\left[0, 2, 0, 1\\right], \\left[0, 0, 0, 2\\right]\\right]" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "exponents \\, of \\, monomials\\, forming \\, an \\, invertible \\, linear \\, system= \\left[\\left[12, 0, 0, 0, 0\\right], \\left[10, 1, 1, 0, 0\\right], \\left[9, 1, 2, 0, 0\\right], \\left[8, 1, 3, 0, 0\\right], \\left[8, 1, 1, 2, 0\\right], \\left[7, 1, 4, 0, 0\\right], \\left[6, 1, 5, 0, 0\\right], \\left[5, 1, 6, 0, 0\\right]\\right]" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "list \\, \\, of \\, \\, coefficients \\, \\, of \\, the \\, solutions= \\left(\\frac{1}{2916},\\,-\\frac{1}{2916},\\,\\frac{7}{54},\\,-\\frac{1}{12},\\,\\frac{47}{6},\\,\\frac{1}{11664},\\,-\\frac{5}{216},\\,\\frac{43}{48}\\right)" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "number \\, of \\, monomials \\, gone \\, through= 267" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "SolutionSigma6=Sigmadecomp(6)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The rough computation time for this polynomial was around 20 minutes." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Hence, the algorithm has computed that \n", "$$\n", "\\Sigma_6 = \\frac{1}{2^2 \\cdot 3^6} h_4^6 - \\frac{1}{2^2 \\cdot 3^6} h_4^3 h_6^2 + \\frac{7}{2 \\cdot 3^3} h_4^3 h_{12} - \\frac{1}{2^2 \\cdot 3} h_4^2 h_6 h_{10}\n", "+ \\frac{47}{2 \\cdot 3} h_4 h_{10}^2 + \\frac{1}{2^4 \\cdot 3^6} h_6^4 - \\frac{5}{2^3 \\cdot 3^3} h_6^2 h_{12} + \\frac{43}{2^4 \\cdot 3} h_{12}^2.\n", "$$\n", "The check below confirms this expression." ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "0" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ], "source": [ "checkSigmadecomp(SolutionSigma6,6)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us now compute $\\Sigma_7$, hoping the execution time is not too high." ] }, { "cell_type": "code", "execution_count": 56, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "L= \\left[\\left[7, 0, 0, 0\\right], \\left[4, 2, 0, 0\\right], \\left[4, 0, 0, 1\\right], \\left[3, 1, 1, 0\\right], \\left[2, 0, 2, 0\\right], \\left[1, 4, 0, 0\\right], \\left[1, 2, 0, 1\\right], \\left[1, 0, 0, 2\\right], \\left[0, 3, 1, 0\\right], \\left[0, 1, 1, 1\\right]\\right]" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "product \\, computed\n", "product \\, computed\n", "product \\, computed\n", "product \\, computed\n", "product \\, computed\n", "product \\, computed\n", "product \\, computed\n", "product \\, computed\n", "product \\, computed\n", "product \\, computed\n", "Symmetric \\, polynomial \\, computed\n" ] }, { "data": { "text/html": [ "" ], "text/plain": [ "list \\, of \\, powers \\, of \\, Igusa \\, invariants \\, having \\, the \\, good \\, degree= \\left[\\left[7, 0, 0, 0\\right], \\left[4, 2, 0, 0\\right], \\left[4, 0, 0, 1\\right], \\left[3, 1, 1, 0\\right], \\left[2, 0, 2, 0\\right], \\left[1, 4, 0, 0\\right], \\left[1, 2, 0, 1\\right], \\left[1, 0, 0, 2\\right], \\left[0, 3, 1, 0\\right], \\left[0, 1, 1, 1\\right]\\right]" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "exponents \\, of \\, monomials\\, forming \\, an \\, invertible \\, linear \\, system= \\left[\\left[14, 0, 0, 0, 0\\right], \\left[12, 1, 1, 0, 0\\right], \\left[11, 1, 2, 0, 0\\right], \\left[10, 1, 3, 0, 0\\right], \\left[10, 1, 1, 2, 0\\right], \\left[9, 1, 4, 0, 0\\right], \\left[8, 1, 5, 0, 0\\right], \\left[8, 1, 3, 2, 0\\right], \\left[7, 1, 6, 0, 0\\right], \\left[6, 1, 7, 0, 0\\right]\\right]" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "list \\, \\, of \\, \\, coefficients \\, \\, of \\, the \\, solutions= \\left(0,\\,0,\\,\\frac{1}{162},\\,-\\frac{1}{162},\\,\\frac{41}{72},\\,0,\\,-\\frac{1}{324},\\,\\frac{11}{36},\\,\\frac{1}{324},\\,-\\frac{19}{36}\\right)" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "number \\, of \\, monomials \\, gone \\, through= 415" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "([[7, 0, 0, 0],\n", " [4, 2, 0, 0],\n", " [4, 0, 0, 1],\n", " [3, 1, 1, 0],\n", " [2, 0, 2, 0],\n", " [1, 4, 0, 0],\n", " [1, 2, 0, 1],\n", " [1, 0, 0, 2],\n", " [0, 3, 1, 0],\n", " [0, 1, 1, 1]],\n", " (0, 0, 1/162, -1/162, 41/72, 0, -1/324, 11/36, 1/324, -19/36))" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "SolutionSigma7=Sigmadecomp(7)\n", "#WARNING : computation approximately one hour long." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The fact that some cofficients are 0 here is not really a surprise : the symmetric polynomial $\\Sigma_7$ begins to be sparse in $y_0, \\cdots, y_4$ and especially does not have monomials with high multiplicity in $y_0$ given its symmetry, which explains why the products above with high multiplicty in $h_4$ or $h_6$ do not appear.\n", "Hence, we have obtained the expression (with a bit less than an hour-long computation)\n", "$$\n", "\\Sigma_7 = \\frac{1}{2 \\cdot 3^4} h_4^4 h_{12} - \\frac{1}{2 \\cdot 3^4} h_4^3 h_6 h_{10} + \\frac{41}{2^3 \\cdot 3^2} h_4^2 h_{10}^2 - \\frac{1}{2^2 \\cdot 3^4} h_4 h_6^2 h_{12} + \\frac{11}{2^2 \\cdot 3^2} h_4 h_{12}^2 + \\frac{1}{2^2 \\cdot 3^4} h_6^3 h_{10} - \\frac{19}{2^2 \\cdot 3^2} h_6 h_{10} h_{12}\n", "$$\n", "As usual, we check the result below." ] }, { "cell_type": "code", "execution_count": 57, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "0" ] }, "execution_count": 57, "metadata": {}, "output_type": "execute_result" } ], "source": [ "checkSigmadecomp(_,7)" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "L= \\left[\\left[8, 0, 0, 0\\right], \\left[5, 2, 0, 0\\right], \\left[5, 0, 0, 1\\right], \\left[4, 1, 1, 0\\right], \\left[3, 0, 2, 0\\right], \\left[2, 4, 0, 0\\right], \\left[2, 2, 0, 1\\right], \\left[2, 0, 0, 2\\right], \\left[1, 3, 1, 0\\right], \\left[1, 1, 1, 1\\right], \\left[0, 2, 2, 0\\right], \\left[0, 0, 2, 1\\right]\\right]" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "product computed\n", "product computed\n", "product computed\n", "product computed\n", "product computed\n", "product computed\n", "product computed\n", "product computed\n", "product computed\n", "product computed\n", "product computed\n", "product computed\n", "Symmetric polynomial computed\n" ] }, { "data": { "text/html": [ "" ], "text/plain": [ "list \\, of \\, powers \\, of \\, Igusa \\, invariants \\, having \\, the \\, good \\, degree= \\left[\\left[8, 0, 0, 0\\right], \\left[5, 2, 0, 0\\right], \\left[5, 0, 0, 1\\right], \\left[4, 1, 1, 0\\right], \\left[3, 0, 2, 0\\right], \\left[2, 4, 0, 0\\right], \\left[2, 2, 0, 1\\right], \\left[2, 0, 0, 2\\right], \\left[1, 3, 1, 0\\right], \\left[1, 1, 1, 1\\right], \\left[0, 2, 2, 0\\right], \\left[0, 0, 2, 1\\right]\\right]" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "exponents \\, of \\, monomials\\, forming \\, an \\, invertible \\, linear \\, system= \\left[\\left[16, 0, 0, 0, 0\\right], \\left[14, 1, 1, 0, 0\\right], \\left[13, 1, 2, 0, 0\\right], \\left[12, 1, 3, 0, 0\\right], \\left[12, 1, 1, 2, 0\\right], \\left[11, 1, 4, 0, 0\\right], \\left[10, 1, 5, 0, 0\\right], \\left[10, 1, 3, 2, 0\\right], \\left[9, 1, 6, 0, 0\\right], \\left[8, 1, 7, 0, 0\\right], \\left[8, 1, 5, 2, 0\\right], \\left[7, 1, 8, 0, 0\\right]\\right]" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "list \\, \\, of \\, \\, coefficients \\, \\, of \\, the \\, solutions= \\left(0,\\,0,\\,0,\\,0,\\,\\frac{1}{108},\\,0,\\,0,\\,\\frac{1}{36},\\,0,\\,-\\frac{1}{18},\\,\\frac{5}{216},\\,-\\frac{11}{8}\\right)" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "number \\, of \\, monomials \\, gone \\, through= 616" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "SolutionSigma8=Sigmadecomp(8)\n", "#WARNING : computation approximately three hours long." ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "The algorithm thus obtained the following relation \n", "$$\n", "\\Sigma_8 = \\frac{1}{2^2 \\cdot 3^3} h_4^3 h_{10}^2 + \\frac{1}{2^2 \\cdot 3^2} h_4^2 h_{12}^2 - \\frac{1}{2 \\cdot 3^2} h_4 h_6 h_{10} h_{12} + \\frac{5}{2^3 \\cdot 3^3} h_6^2 h_{10}^2 - \\frac{11}{2^3} h_{10}^2 h_{12}.\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To compute $\\Sigma_9$, we will try some tricks as its expansion in $y_0, \\cdots, y_4$ is naturally quite sparse given its definition. We make the bet that the only monomials in $h_4,h_6,h_{10}$ and $h_{12}$ appearing in $\\Sigma_9$ have multiplicity at least 2 on $h_{10}$ and $h_{12}$ combined (as is already the case for $\\Sigma_9$). We then slightly modify our definition of **Sigmadecomp** in a modified function **Sigmadecompmod** to filter by these monomials, and we also precompute the square of $h_{10}$, $h_{12}$, $h_4$, $h_6$ and $h_{10} h_{12}$ in the hope of winning some time. The function **Igusapowfilt** filters such powers of product of Igusa invariants. Given the already long time needed, we inserted the check of the relations inside the algorithm : it returns 'result confirmed' if the relation holds." ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def Igusapowfilt(n):\n", " L=[]\n", " for i in [0..n/4]:\n", " for j in [0..(n - 4*i)]:\n", " for k in [0..(n - 4*i - 6*j)]:\n", " for l in [0..n - 4*i - 6*j - 10*k]:\n", " if ((n==4*i + 6*j + 10*k + 12*l) and (k+l>1)):\n", " L.append([i,j,k,l])\n", " L.reverse()\n", " return L" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def Sigmadecompopt(j):\n", "# Step 1 : \n", " L=Igusapowfilt(4*j)\n", " affiche(L,'monomials \\, in \\, Igusa \\, invariants \\, with \\, total \\, degree \\, at \\, least \\, two \\, in \\, h_{10},h_{12}')\n", " l=len(L)\n", " liste_prod=[0 for i in [0..l-1]]\n", " liste_vect=matrix(QQ,l,l)\n", " liste_exp=[[0,0,0,0,0] for i in [0..l-1]]\n", " liste_indices_pivots=[1 for i in [0..l-1]]\n", " liste_coeffs_Sigma=[0 for i in [0..l-1]]\n", "# Step 2 : computation of all the products, and of the symmetric polynomial\n", " for i in [0..l-1]:\n", " liste_prod[i] = prodhrednew(L[i])\n", " print 'product computed'\n", " Sigma=Sigmared(j)\n", " print 'Symmetric polynomial computed'\n", "# Step 3 (was not necessary with Igusapow) : figure out the highest monomial appearing in of the products. \n", " runexp=[2*j,0,0,0,0]\n", " test=True\n", " indice_pivot=0\n", " while test:\n", " runexp=next_monomial_same_degree(runexp)\n", " c0=runexp\n", " c1=runexp\n", " c2=runexp\n", " c3=runexp\n", " c4=runexp\n", " while (indice_pivot0:\n", " test=False\n", " liste_indices_pivots=indice_pivot\n", " else:\n", " indice_pivot=indice_pivot+1\n", " if indice_pivot==l:\n", " indice_pivot=0 \n", " liste_coeffs_Sigma=Sigma[c0,c1,c2,c3,c4]\n", " affiche (runexp,'initial exponent')\n", "# Step 4 : Gauss pivot until a system of rank l is obtained.\n", " r=1\n", " liste_vect[:,0] = vector([(liste_prod[i][c0,c1,c2,c3,c4]) for i in [0..l-1]])\n", " liste_exp=runexp\n", " monomes_parcourus=1\n", " while ((r" ], "text/plain": [ "monomials \\, in \\, Igusa \\, invariants \\, with \\, total \\, degree \\, at \\, least \\, two \\, in \\, h_{10},h_{12}= \\left[\\left[4, 0, 2, 0\\right], \\left[3, 0, 0, 2\\right], \\left[2, 1, 1, 1\\right], \\left[1, 2, 2, 0\\right], \\left[1, 0, 2, 1\\right], \\left[0, 2, 0, 2\\right], \\left[0, 1, 3, 0\\right], \\left[0, 0, 0, 3\\right]\\right]" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "product computed\n", "product computed\n", "product computed\n", "product computed\n", "product computed\n", "product computed\n", "product computed\n", "product computed\n", "Symmetric polynomial computed\n" ] }, { "data": { "text/html": [ "" ], "text/plain": [ "initial exponent= \\left[12, 1, 5, 0, 0\\right]" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "list \\, of \\, powers \\, of \\, Igusa \\, invariants \\, having \\, the \\, good \\, degree= \\left[\\left[4, 0, 2, 0\\right], \\left[3, 0, 0, 2\\right], \\left[2, 1, 1, 1\\right], \\left[1, 2, 2, 0\\right], \\left[1, 0, 2, 1\\right], \\left[0, 2, 0, 2\\right], \\left[0, 1, 3, 0\\right], \\left[0, 0, 0, 3\\right]\\right]" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "exponents \\, of \\, monomials\\, forming \\, an \\, invertible \\, linear \\, system= \\left[\\left[12, 1, 5, 0, 0\\right], \\left[11, 1, 6, 0, 0\\right], \\left[10, 1, 7, 0, 0\\right], \\left[10, 1, 5, 2, 0\\right], \\left[9, 1, 8, 0, 0\\right], \\left[9, 1, 6, 2, 0\\right], \\left[8, 1, 9, 0, 0\\right], \\left[7, 1, 10, 0, 0\\right]\\right]" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "list \\, \\, of \\, \\, coefficients \\, \\, of \\, the \\, solutions= \\left(0,\\,0,\\,0,\\,0,\\,-\\frac{5}{36},\\,0,\\,\\frac{7}{108},\\,\\frac{1}{27}\\right)" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "number \\, of \\, monomials \\, gone \\, through= 1061" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "result confirmed\n" ] }, { "data": { "text/html": [ "" ], "text/plain": [ "([[4, 0, 2, 0],\n", " [3, 0, 0, 2],\n", " [2, 1, 1, 1],\n", " [1, 2, 2, 0],\n", " [1, 0, 2, 1],\n", " [0, 2, 0, 2],\n", " [0, 1, 3, 0],\n", " [0, 0, 0, 3]],\n", " (0, 0, 0, 0, -5/36, 0, 7/108, 1/27))" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Sigmadecompopt(9)\n", "#WARNING : computation approximately four hours long." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "So we have obtained (under the hypothesis that only the above monomials in Igusa invariants appeared in $\\Sigma_9$) that \n", "$$\n", "\\Sigma_9 = - \\frac{5}{2^2 \\cdot 3^2} h_4 h_{10}^2 h_{12} + \\frac{7}{2^2 \\cdot 3^3} h_6 h_{10}^3 + \\frac{1}{3^3} h_{12}^3.\n", "$$" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "Finally, in an obvious way by its definition, we have \n", "$$\n", "\\Sigma_{10} = \\frac{1}{2^4} h_{10}^4\n", "$$\n", "(mind our normalization of $h_{10}$)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We thus have obtained the expressions of all of the $\\Sigma_i$ with these algorithms, in a total computation time of the order of 10 hours. It might be interesting to devise a way to more efficiently obtain such relations, maybe with the use of Fourier expansions..." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "SageMath 7.2", "language": "", "name": "sagemath" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.10" } }, "nbformat": 4, "nbformat_minor": 0 }