diff --git a/DeformacionGenerica.ipynb b/DeformacionGenerica.ipynb index 9213037..cd9ffba 100644 --- a/DeformacionGenerica.ipynb +++ b/DeformacionGenerica.ipynb @@ -354,7 +354,7 @@ ], "metadata": { "kernelspec": { - "display_name": "SageMath 10.4.rc0", + "display_name": "SageMath 10.4.rc1", "language": "sage", "name": "sagemath-devel" }, diff --git a/DeformacionGenerica0.ipynb b/DeformacionGenerica0.ipynb index 5123f8b..7c82f40 100644 --- a/DeformacionGenerica0.ipynb +++ b/DeformacionGenerica0.ipynb @@ -1838,7 +1838,7 @@ ], "metadata": { "kernelspec": { - "display_name": "SageMath 10.4.rc3", + "display_name": "SageMath 10.5.beta3", "language": "sage", "name": "sagemath-devel" }, @@ -1852,7 +1852,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.4" + "version": "3.12.5" } }, "nbformat": 4, diff --git a/EjemplosGenerales.ipynb b/EjemplosGenerales.ipynb index aa38823..eef641a 100644 --- a/EjemplosGenerales.ipynb +++ b/EjemplosGenerales.ipynb @@ -673,7 +673,7 @@ ], "metadata": { "kernelspec": { - "display_name": "SageMath 10.3.rc4", + "display_name": "SageMath 10.4.beta6", "language": "sage", "name": "sagemath-devel" }, @@ -687,7 +687,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.1" + "version": "3.12.3" } }, "nbformat": 4, diff --git a/Mult3.pdf b/Mult3.pdf index f02383a..b2c0724 100644 Binary files a/Mult3.pdf and b/Mult3.pdf differ diff --git a/Mult3.tex b/Mult3.tex index 43b4554..08a324c 100644 --- a/Mult3.tex +++ b/Mult3.tex @@ -391,14 +391,17 @@ $$ \prod_{i=1}^n h_i^{2} \prod_{j=1}^m k_j^3 \left ( \prod_{i=1}^n h_i^{3n_i-2} \begin{proposition} -The singular point is isolated if and only if the disciminant $D_zF$ is reduced. +The singular point is isolated if and only if the discriminant $D_zF$ is reduced. \end{proposition} +\noindent \textcolor{red}{Proof. Ask Enrique.} -\begin{proposition}\label{prop.non-deg} -The monic Weierstrass polynomial $z^3 -3b_2z + 2b_3$ is non degenerate unless $M_1(c_1+A)$ and $b_3 = M_2(c_2 + B)$ with $M_1^3 = M_2^2$ and \textcolor{red}{$2c_1=3c_2$} + +\begin{proposition}\label{prop.non-deg} Let $b_2, b_3 \in \CC[[x, y]]$ with $b_2(0), b_3(0) = 0$. Let us write $b_2= M_2(c_2+A)$ and $b_3 = M_3(c_3 + B)$ with $M_2, M_3 \in \CC[x,y]$ (monic) monomials, $c_2, c_3 \in \CC^\ast$ and $A, B \in \CC[[x,y]]$ such that $A(0), B(0) = 0$. +The monic Weierstrass polynomial $z^3 -3b_2z + 2b_3$ is non degenerate unless $(c_2M_2)^3 = (c_3M_3)^2$. \end{proposition} +\noindent \textcolor{blue}{Proof. The Newton polyhedron of $z^3 -3b_2z + 2b_3$ can be 2-dimensional, polygonal with two segments or polygonal with a unique segment. In the two first cases, it is non degenerate. The compact faces of the Newton polyhedron of $z^3 -3b_2z + 2b_3$ lie on a segment if and only if $(M_2)^3 = (M_3)^2$. The condition of $z^3 -3b_2z + 2b_3$ being non degenerate is equivalent to $z^3 -3b_2z + 2b_3 \in \CC[z]$ having a double root. Notice a triple root is not possible because the degree 2 monomial is zero. Assume that $z^3 -3b_2z + 2b_3 =(z-a)^2(z-b)$ for some $a, b \in \CC^\ast$. Equivalently, we have $2a+b=0$, and therefor $c_2=(\frac{b}{2})^2}$ and $c_3=(\frac{-b}{2})^3$.} \section{Jung“s method for power series of multiplicity three } @@ -585,8 +588,8 @@ N^\Delta_i& 25& {\bf 26}& {\bf 52}& {\bf 78}& {\bf 104}& {\bf 130}& {\bf 156}& { \hline \hline \nu_i&2&3&5&7&9&11&13&6&11\\ -\chi()&-11&1&-1&0&0&0&-2&1&-1\\ -E_i^2& -13& -2& -4& -2& -2& -2& -1&-2&-1\\ +\chi()&-13&1&-1&0&0&0&-2&1&-1\\ +E_i^2& -11& -2& -4& -2& -2& -2& -1&-2&-1\\ \hline \end{array}$$ @@ -967,8 +970,8 @@ In this case, the Newton polyhedra of $F$ contains a unique two dimensional comp \item If $M_1^3 = M_2^2$, the point corresponding to the monomial $M_1z$ lies in the unique dimensional compact face of the Newton polyhedron of $F$. The face equation is equal to -$$z^3 + c_1z + c_2.$$ -Therefore, $F$ is non degenerate with respect to its Newton polyhedron if and only if $3(c_1)^2 \ne 2(c_2)^3$. +$$z^3 -3 c_1z + 2 c_2.$$ +Therefore, $F$ is non degenerate with respect to its Newton polyhedron if and only if \textcolor{blue}{$(c_1)^3 \ne (c_2)^2$}. \begin{tikzpicture} @@ -1137,7 +1140,7 @@ $$J_{\check \tau_0}=\frac{2}{\nu_1(3m_2s + 2\nu_1+m_2)}$$ We remark that this case it is equivalent to $f=z(z^2 - x^{m_2})$. - \subsubsection{Third case $f= z^3 - x^{m_1}z^2 - x^{m_3}$ and $\omega = x^{\nu_1-1}dxdz$ such that $m_3 > m_1$} + \subsubsection{Third case $f= z^3 - x^{m_1}z^2 - x^{m_3}$ and $\omega = x^{\nu_1-1}dxdz$ such that $m_3 > 3 m_1$} Newton polyhedra has five compact faces: the 0-dimensional faces $\tau_0$ corresponding to the monomial $z^3$, $\tau_1$ corresponding to the monomial $x^{m_1}z^2$, and $\tau_2$ corresponding to the monomial $ x^{m_3}$, and the 1-dimensional faces $\sigma_1$ contained in the hyperplanes $$p + m_1r = 3m_1$$ and $\sigma_2$ contained in the hyperplanes @@ -1179,9 +1182,9 @@ $$J_{\check \tau_0}=\frac{m_1}{\nu_1(3m_1s + \nu_1+m_1)}$$ Similarly we have - $$\zeta_f (t) = $$ - - We remark that this case is equivalent to $f=(z-x^{m_1})(z^2 - x^{m_3-m_2})$ + $$\zeta_f (t) = \frac{(t^{3m_1}-1)(t^{m_3}-1) }{(t-1)(t^3-1)} $$ + $$\zeta_f (t) = \frac{(t^{3m_1}-1)(t^{2m_3}-1) }{(t-1)(t^3-1)(t^{m_3}-1)}$$ + We remark that this case is equivalent to $f=(z-x^{m_1})(z^2 - x^{m_3-m_1})$ \subsection{Trinomial forms for strata $E^\circ_{i,j}$} @@ -1286,7 +1289,7 @@ $$Z(F_9, \omega_9)_{o_9}=Z(F_{9,31}, \omega_{9,31})_{o_{9,31}}= Z(F_{17}, \omega $$f_7=f_{15}=z^3 - x^{78}, \quad f_{7,33}=f_{15,34}=z^3 - x^{52}z + x^{78}y,$$ and $$\omega_7=\omega_{15}=\omega_{7,33}=\omega_{15,34}= x^{13}yzdxdydz,$$ From the formulas given in the previous section; we have -$$Z(F_7, \omega_7)_{o_7}=Z(F_{7,33}, \omega_{7,33})_{o_{7,33}}= Z(F_{15}, \omega_{15})_{o_{15}}=Z(F_{15,34}, \omega_{15,34})_{o_{15,34}} = \frac{1}{26(s^2 +3/2 s + 1/2}$$ +$$Z(F_7, \omega_7)_{o_7}=Z(F_{7,33}, \omega_{7,33})_{o_{7,33}}= Z(F_{15}, \omega_{15})_{o_{15}}=Z(F_{15,34}, \omega_{15,34})_{o_{15,34}} = \frac{1}{26(s^2 +3/2 s + 1/2}.$$ \end{example} \subsection{Second reduction: Recursive elimination of exceptional $(-1)$-curve not intersecting the strict transform of the discrimiant} @@ -1296,6 +1299,9 @@ $$Z(F_7, \omega_7)_{o_7}=Z(F_{7,33}, \omega_{7,33})_{o_{7,33}}= Z(F_{15}, \omega \begin{proposition}\label{red2} \end{proposition} + \begin{example} The Proposition \ref{red2} can be applied twice to eliminate the curves $E_9$ and $E_8$. First, $E_9$ is an exceptional $(-1)$-curve that does not intersect the strict transform of the discriminant, and $E_8$ is an exceptional with $E_8^2=-2$ After blowing down $E_9$, the exceptional curve $E_8$ becomes a $(-1)$-curve. It does not intersect the strict transform of the discriminant. + \end{example} + \subsection{Third reduction: $\QQ$-resolution of the discriminant} diff --git a/PruebasDeformaciones.ipynb b/PruebasDeformaciones.ipynb index 36e108c..8660252 100644 --- a/PruebasDeformaciones.ipynb +++ b/PruebasDeformaciones.ipynb @@ -18,8 +18,8 @@ }, { "cell_type": "code", - "execution_count": 2, - "id": "cad50def-ecb8-403f-b50c-ce026fbd216d", + "execution_count": null, + "id": "fdc11d23-4114-49ef-828a-b7a165169c46", "metadata": {}, "outputs": [], "source": [ @@ -28,8 +28,8 @@ }, { "cell_type": "code", - "execution_count": 5, - "id": "5ec9dd77-8118-4439-b8cb-4c475a2a645e", + "execution_count": 14, + "id": "b67cebe5-4b5a-46be-9055-9ecbdecf96f1", "metadata": {}, "outputs": [ { @@ -38,7 +38,7 @@ "((0, 0, 0, 0, 0, 0, 1), (0, 0, 4, 0, 0, 0, 0), (0, 0, 0, 0, 0, 0, 3))" ] }, - "execution_count": 5, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } @@ -53,27 +53,53 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 13, + "id": "dbf2120c-5214-48e1-a93f-a5079753d5f5", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "((0, 0, 0, 0, 1, 0, 0), (0, 0, 0, 1, 1, 0, 0), (0, 0, 0, 0, 1, 0, 2))" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Vfa, Vga, Vda = [vector(QQ, 7) for i in (1, 2, 3)]\n", + "Vfa[4] = Vga[3] = Vga[4] = Vda[4] = 1\n", + "Vda[6] = 2\n", + "Vfa, Vga, Vda" + ] + }, + { + "cell_type": "code", + "execution_count": 15, "id": "c5104650-44eb-4c9c-b016-c34994f72f38", "metadata": {}, "outputs": [], "source": [ - "n, Nf, Ng, Nd, Nhs, Nks, euler, nus, pols = trinomiales_general(A, Vf, Vg, (), (), Vd, total=False)" + "n, Nf, Ng, Nd, Nhs, Nks, euler, nus, pols = trinomiales_general(A, Vf, Vg, (), (), Vd, total=False)\n", + "na, Nfa, Nga, Nda, Nhsa, Nksa, eulera, nusa, polsa = trinomiales_general(A, Vfa, Vga, (), (), Vda, total=False)" ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 16, "id": "8dccac88-2fa3-4365-990a-2571f643b9dc", "metadata": {}, "outputs": [], "source": [ - "zetatop, zetamon, dic = zetas(n, pols, info=True)" + "zetatop, zetamon, dic = zetas(n, pols, info=True)\n", + "zetatopa, zetamona, dica = zetas(na, polsa, info=True)" ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 17, "id": "097214a4-61e4-4939-bad0-4e5b3c8ac716", "metadata": {}, "outputs": [ @@ -81,16 +107,16 @@ "data": { "text/plain": [ "((-41/168) * (s + 16/21)^-1 * (s + 19/24)^-1 * (s + 1)^-1 * (s^2 - 283/123*s - 304/123),\n", - " {1: 1, 2: 1, 6: 1, 4: 1, 3: 1, 12: 1, 8: 1, 7: 1, 24: 1, 21: 1})" + " (-43/175) * (s + 16/21)^-1 * (s + 4/5)^-1 * (s + 1)^-1 * (s^2 - 292/129*s - 320/129))" ] }, - "execution_count": 8, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "zetatop.factor(), dic" + "zetatop.factor(), zetatopa.factor()" ] }, { @@ -129,7 +155,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 8, "id": "558ef7c7-39cf-47bf-b224-479f1ff365d4", "metadata": {}, "outputs": [ @@ -429,27 +455,6 @@ " print(\"=======================\")" ] }, - { - "cell_type": "code", - "execution_count": 26, - "id": "8f5e2324-c385-4a99-a4a4-96cc9aa35c12", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(z^3 + x^8*z^2 + x^24*y, (11, 1, 1), 3)" - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pols[6, 'd']" - ] - }, { "cell_type": "code", "execution_count": 27, @@ -678,6 +683,377 @@ "dic, dic2" ] }, + { + "cell_type": "code", + "execution_count": 85, + "id": "1eda8668-939a-49ff-9741-eecb16b95c29", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 85, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "A2 = A1.matrix_from_rows_and_columns([0..5], [0..5])\n", + "A2[4, 5] = A2[5, 4] = 1\n", + "#A1[4, 6] = A1[6, 4] = A1[5, 6] = A1[6, 5] = 1\n", + "#A1[4, 4] = -3\n", + "A2[4, 4] = -2\n", + "A2[5, 5] = -1\n", + "A2.det()" + ] + }, + { + "cell_type": "code", + "execution_count": 86, + "id": "f79af679-b261-4e6f-9dcb-5775bccb1c8c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "((0, 0, 0, 0, 1, 0), (0, 0, 0, 1, 1, 0), (0, 0, 0, 0, 1, 2))" + ] + }, + "execution_count": 86, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Vf, Vg, Vd = [vector(QQ, 6) for i in (1, 2, 3)]\n", + "Vf[4] = Vg[3] = Vg[4] = Vd[4] = 1\n", + "Vd[5] = 2\n", + "Vf, Vg, Vd" + ] + }, + { + "cell_type": "code", + "execution_count": 87, + "id": "f4f2d497-55d6-42cc-a3c1-6ee815579be8", + "metadata": {}, + "outputs": [], + "source": [ + "n2b, Nf2b, Ng2b, Nd2b, Nhs2b, Nks2b, euler2b, nus2b, pols2b = trinomiales_general(A2, Vf, Vg, (), (), Vd, total=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 88, + "id": "6d1f647d-c103-4ffc-97da-bdcac4e0625e", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(2, 4, 6, 7, 14, 14)\n", + "(3, 6, 9, 11, 21, 21)\n", + "(6, 12, 18, 21, 42, 44)\n" + ] + } + ], + "source": [ + "print(Nf2b)\n", + "print(Ng2b)\n", + "print(Nd2b)" + ] + }, + { + "cell_type": "code", + "execution_count": 89, + "id": "27a012cc-2e37-4545-98a4-7f1ffd7f8566", + "metadata": {}, + "outputs": [], + "source": [ + "zetatop2b, zetamon2b, dic2b = zetas(n2b, pols2b, info=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 90, + "id": "696efeb0-7276-449a-903d-c2e02cdb16f9", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "((-41/168) * (s + 16/21)^-1 * (s + 19/24)^-1 * (s + 1)^-1 * (s^2 - 283/123*s - 304/123),\n", + " (-39/161) * (s + 16/21)^-1 * (s + 18/23)^-1 * (s + 1)^-1 * (s^2 - 274/117*s - 32/13))" + ] + }, + "execution_count": 90, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "zetatop.factor(), zetatop2b.factor()" + ] + }, + { + "cell_type": "code", + "execution_count": 92, + "id": "7d299478-15d6-439a-a0ee-38557a6e303b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "({1: 1, 2: 1, 6: 1, 4: 1, 3: 1, 12: 1, 8: 1, 7: 1, 24: 1, 21: 1},\n", + " {1: 1, 7: 1, 21: 1, 23: 1})" + ] + }, + "execution_count": 92, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dic, dic2b" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "id": "d236b526-d636-455a-8030-301f39e27f96", + "metadata": {}, + "outputs": [], + "source": [ + "A = Matrix(8, [-2, 1, 0, 0, 0, 0, 0, 0, 1, -2, 1, 0, 0, 0, 0, 0, 0, 1, -3, 0, 1, 0, 0, 0, 0, 0, 0, -2, 1, 0, 0, 0, 0, 0, 1, 1, -2, 1, 0, 0, 0, 0, 0, 0, 1, -3, 0, 1, 0, 0, 0, 0, 0, 0, -2, 1, 0, 0, 0, 0, 0, 1, 1, -1])\n", + "A1 = A.matrix_from_rows_and_columns([0..6], [0..6])\n", + "A1[4, 5] = A1[5, 4] = 0\n", + "A1[4, 6] = A1[6, 4] = A1[5, 6] = A1[6, 5] = 1\n", + "A1[4, 4] = -3\n", + "A1[5, 5] = -2\n", + "A1[6, 6] = -1" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "id": "0f6ae8eb-46d6-4d8b-85ff-8b93432f88f5", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "((0, 0, 0, 0, 1, 0, 0), (0, 0, 0, 1, 1, 0, 0), (0, 0, 0, 0, 1, 0, 1))" + ] + }, + "execution_count": 73, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Vf, Vg, Vd = [vector(QQ, 7) for i in (1, 2, 3)]\n", + "Vf[4] = Vg[3] = Vg[4] = Vd[4] = Vd[6] = 1\n", + "Vf, Vg, Vd" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "id": "5d18a75f-7a9b-4ada-b28f-f79e9fb69292", + "metadata": {}, + "outputs": [], + "source": [ + "n2a, Nf2a, Ng2a, Nd2a, Nhs2a, Nks2a, euler2a, nus2a, pols2a = trinomiales_general(A1, Vf, Vg, (), (), Vd, total=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "id": "d3af6603-a5ca-45da-8122-5e0973563b88", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(2, 4, 6, 7, 14, 14, 28)\n", + "(3, 6, 9, 11, 21, 21, 42)\n", + "(6, 12, 18, 21, 42, 43, 86)\n" + ] + } + ], + "source": [ + "print(Nf2a)\n", + "print(Ng2a)\n", + "print(Nd2a)" + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "id": "4412f281-4696-4dc1-91ed-0069b58bffa0", + "metadata": {}, + "outputs": [], + "source": [ + "zetatop2a, zetamon2a, dic2a = zetas(n2a, pols2a, info=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "id": "c39bf1b5-1ed0-4d84-8e81-5f4e4bf3fd9b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "((-41/168) * (s + 16/21)^-1 * (s + 19/24)^-1 * (s + 1)^-1 * (s^2 - 283/123*s - 304/123),\n", + " (-37/154) * (s + 16/21)^-1 * (s + 17/22)^-1 * (s + 1)^-1 * (s^2 - 265/111*s - 272/111))" + ] + }, + "execution_count": 78, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "zetatop.factor(), zetatop2a.factor()" + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "id": "441864d8-5be6-4570-8a30-b9612c0ebcb1", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "({1: 1, 2: 1, 6: 1, 4: 1, 3: 1, 12: 1, 8: 1, 7: 1, 24: 1, 21: 1},\n", + " {1: 1, 2: 1, 7: 1, 22: 1, 11: 1, 21: 1})" + ] + }, + "execution_count": 80, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dic, dic2a" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "faed71a4-b703-4416-8c86-ce2d989999b0", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "((0, 0, 0, 0, 1, 0, 0, 0), (0, 0, 0, 1, 1, 0, 0, 0), (0, 0, 0, 0, 1, 0, 0, 1))" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Vf, Vg, Vd = [vector(QQ, 8) for i in (1, 2, 3)]\n", + "Vf[4] = Vg[3] = Vg[4] = Vd[4] = Vd[7] = 1\n", + "Vf, Vg, Vd" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "aa0267bd-3f48-4167-94f4-b6079b77cc46", + "metadata": {}, + "outputs": [], + "source": [ + "n2, Nf2, Ng2, Nd2, Nhs2, Nks2, euler2, nus2, pols2 = trinomiales_general(A, Vf, Vg, (), (), Vd, total=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "id": "f819b1f2-2342-4951-99ee-c62a978d2308", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(6, 12, 18, 21, 42, 42, 42, 84)\n", + "(6, 12, 18, 22, 42, 42, 42, 84)\n", + "(6, 12, 18, 21, 42, 44, 45, 90)\n" + ] + } + ], + "source": [ + "print(3 * Nf2)\n", + "print(2 * Ng2)\n", + "print(Nd2)" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "id": "1a340b4a-c984-46e1-a708-0c962a0912bc", + "metadata": {}, + "outputs": [], + "source": [ + "zetatop2, zetamon2, dic2 = zetas(n2, pols2, info=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "id": "e737e117-0285-429e-8800-eab63eff90fc", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "((-41/168) * (s + 16/21)^-1 * (s + 19/24)^-1 * (s + 1)^-1 * (s^2 - 283/123*s - 304/123),\n", + " (-41/168) * (s + 16/21)^-1 * (s + 19/24)^-1 * (s + 1)^-1 * (s^2 - 283/123*s - 304/123))" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "zetatop.factor(), zetatop2.factor()" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "id": "535f3607-b56b-4557-b60b-28889a8795c4", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "({1: 1, 2: 1, 6: 1, 4: 1, 3: 1, 12: 1, 8: 1, 7: 1, 24: 1, 21: 1},\n", + " {1: 1, 2: 1, 6: 1, 4: 1, 3: 1, 12: 1, 8: 1, 7: 1, 24: 1, 21: 1})" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dic, dic2" + ] + }, { "cell_type": "code", "execution_count": 43, @@ -768,24 +1144,24 @@ }, { "cell_type": "code", - "execution_count": 48, + "execution_count": 49, "id": "0870be50-c79c-48c9-80b7-24bfd6914737", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "((-41/168) * (s + 16/21)^-1 * (s + 19/24)^-1 * (s + 1)^-1 * (s^2 - 283/123*s - 304/123),\n", + "((-5/21) * (s + 16/21)^-1 * (s + 1)^-1 * (s - 16/5),\n", " (-5/21) * (s + 16/21)^-1 * (s + 1)^-1 * (s - 16/5))" ] }, - "execution_count": 48, + "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "zetatop.factor(), zetatop3.factor()" + "zetatop1.factor(), zetatop3.factor()" ] }, { @@ -861,7 +1237,7 @@ ], "metadata": { "kernelspec": { - "display_name": "SageMath 10.4.beta9", + "display_name": "SageMath 10.4.rc1", "language": "sage", "name": "sagemath-devel" }, diff --git a/UnLado.ipynb b/UnLado.ipynb index d0cd61d..498c895 100644 --- a/UnLado.ipynb +++ b/UnLado.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 113, + "execution_count": 1, "id": "4778e32e-f561-4e4d-b63a-d4d60f91abde", "metadata": {}, "outputs": [], @@ -12,7 +12,7 @@ }, { "cell_type": "code", - "execution_count": 115, + "execution_count": 2, "id": "f042e81b-abf8-4e09-bc67-a19d778033e6", "metadata": {}, "outputs": [], @@ -22,7 +22,7 @@ }, { "cell_type": "code", - "execution_count": 116, + "execution_count": 7, "id": "0733b364-bbf6-486c-a5d1-e72c7a5d48ca", "metadata": {}, "outputs": [], @@ -34,7 +34,7 @@ }, { "cell_type": "code", - "execution_count": 117, + "execution_count": 8, "id": "b81e1db9-883e-4a03-a38c-1ca296c9d25b", "metadata": {}, "outputs": [], @@ -45,7 +45,7 @@ }, { "cell_type": "code", - "execution_count": 118, + "execution_count": 9, "id": "f97fbf75-4da5-45db-8f66-cdccdd052326", "metadata": {}, "outputs": [], @@ -60,7 +60,7 @@ }, { "cell_type": "code", - "execution_count": 119, + "execution_count": 10, "id": "04072945-1ada-4d66-b44e-95318f073634", "metadata": {}, "outputs": [], @@ -70,7 +70,7 @@ }, { "cell_type": "code", - "execution_count": 120, + "execution_count": 11, "id": "d9834ff4-e09f-4cf9-abd0-9b1eea6ca033", "metadata": {}, "outputs": [ @@ -88,16 +88,32 @@ }, "metadata": {}, "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\\(\\displaystyle \\nu_{2}^{-1} \\cdot \\nu_{1}^{-1} \\cdot (3 \\mathit{ss} a_{2} + a_{2} + 3 \\nu_{2})^{-1} \\cdot (3 \\mathit{ss} a_{1} + a_{1} + 3 \\nu_{1})^{-1} \\cdot (3 \\mathit{ss} a_{1} a_{2} + a_{1} a_{2} + 3 a_{2} \\nu_{1} + 3 a_{1} \\nu_{2})\\)" + ], + "text/latex": [ + "$\\displaystyle \\nu_{2}^{-1} \\cdot \\nu_{1}^{-1} \\cdot (3 \\mathit{ss} a_{2} + a_{2} + 3 \\nu_{2})^{-1} \\cdot (3 \\mathit{ss} a_{1} + a_{1} + 3 \\nu_{1})^{-1} \\cdot (3 \\mathit{ss} a_{1} a_{2} + a_{1} a_{2} + 3 a_{2} \\nu_{1} + 3 a_{1} \\nu_{2})$" + ], + "text/plain": [ + "nu2^-1 * nu1^-1 * (3*ss*a2 + a2 + 3*nu2)^-1 * (3*ss*a1 + a1 + 3*nu1)^-1 * (3*ss*a1*a2 + a1*a2 + 3*a2*nu1 + 3*a1*nu2)" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ "vertical = cono3(e1, e2, e3, V1, nu) - cono3(Q1, Q2, e3, V1, nu)\n", - "show(vertical.subs(sb).factor())" + "show(vertical.subs(sb).factor())\n", + "show(vertical.factor())" ] }, { "cell_type": "code", - "execution_count": 121, + "execution_count": 13, "id": "fe5aa4f3-db61-4a38-a1d1-dd100d819937", "metadata": {}, "outputs": [ @@ -115,12 +131,28 @@ }, "metadata": {}, "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\\(\\displaystyle \\left(9\\right) \\cdot (3 \\mathit{ss} a_{2} + a_{2} + 3 \\nu_{2})^{-1} \\cdot (3 \\mathit{ss} a_{1} + a_{1} + 3 \\nu_{1})^{-1}\\)" + ], + "text/latex": [ + "$\\displaystyle \\left(9\\right) \\cdot (3 \\mathit{ss} a_{2} + a_{2} + 3 \\nu_{2})^{-1} \\cdot (3 \\mathit{ss} a_{1} + a_{1} + 3 \\nu_{1})^{-1}$" + ], + "text/plain": [ + "(9) * (3*ss*a2 + a2 + 3*nu2)^-1 * (3*ss*a1 + a1 + 3*nu1)^-1" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ "horizontal = cono3(Q1, Q2, e3, V0, nu)\n", "horizontal = (horizontal.numerator() / 9) / (horizontal.denominator() / 9)\n", - "show(horizontal.subs(sb).factor())" + "show(horizontal.subs(sb).factor())\n", + "show(horizontal.factor())" ] }, { @@ -151,7 +183,7 @@ }, { "cell_type": "code", - "execution_count": 123, + "execution_count": 14, "id": "29605b7d-37f7-4f22-80bd-1694134cd9b7", "metadata": {}, "outputs": [ @@ -161,7 +193,7 @@ "[9/(alpha1*alpha2), 3*a2/(alpha1*alpha2), (-3*a1)/(alpha1*alpha2)]" ] }, - "execution_count": 123, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } @@ -172,7 +204,7 @@ }, { "cell_type": "code", - "execution_count": 124, + "execution_count": 15, "id": "83121ff8-547c-424b-b3ce-860a80f0541e", "metadata": {}, "outputs": [], @@ -182,7 +214,7 @@ }, { "cell_type": "code", - "execution_count": 125, + "execution_count": 16, "id": "b3963226-7397-4cb5-bdff-5382f74df8df", "metadata": {}, "outputs": [ @@ -192,7 +224,7 @@ "(3*a1/alpha1, 3*a1/alpha1, 3*a2/alpha2, 3*a2/alpha2, (a1 + 3*nu1)/alpha1)" ] }, - "execution_count": 125, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -203,7 +235,7 @@ }, { "cell_type": "code", - "execution_count": 126, + "execution_count": 17, "id": "36201bc7-a7e2-4c9e-a8e9-5865cb9686f9", "metadata": {}, "outputs": [], @@ -214,7 +246,7 @@ }, { "cell_type": "code", - "execution_count": 127, + "execution_count": 18, "id": "d77f48f5-2236-4cb6-a211-14f3623539c0", "metadata": {}, "outputs": [ @@ -241,7 +273,7 @@ }, { "cell_type": "code", - "execution_count": 128, + "execution_count": 19, "id": "c18631c1-f18a-48a2-8e9a-727d347ef89a", "metadata": {}, "outputs": [ @@ -259,12 +291,102 @@ }, "metadata": {}, "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\\(\\displaystyle \\left(-1\\right) \\cdot \\nu_{2}^{-1} \\cdot \\nu_{1}^{-1} \\cdot (\\mathit{ss} + 1)^{-1} \\cdot (3 \\mathit{ss} a_{2} + a_{2} + 3 \\nu_{2})^{-1} \\cdot (3 \\mathit{ss} a_{1} + a_{1} + 3 \\nu_{1})^{-1} \\cdot (3 \\mathit{ss} \\nu_{1} \\nu_{2} \\mathit{cd}^{2} - 3 \\mathit{ss}^{2} a_{1} a_{2} - 4 \\mathit{ss} a_{1} a_{2} - 3 \\mathit{ss} a_{2} \\nu_{1} - 3 \\mathit{ss} a_{1} \\nu_{2} - 9 \\mathit{ss} \\nu_{1} \\nu_{2} - a_{1} a_{2} - 3 a_{2} \\nu_{1} - 3 a_{1} \\nu_{2} - 9 \\nu_{1} \\nu_{2})\\)" + ], + "text/latex": [ + "$\\displaystyle \\left(-1\\right) \\cdot \\nu_{2}^{-1} \\cdot \\nu_{1}^{-1} \\cdot (\\mathit{ss} + 1)^{-1} \\cdot (3 \\mathit{ss} a_{2} + a_{2} + 3 \\nu_{2})^{-1} \\cdot (3 \\mathit{ss} a_{1} + a_{1} + 3 \\nu_{1})^{-1} \\cdot (3 \\mathit{ss} \\nu_{1} \\nu_{2} \\mathit{cd}^{2} - 3 \\mathit{ss}^{2} a_{1} a_{2} - 4 \\mathit{ss} a_{1} a_{2} - 3 \\mathit{ss} a_{2} \\nu_{1} - 3 \\mathit{ss} a_{1} \\nu_{2} - 9 \\mathit{ss} \\nu_{1} \\nu_{2} - a_{1} a_{2} - 3 a_{2} \\nu_{1} - 3 a_{1} \\nu_{2} - 9 \\nu_{1} \\nu_{2})$" + ], + "text/plain": [ + "(-1) * nu2^-1 * nu1^-1 * (ss + 1)^-1 * (3*ss*a2 + a2 + 3*nu2)^-1 * (3*ss*a1 + a1 + 3*nu1)^-1 * (3*ss*nu1*nu2*cd^2 - 3*ss^2*a1*a2 - 4*ss*a1*a2 - 3*ss*a2*nu1 - 3*ss*a1*nu2 - 9*ss*nu1*nu2 - a1*a2 - 3*a2*nu1 - 3*a1*nu2 - 9*nu1*nu2)" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ "prueba = horizontal - arista + vertical\n", "# prueba.numerator().variables() + prueba.denominator().variables()\n", - "show(prueba.subs(sb).factor())" + "show(prueba.subs(sb).factor())\n", + "show(prueba.factor())" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "5c36c8a4-f5f0-43d8-bbfc-35e889012f6e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\\(\\displaystyle 3 \\mathit{ss} \\nu_{1} \\nu_{2} \\mathit{cd}^{2} - 3 \\mathit{ss}^{2} a_{1} a_{2} - 4 \\mathit{ss} a_{1} a_{2} - 3 \\mathit{ss} a_{2} \\nu_{1} - 3 \\mathit{ss} a_{1} \\nu_{2} - 9 \\mathit{ss} \\nu_{1} \\nu_{2} - a_{1} a_{2} - 3 a_{2} \\nu_{1} - 3 a_{1} \\nu_{2} - 9 \\nu_{1} \\nu_{2}\\)" + ], + "text/latex": [ + "$\\displaystyle 3 \\mathit{ss} \\nu_{1} \\nu_{2} \\mathit{cd}^{2} - 3 \\mathit{ss}^{2} a_{1} a_{2} - 4 \\mathit{ss} a_{1} a_{2} - 3 \\mathit{ss} a_{2} \\nu_{1} - 3 \\mathit{ss} a_{1} \\nu_{2} - 9 \\mathit{ss} \\nu_{1} \\nu_{2} - a_{1} a_{2} - 3 a_{2} \\nu_{1} - 3 a_{1} \\nu_{2} - 9 \\nu_{1} \\nu_{2}$" + ], + "text/plain": [ + "3*ss*nu1*nu2*cd^2 - 3*ss^2*a1*a2 - 4*ss*a1*a2 - 3*ss*a2*nu1 - 3*ss*a1*nu2 - 9*ss*nu1*nu2 - a1*a2 - 3*a2*nu1 - 3*a1*nu2 - 9*nu1*nu2" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "uuu= (ss + 1) * ((3 * ss + 1) * a1 * a2 + 3 * (nu1 * a2 + nu2 * a1 + 3 * nu1 * nu2)) - 3 * nu1 * nu2 * cd^2 *ss\n", + "show(-uuu)" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "52254bac-4ce0-473f-a6c8-9853e4180df9", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "-3 \\mathit{ss} \\nu_{1} \\nu_{2} \\mathit{cd}^{2} + 3 \\mathit{ss}^{2} a_{1} a_{2} + 4 \\mathit{ss} a_{1} a_{2} + 3 \\mathit{ss} a_{2} \\nu_{1} + 3 \\mathit{ss} a_{1} \\nu_{2} + 9 \\mathit{ss} \\nu_{1} \\nu_{2} + a_{1} a_{2} + 3 a_{2} \\nu_{1} + 3 a_{1} \\nu_{2} + 9 \\nu_{1} \\nu_{2}" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "latex(uuu)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "b4f731bf-7872-4e7f-a8dc-f1a7666fcd31", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\\(\\displaystyle \\left(-1\\right) \\cdot \\nu_{1}^{-1} \\cdot (\\mathit{ss} + 1)^{-1} \\cdot (3 \\mathit{ss} a_{1} + a_{1} + 3 \\nu_{1})^{-1} \\cdot (\\mathit{ss} \\nu_{1} \\mathit{cd}^{2} - \\mathit{ss} a_{1} - 3 \\mathit{ss} \\nu_{1} - a_{1} - 3 \\nu_{1})\\)" + ], + "text/latex": [ + "$\\displaystyle \\left(-1\\right) \\cdot \\nu_{1}^{-1} \\cdot (\\mathit{ss} + 1)^{-1} \\cdot (3 \\mathit{ss} a_{1} + a_{1} + 3 \\nu_{1})^{-1} \\cdot (\\mathit{ss} \\nu_{1} \\mathit{cd}^{2} - \\mathit{ss} a_{1} - 3 \\mathit{ss} \\nu_{1} - a_{1} - 3 \\nu_{1})$" + ], + "text/plain": [ + "(-1) * nu1^-1 * (ss + 1)^-1 * (3*ss*a1 + a1 + 3*nu1)^-1 * (ss*nu1*cd^2 - ss*a1 - 3*ss*nu1 - a1 - 3*nu1)" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "show(prueba(a2=0, nu2=1).factor())" ] }, { @@ -944,9 +1066,9 @@ ], "metadata": { "kernelspec": { - "display_name": "SageMath 10.3.rc3", + "display_name": "SageMath 10.4.beta6", "language": "sage", - "name": "sagemath-310" + "name": "sagemath-devel" }, "language_info": { "codemirror_mode": { @@ -958,7 +1080,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.1" + "version": "3.12.3" } }, "nbformat": 4, diff --git a/deformaciones1.ipynb b/deformaciones1.ipynb index 0b24641..e623dc5 100644 --- a/deformaciones1.ipynb +++ b/deformaciones1.ipynb @@ -723,7 +723,7 @@ ], "metadata": { "kernelspec": { - "display_name": "SageMath 10.4.beta3", + "display_name": "SageMath 10.4.rc1", "language": "sage", "name": "sagemath-devel" }, @@ -737,7 +737,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.2" + "version": "3.12.3" } }, "nbformat": 4, diff --git a/deformaciones2.ipynb b/deformaciones2.ipynb index 2d44437..51d12ab 100644 --- a/deformaciones2.ipynb +++ b/deformaciones2.ipynb @@ -488,7 +488,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.2" + "version": "3.12.3" } }, "nbformat": 4, diff --git a/monomios.ipynb b/monomios.ipynb index ebb4331..db6c3e2 100644 --- a/monomios.ipynb +++ b/monomios.ipynb @@ -468,7 +468,7 @@ ], "metadata": { "kernelspec": { - "display_name": "SageMath 10.4.beta3", + "display_name": "SageMath 10.4.beta6", "language": "sage", "name": "sagemath-devel" }, @@ -482,7 +482,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.2" + "version": "3.12.3" } }, "nbformat": 4, diff --git a/suspension.ipynb b/suspension.ipynb index b136796..11d2345 100644 --- a/suspension.ipynb +++ b/suspension.ipynb @@ -987,7 +987,7 @@ ], "metadata": { "kernelspec": { - "display_name": "SageMath 10.4.beta3", + "display_name": "SageMath 10.4.beta4", "language": "sage", "name": "sagemath-devel" }, diff --git a/zetas_triples_trenzas.py b/zetas_triples_trenzas.py new file mode 100644 index 0000000..3724e38 --- /dev/null +++ b/zetas_triples_trenzas.py @@ -0,0 +1,458 @@ +def trinomiales_general(A, Vf, Vg, Vhs, Vd, total=True): + r""" + Return data necessary to compute the zeta functions of + a triple singularity defined by + + .. math:: + z^3 -3 \prod_{i=1}^h h_i^{n_i} f z^2 + + \prod_{i=1}^h h_i g, + + where :math:`f, g, h_i` are polynomials in two variables, + and :math:`n_i \geq 1`. + + We consider an embedded resolution of :math:`fg(f^3 - g^2)` with + a stratification of the exceptional divisor: + + - :math:`\check{E}_i`: the smooth part of the total divisor + + - :math:`E_i\cap E_j`: the double points of the divisor + + - :math:`E_i\cap \{f=0\}`: the intersections with the strict + transform of :math:`f` + + - :math:`E_i\cap \{g=0\}`: the intersections with the strict + transform of :math:`g` + + - :math:`E_i\cap \{f^3=g^2\}`: the intersections with the strict + transform of :math:`f^3-g^2` + + It is also possible to forget the strict transforms of :math:`f, g` + and even to consider only resolutions of :math:`f^3 - g^2`. + + INPUT: + + - ``A`` -- the incidence matrix of a resolution + + - ``Vf`` -- the vector with the intersection numbers of the strict + transform of :math:`f` with the divisors of the resolution + + - ``Vg`` -- the vector with the intersection numbers of the strict + transform of :math:`g` with the divisors of the resolution + + - ``Vhs`` -- a list of tuple whose elements are tuples `(h_i, n_i)` + + + - ``Vd`` -- the vector with the intersection numbers of the strict + transform of :math:`f^3 - g^2` with the divisors of the resolution + + - ``total`` -- boolean (default: ``True``), whether we consider also + the strata corresponding to the strict transforms of :math:`f, g`. + + OUTPUT: + + Polynomials :math:`z^3 + M_1 z + M_0` or :math:`z^3 + M_2 z^2 + M_0` are + assigned to each strata. The monomials are of the form :math:`x^k` for the + smooth parts of the divisors and :math:`x^k y^l` for the double points. + Each variable is associated to a divisor or to a strict transform + + - ``n`` -- the number of irreducible components of the exceptional divisor + + - ``Nf`` -- the vector in :math:`\mathbb{Z}^n` of the multiplicities for + the total transform of :math:`f` + + - ``Ng`` -- the vector in :math:`\mathbb{Z}^n` of the multiplicities for + the total transform of :math:`g` + + - ``Nhs`` -- a list of tuple whose elements are tuples, the first element + is the vector in :math:`\mathbb{Z}^n` of the multiplicities for + the total transform of :math:`h_i` and the second is :math:`n_i` + + - ``Nd`` -- the vector in :math:`\mathbb{Z}^n` of the multiplicities for + the total transform of :math:`f^3 - g^2` + + - ``euler`` -- the vector in :math:`\mathbb{Z}^n` of the Euler + characteristic of the smooth part of the strata. If ``total=True`` this + smooth part does not contain the intersections with total transform + of :math:`f, g` + + - ``nus`` -- the vector in :math:`\mathbb{Z}^n` of the canonical + multiplicities + + - ``pols`` -- a dictionary with keys ``(i, )``, ``(i, j)``, ``(i, 'f')`` + (if ``total=True``), ``(i, 'g')`` (if ``total=True``), and ``(i, 'd')`` + assigning the polynomial of the stratum (non-degenerated with respect + to its Newton polytope), the weights ``(nui, nuj, 1)`` coding + the form + :math:`x^{\nu_i-1}y^{\nu_j-1}\operatorname{d}\! x \operatorname{d}\! y \operatorname{d}\! z` + + EXAMPLES:: + + sage: R. = QQ[] + sage: f, g = (x, y) + sage: A = Matrix(QQ, 3, [-3, 0, 1, 0, -2, 1, 1, 1, -1]) + sage: Vf = vector(QQ, [1, 0, 0]) + sage: Vg = vector(QQ, [0, 1, 0]) + sage: Vd = vector(QQ, [0, 0, 1]) + sage: trinomiales_general(A, Vf, Vg, (), Vd) + (3, (1, 1, 2), (1, 2, 3), (2, 3, 6), (0, 0, -1), (2, 3, 5), + {(0, 'f'): (x + x*y*z + z^3, (2, 1, 1), 1), + (0, 2): (z^3 + x*y^3 + x*y^2*z, (2, 5, 1), 1), + (1, 'g'): (x*z + x^2*y + z^3, (3, 1, 1), 1), + (1, 2): (z^3 + x*y^2*z + x^2*y^3, (3, 5, 1), 1), + (2, 'd'): (x*z^2 + z^3 + x^3*y, (5, 1, 1), 1), + 0: (x + x*z + z^3, (2, 1, 1), 0), + 1: (x^2 + x*z + z^3, (3, 1, 1), 0), + 2: (x^3 + x^2*z + z^3, (5, 1, 1), -1)}) + sage: trinomiales(A, Vf, Vg, Vd, (), total=False) + (3, (1, 1, 2), (1, 2, 3), (2, 3, 6), (1, 1, -1), (2, 3, 5), + {(0, 2): (z^3 + x*y^3 + x*y^2*z, (2, 5, 1), 1), + (1, 2): (z^3 + x*y^2*z + x^2*y^3, (3, 5, 1), 1), + (2, 'd'): (x*z^2 + z^3 + x^3*y, (5, 1, 1), 1), + 0: (x + x*z + z^3, (2, 1, 1), 1), + 1: (x^2 + x*z + z^3, (3, 1, 1), 1), + 2: (x^3 + x^2*z + z^3, (5, 1, 1), -1)}) + """ + R = PolynomialRing(QQ, 'x, y, z', order='negdeglex') + x, y, z = R.gens() + n = A.nrows() + A1 = -A ** -1 + Nf, Ng, Nd = [A1 * N0 for N0 in (Vf, Vg, Vd)] + Nhs = [(A1 * N0, h) for N0, h in Vhs] + ch = len(Nhs) + NNf = Nf + sum(j * V0 for V0, j in Nhs) + NNg = Ng + sum(V0 for V0, j in Nhs) + NNd = Nd + 2 * sum(V0 for V0, j in Nhs) + diag = vector(A.diagonal()) + unos = vector(n * [1]) + if total: + VV = Vf + Vg + else: + VV = Vf.parent()(0) + resta = VV + Vd + sum(V0 for V0, m in Vhs) + euler = (-A + 2 * identity_matrix(n)) * unos + diag - resta + nus = A1 * (diag + 2 * unos) + unos + expos = {} + for j in range(n): + a, b = (NNf[j], NNg[j]) + eq = 3 * a == 2 * NNg[j] + nnd = min(3 * a, 2 * b) == NNd[j] + if nnd: + expos[j] = ((a, b), (a / 2, b), nus[j], eq, nnd) + else: + expos[j] = ((a, b), (a / 2, NNd[j] - b), nus[j], eq, nnd) + cadenas = ('d', ) + cadenash = tuple(('h', h) for h in range(ch)) + if total: + expos['f'] = ((1, 0), (0, 0), 1, False, True) + expos['g'] = ((0, 1), (0, 0), 1, False, True) + cadenas = ('f', 'g') + cadenas + expos['d'] = ((0, 0), (0, 1), 1, True, False) + for h, V0 in enumerate(Vhs): + expos['h', h] = ((V0[1], 1), (0, 0), 1, False, True) + pols = {} + for j in range(n): + if expos[j][-1]: + a, b = expos[j][0] + pols[j] = (z ** 3 + x ** a * z + x ** b, (expos[j][2], 1, 1), + euler[j]) + else: + a, b = expos[j][1] + pols[j] = (z ** 3 + x ** a * z ** 2 + x ** b, + (expos[j][2], 1, 1), euler[j]) + interdiv = [(i, j) for i, j in Combinations(n, 2) if A[i, j] != 0] + interstrict = [(i, j) for i in range(n) for j in cadenas + if eval('V' + j)[i] != 0] + interh = [(i, j) for i in range(n) for j in cadenash if Vhs[j[1]][0][i] != 0] + for i, j in interdiv + interstrict + interh: + if isinstance(j, str): + ep = eval('V' + j)[i] + else: + ep = 1 + eqi, nndi = expos[i][-2:] + eqj, nndj = expos[j][-2:] + nd = eqi and eqj and not (nndi and nndj) + if not nd: + ai, bi = expos[i][0] + aj, bj = expos[j][0] + pols[i, j] = (z ** 3 + x ** ai * y ** aj * z + x ** bi * y ** bj, + (expos[i][2], expos[j][2], 1), ep) + else: + ai, bi = expos[i][1] + aj, bj = expos[j][1] + pols[i, j] = (z ** 3 + x ** ai * y ** aj * z ** 2 + + x ** bi * y ** bj, (expos[i][2], expos[j][2], 1), ep) + return n, Nf, Ng, Nd, Nhs, euler, nus, pols + +def exp_trenza_dis(tau): + B = tau.parent() + m = tau.exponent_sum() + a, b = m.quo_rem(6) + no = False + while not no: + no = bool(tau.conjugating_braid(B.delta()**(2 * a) * B.gen(0)**b)) + if not no: + a, b = a - 1, b + 6 + return (2 * a, None, 3 * a + b) + +def exp_trenza(tau): + B = tau.parent() + m = tau.exponent_sum() + if m.gcd(6) == 1: + return exp_trenza_dis(tau) + elif m.gcd(6) == 3: + polo = bool(tau.conjugating_braid(B.delta()**(m / 3))) + if polo: + return (None, m / 3, None) + else: + return exp_trenza_dis(tau) + elif m.gcd(6) == 2: + cero = bool(tau.conjugating_braid(B([1, 2])**(m / 2))) + if cero: + return (None, None, m / 2) + else: + return exp_trenza_dis(tau) + else: + ct = bool(tau.conjugating_braid(B.delta()**(m / 3))) + if ct: + return (m / 6, m / 3, m / 2) + else: + return exp_trenza_dis(tau) + + + + +def trinomiales_trenza(A, trenzas, Vhs, Vd): + r""" + Return data necessary to compute the zeta functions of + a triple singularity defined by + + .. math:: + z^3 -3 \prod_{i=1}^h h_i^{n_i} f z^2 + + \prod_{i=1}^h h_i g, + + where :math:`f, g, h_i` are polynomials in two variables, + and :math:`n_i \geq 1`. + + We consider an embedded resolution of :math:`fg(f^3 - g^2)` with + a stratification of the exceptional divisor: + + - :math:`\check{E}_i`: the smooth part of the total divisor + + - :math:`E_i\cap E_j`: the double points of the divisor + + - :math:`E_i\cap \{f=0\}`: the intersections with the strict + transform of :math:`f` + + - :math:`E_i\cap \{g=0\}`: the intersections with the strict + transform of :math:`g` + + - :math:`E_i\cap \{f^3=g^2\}`: the intersections with the strict + transform of :math:`f^3-g^2` + + It is also possible to forget the strict transforms of :math:`f, g` + and even to consider only resolutions of :math:`f^3 - g^2`. + + INPUT: + + - ``A`` -- the incidence matrix of a resolution + + - ``Vf`` -- the vector with the intersection numbers of the strict + transform of :math:`f` with the divisors of the resolution + + - ``Vg`` -- the vector with the intersection numbers of the strict + transform of :math:`g` with the divisors of the resolution + + - ``Vhs`` -- a list of tuple whose elements are tuples `(h_i, n_i)` + + + - ``Vd`` -- the vector with the intersection numbers of the strict + transform of :math:`f^3 - g^2` with the divisors of the resolution + + - ``total`` -- boolean (default: ``True``), whether we consider also + the strata corresponding to the strict transforms of :math:`f, g`. + + OUTPUT: + + Polynomials :math:`z^3 + M_1 z + M_0` or :math:`z^3 + M_2 z^2 + M_0` are + assigned to each strata. The monomials are of the form :math:`x^k` for the + smooth parts of the divisors and :math:`x^k y^l` for the double points. + Each variable is associated to a divisor or to a strict transform + + - ``n`` -- the number of irreducible components of the exceptional divisor + + - ``Nf`` -- the vector in :math:`\mathbb{Z}^n` of the multiplicities for + the total transform of :math:`f` + + - ``Ng`` -- the vector in :math:`\mathbb{Z}^n` of the multiplicities for + the total transform of :math:`g` + + - ``Nhs`` -- a list of tuple whose elements are tuples, the first element + is the vector in :math:`\mathbb{Z}^n` of the multiplicities for + the total transform of :math:`h_i` and the second is :math:`n_i` + + - ``Nd`` -- the vector in :math:`\mathbb{Z}^n` of the multiplicities for + the total transform of :math:`f^3 - g^2` + + - ``euler`` -- the vector in :math:`\mathbb{Z}^n` of the Euler + characteristic of the smooth part of the strata. If ``total=True`` this + smooth part does not contain the intersections with total transform + of :math:`f, g` + + - ``nus`` -- the vector in :math:`\mathbb{Z}^n` of the canonical + multiplicities + + - ``pols`` -- a dictionary with keys ``(i, )``, ``(i, j)``, ``(i, 'f')`` + (if ``total=True``), ``(i, 'g')`` (if ``total=True``), and ``(i, 'd')`` + assigning the polynomial of the stratum (non-degenerated with respect + to its Newton polytope), the weights ``(nui, nuj, 1)`` coding + the form + :math:`x^{\nu_i-1}y^{\nu_j-1}\operatorname{d}\! x \operatorname{d}\! y \operatorname{d}\! z` + + EXAMPLES:: + + sage: R. = QQ[] + sage: f, g = (x, y) + sage: A = Matrix(QQ, 3, [-3, 0, 1, 0, -2, 1, 1, 1, -1]) + sage: Vf = vector(QQ, [1, 0, 0]) + sage: Vg = vector(QQ, [0, 1, 0]) + sage: Vd = vector(QQ, [0, 0, 1]) + sage: trinomiales_general(A, Vf, Vg, (), Vd) + (3, (1, 1, 2), (1, 2, 3), (2, 3, 6), (0, 0, -1), (2, 3, 5), + {(0, 'f'): (x + x*y*z + z^3, (2, 1, 1), 1), + (0, 2): (z^3 + x*y^3 + x*y^2*z, (2, 5, 1), 1), + (1, 'g'): (x*z + x^2*y + z^3, (3, 1, 1), 1), + (1, 2): (z^3 + x*y^2*z + x^2*y^3, (3, 5, 1), 1), + (2, 'd'): (x*z^2 + z^3 + x^3*y, (5, 1, 1), 1), + 0: (x + x*z + z^3, (2, 1, 1), 0), + 1: (x^2 + x*z + z^3, (3, 1, 1), 0), + 2: (x^3 + x^2*z + z^3, (5, 1, 1), -1)}) + sage: trinomiales(A, Vf, Vg, Vd, (), total=False) + (3, (1, 1, 2), (1, 2, 3), (2, 3, 6), (1, 1, -1), (2, 3, 5), + {(0, 2): (z^3 + x*y^3 + x*y^2*z, (2, 5, 1), 1), + (1, 2): (z^3 + x*y^2*z + x^2*y^3, (3, 5, 1), 1), + (2, 'd'): (x*z^2 + z^3 + x^3*y, (5, 1, 1), 1), + 0: (x + x*z + z^3, (2, 1, 1), 1), + 1: (x^2 + x*z + z^3, (3, 1, 1), 1), + 2: (x^3 + x^2*z + z^3, (5, 1, 1), -1)}) + """ + R = PolynomialRing(QQ, 'x, y, z', order='negdeglex') + x, y, z = R.gens() + n = A.nrows() + A1 = -A ** -1 + Nd = A1 * Vd + Nhs = [(A1 * N0, h) for N0, h in Vhs] + ch = len(Nhs) + NNd = Nd + 2 * sum(V0 for V0, j in Nhs) + diag = vector(A.diagonal()) + unos = vector(n * [1]) + resta = Vd + sum(V0 for V0, m in Vhs) + euler = (-A + 2 * identity_matrix(n)) * unos + diag - resta + nus = A1 * (diag + 2 * unos) + unos + expos = {j: exp_trenza(trenzas[j]) for j in range(n)} + cadenas = ('d', ) + cadenash = tuple(('h', h) for h in range(ch)) + expos['d'] = (0, 0, 1) + for h, V0 in enumerate(Vhs): + expos['h', h] = (0, V0[1], 1) + pols = {} + for j in range(n): + p = z**3 + for k, e in enumerate(expos[j]): + if e: + p += x**e * z**(2 - k) + pols[j] = (p, (nus[j], 1, 1), euler[j]) + interdiv = [(i, j) for i, j in Combinations(n, 2) if A[i, j] != 0] + interstrict = [(i, j) for i in range(n) for j in cadenas + if eval('V' + j)[i] != 0] + interh = [(i, j) for i in range(n) for j in cadenash if Vhs[j[1]][0][i] != 0] + for i, j in interdiv + interstrict + interh: + if isinstance(j, str): + ep = eval('V' + j)[i] + nu = (nus[i], 1, 1) + else: + ep = 1 + nu = (nus[i], nus[j], 1) + p = z**3 + for k, (e1, e2) in enumerate(zip(expos[i], expos[j])): + if e1 and e2: + p += x**e1 * y**e2 * z**(2 - k) + pols[i, j] = (p, nu, ep) + return n, Nd, Nhs, euler, nus, pols + +def estrato(pol, pesos, euler, info=False): + r""" + Return the topological and Igusa zeta functions associated to a stratum + + INPUT: + + - ``pol`` -- a trinomial non degenerated with respect to its Newton + polyhedron + + - ``pesos`` -- the canonical weights :math:`\nu:i` + + - `euler`` -- the Euler characteristic of the stratum + + - ``info`` -- boolean (default: False), if ``True`` a dictionary giving + the powers of cyclotomic polynomials for the monodromy zeta function + is given + + EXAMPLES:: + + sage: R. = QQ[] + sage: F = z**3 + x**4 * y**6 * z + x**7 * y**9 + sage: estrato(F, (1, 1, 1), 1, info=True) + ((1/3*s**2 + 1/2*s + 2/9)/(s^3 + 35/18*s^2 + 7/6*s + 2/9), -t^3 + 1, + {1: 1, 3: 1}) + """ + Z1 = ZetaFunctions(pol) + zetatop = euler * Z1.topological_zeta(local=True, weights=pesos) + zetamon = Z1.monodromy_zeta() ** euler + if info: + dic = {} + for p, j in zetamon.factor(): + c = p.is_cyclotomic(certificate=True) + dic[c] = j + return zetatop, zetamon, dic + return zetatop, zetamon + + +def zetas(n, pols, info=False): + r""" + Return the topological and Igusa zeta functions from the data of + a stratification + + INPUT: + + - ``n`` -- the number of exceptional divisors + + - ``pols`` -- a dictionary from ``trinomiales`` + + - ``info`` -- boolean (default: False), if ``True`` a dictionary giving + the powers of cyclotomic polynomials for the monodromy zeta function + is given + + EXAMPLES:: + + sage: A = Matrix(QQ, 3, [-3, 0, 1, 0, -2, 1, 1, 1, -1]) + sage: Vf = vector(QQ, [1, 0, 0]) + sage: Vg = vector(QQ, [0, 1, 0]) + sage: Vd = vector(QQ, [0, 0, 1]) + sage: n, Nf, Ng, Nd, euler, nus, pols = trinomiales(A, Vf, Vg, Vd) + sage: zetas(n, pols, info=True) + (1/(s + 1), -t + 1, {1: 1}) + """ + zetatop = 0 + T = PolynomialRing(QQ, 't') + t = T.gen(0) + zetamon = 1 / (1 - t ** 3) ** n + for k in pols: + zt, zm = estrato(*pols[k]) + zetatop += zt + zetamon *= zm + if info: + dic = {} + for p, j in zetamon.factor(): + c = p.is_cyclotomic(certificate=True) + dic[c] = j + return zetatop, zetamon, dic + return zetatop, zetamon