{ "cells": [ { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## The locus $uMPS(D,d,N)$ of uniform matrix product states is defined as the constructible image of the polynomial map $$ (\\mathbb{C}^{D \\times D})^d \\to (\\mathbb{C}^d)^{\\otimes N}, (M_0, \\ldots, M_{d-1}) \\mapsto \\sum_{0 \\leq i_1, \\ldots, i_N \\leq d-1} tr(M_{i_1} \\cdots M_{i_N}) e_{i_1} \\otimes \\cdots \\otimes e_{i_N} \\mbox{.}$$\n", "## Here we consider the case $(D,d,N) = (2,2,4)$.\n", "\n", "Our implementation $\\mathtt{ConstructibleImage}$ finishes in less than 15 seconds and outperforms\n", "* $\\mathtt{totalImage}$ (Macaulay2 package $\\mathtt{TotalImage}$ [HMS18,CMS])\n", "* $\\mathtt{grobcov}$ (Singular package $\\mathtt{grobcov.lib}$ [MW10])\n", "* $\\mathtt{PolynomialMapImage}$ ($\\mathsf{Maple}$ package $\\mathtt{RegularChains}$ [CGL+07])\n", "* $\\mathtt{Comprehensive}$ ($\\mathsf{Maple}$ package $\\mathtt{AlgebraicThomas}$ [BGLHR12])\n", "\n", "which did not finish after a day.\n", "\n", "\n", "[HMS18] Corey Harris, Mateusz Michałek, and Emre Can Sertöz, Computing images of polynomial maps, (arXiv:1801.00827), 2018.\n", "\n", "[CMS] Adam Czaplin ́ski, Mateusz Michałek, and Tim Seynnaeve, Uniform matrix product states from an algebraic geometer’s point of view.\n", "\n", "[MW10] Antonio Montes and Michael Wibmer, Gröbner bases for polynomial systems with parameters, J. Symbolic Comput. 45 (2010), no. 12, 1391–1425. MR 2733386\n", "\n", "[CGL+07] Changbo Chen, Oleg Golubitsky, François Lemaire, Marc Moreno Maza, and Wei Pan, Com- prehensive triangular decomposition, Computer Algebra in Scientific Computing (Berlin, Heidelberg) (Victor G. Ganzha, Ernst W. Mayr, and Evgenii V. Vorozhtsov, eds.), Springer Berlin Heidelberg, 2007, pp. 73–101.\n", "\n", "[BGLHR12] Thomas Bächler, Vladimir Gerdt, Markus Lange-Hegermann, and Daniel Robertz, Algorithmic Thomas decomposition of algebraic and differential systems, J. Symbolic Comput. 47 (2012), no. 10, 1233–1266, (arXiv:1108.0817). MR 2926124" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CapAndHomalg v\u001b[32m1.0.0\u001b[39m\n", "Imported OSCAR's components GAP and Singular_jll\n", "Type: ?CapAndHomalg for more information\n" ] } ], "source": [ "using CapAndHomalg" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "slideshow": { "slide_type": "-" } }, "outputs": [], "source": [ "LoadPackage( \"ZariskiFrames\" )" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "GAP: Q" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ℚ = HomalgFieldOfRationalsInSingular( )" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "GAP: Q[t0000,t0001,t0011,t0111,t1111,t0101]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "B = ℚ[\"t0000,t0001,t0011,t0111,t1111,t0101\"]" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "GAP: Q[s_0,s_1,s_2,s_3,s_4]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "T = ℚ[\"s_0..4\"]" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [], "source": [ "ϕ = RingMap( HomalgMatrix( \"-(1/2)*s_0^4+s_0^2*s_2+(1/2)*s_2^2,-(1/2)*s_0^3*s_1+(1/2)*s_0*s_1*s_2+(1/2)*s_0^2*s_3+(1/2)*s_2*s_3,-(1/2)*s_0^2*s_1^2+s_0*s_1*s_3+(1/2)*s_2*s_4,-(1/2)*s_0*s_1^3+(1/2)*s_1^2*s_3+(1/2)*s_0*s_1*s_4+(1/2)*s_3*s_4,-(1/2)*s_1^4+s_1^2*s_4+(1/2)*s_4^2,-(1/2)*s_0^2*s_1^2+(1/2)*s_1^2*s_2+(1/2)*s_0^2*s_4+s_3^2-(1/2)*s_2*s_4\", Length( Indeterminates( B ) ), 1, T ), B, T );" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Q[s_0,s_1,s_2,s_3,s_4]\n", " ^\n", " |\n", "[ -1/2*s_0^4+s_0^2*s_2+1/2*s_2^2, -1/2*s_0^3*s_1+1/2*s_0*s_1*s_2+1/2*s_0^2*s_3+1/2*s_2*s_3, -1/2*s_0^2*s_1^2+s_0*s_1*s_3+1/2*s_2*s_4, -1/2*s_0*s_1^3+1/2*s_1^2*s_3+1/2*s_0*s_1*s_4+1/2*s_3*s_4, -1/2*s_1^4+s_1^2*s_4+1/2*s_4^2, -1/2*s_0^2*s_1^2+1/2*s_1^2*s_2+1/2*s_0^2*s_4+s_3^2-1/2*s_2*s_4 ]\n", " |\n", " |\n", "Q[t0000,t0001,t0011,t0111,t1111,t0101]\n" ] } ], "source": [ "Display( ϕ )" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "GAP: ( V_{Q[t0000,t0001,t0011,t0111,t1111,t0101]}( I1 ) \\ V_{Q[t0000,t0001,t0011,t0111,t1111,t0101]}( J1_1 ) ) ∪ ( V_{Q[t0000,t0001,t0011,t0111,t1111,t0101]}( I2 ) \\ V_{Q[t0000,t0001,t0011,t0111,t1111,t0101]}( J2_1 ) )" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "im = ConstructibleImage( ϕ )" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "V( <2*t0011^6-12*t0001*t0011^4*t0111+16*t0001^2*t0011^2*t0111^2+4*t0000*t0011^3*t0111^2-8*t0000*t0001*t0011*t0111^3+t0000^2*t0111^4+4*t0001^2*t0011^3*t1111-t0000*t0011^4*t1111-8*t0001^3*t0011*t0111*t1111+2*t0000*t0001^2*t0111^2*t1111+t0001^4*t1111^2+8*t0001*t0011^3*t0111*t0101-16*t0001^2*t0011*t0111^2*t0101-4*t0000*t0011^2*t0111^2*t0101+4*t0000*t0001*t0111^3*t0101-4*t0001^2*t0011^2*t1111*t0101+4*t0001^3*t0111*t1111*t0101+8*t0000*t0001*t0011*t0111*t1111*t0101-2*t0000^2*t0111^2*t1111*t0101-2*t0000*t0001^2*t1111^2*t0101-t0011^4*t0101^2+4*t0001^2*t0111^2*t0101^2+4*t0000*t0011*t0111^2*t0101^2+4*t0001^2*t0011*t1111*t0101^2-2*t0000*t0011^2*t1111*t0101^2-4*t0000*t0001*t0111*t1111*t0101^2+t0000^2*t1111^2*t0101^2-2*t0000*t0111^2*t0101^3-2*t0001^2*t1111*t0101^3+t0000*t1111*t0101^4> ) \\ V( <16*t0011*t0111^2-10*t0011^2*t1111-4*t0001*t0111*t1111+t0000*t1111^2-16*t0111^2*t0101+8*t0011*t1111*t0101+5*t1111*t0101^2,6*t0011^2*t0111-4*t0001*t0111^2-8*t0001*t0011*t1111+t0000*t0111*t1111+8*t0001*t1111*t0101-3*t0111*t0101^2,16*t0001*t0011*t0111-8*t0000*t0111^2-8*t0001^2*t1111-8*t0000*t0011*t1111+2*t0011^2*t0101-12*t0001*t0111*t0101+19*t0000*t1111*t0101-t0101^3,8*t0011^3-8*t0000*t0111^2-8*t0001^2*t1111-12*t0000*t0011*t1111+6*t0011^2*t0101-4*t0001*t0111*t0101+25*t0000*t1111*t0101-4*t0011*t0101^2-3*t0101^3,6*t0001*t0011^2-4*t0001^2*t0111-8*t0000*t0011*t0111+t0000*t0001*t1111+8*t0000*t0111*t0101-3*t0001*t0101^2,16*t0001^2*t0011-10*t0000*t0011^2-4*t0000*t0001*t0111+t0000^2*t1111-16*t0001^2*t0101+8*t0000*t0011*t0101+5*t0000*t0101^2,32*t0001*t0111^3-12*t0000*t0111^2*t1111-4*t0001^2*t1111^2-16*t0000*t0011*t1111^2+10*t0011^2*t1111*t0101-52*t0001*t0111*t1111*t0101+35*t0000*t1111^2*t0101-24*t0111^2*t0101^2+24*t0011*t1111*t0101^2+7*t1111*t0101^3,3*t0000*t0111^3-t0001^2*t0111*t1111-2*t0000*t0011*t0111*t1111+t0000*t0001*t1111^2-2*t0001*t0111^2*t0101+2*t0001*t0011*t1111*t0101-2*t0000*t0111*t1111*t0101+t0001*t1111*t0101^2,32*t0001^2*t0111^2-14*t0000*t0011^2*t1111-4*t0000*t0001*t0111*t1111-t0000^2*t1111^2-36*t0000*t0111^2*t0101-36*t0001^2*t1111*t0101+40*t0000*t0011*t1111*t0101+19*t0000*t1111*t0101^2,t0000*t0001*t0111^2-3*t0001^3*t1111+2*t0000*t0001*t0011*t1111-t0000^2*t0111*t1111+2*t0001^2*t0111*t0101-2*t0000*t0011*t0111*t0101+2*t0000*t0001*t1111*t0101-t0000*t0111*t0101^2,32*t0001^3*t0111-4*t0000^2*t0111^2-12*t0000*t0001^2*t1111-16*t0000^2*t0011*t1111+10*t0000*t0011^2*t0101-52*t0000*t0001*t0111*t0101+35*t0000^2*t1111*t0101-24*t0001^2*t0101^2+24*t0000*t0011*t0101^2+7*t0000*t0101^3,32*t0001^4*t1111-18*t0000^2*t0011^2*t1111+4*t0000^2*t0001*t0111*t1111+t0000^3*t1111^2-4*t0000^2*t0111^2*t0101-52*t0000*t0001^2*t1111*t0101+24*t0000^2*t0011*t1111*t0101+4*t0000*t0011^2*t0101^2-8*t0000*t0001*t0111*t0101^2+11*t0000^2*t1111*t0101^2-16*t0001^2*t0101^3+16*t0000*t0011*t0101^3+6*t0000*t0101^4> )\n", "\n", "∪\n", "\n", "V( ) \\ ∅\n" ] } ], "source": [ "Display( im )" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "hgn\n", "\n", "\n", "\n", "1\n", "\n", "1 (+5)\n", "\n", "\n", "\n", "2\n", "\n", "5 (+2)\n", "\n", "\n", "\n", "3\n", "\n", "4 (-3)\n", "\n", "\n", "\n", "2->3\n", "\n", "\n", "\n", "\n", "\n", "3->1\n", "\n", "\n", "\n", "\n", "\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "VisualizeInJulia( im )" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "hgn\n", "\n", "\n", "\n", "1\n", "\n", "@1 (+5)\n", "\n", "\n", "\n", "2\n", "\n", "2 (-4)\n", "\n", "\n", "\n", "2->1\n", "\n", "\n", "\n", "\n", "\n", "3\n", "\n", "3 (+4)\n", "\n", "\n", "\n", "3->2\n", "\n", "\n", "\n", "\n", "\n", "3->2\n", "\n", "\n", "\n", "\n", "\n", "4\n", "\n", "@4 (-3)\n", "\n", "\n", "\n", "4->3\n", "\n", "\n", "\n", "\n", "\n", "5\n", "\n", "@5 (+2)\n", "\n", "\n", "\n", "5->4\n", "\n", "\n", "\n", "\n", "\n", "6\n", "\n", "6 (-1)\n", "\n", "\n", "\n", "6->5\n", "\n", "\n", "\n", "\n", "\n", "7\n", "\n", "7 (+1)\n", "\n", "\n", "\n", "7->6\n", "\n", "\n", "\n", "\n", "\n", "7->6\n", "\n", "\n", "\n", "\n", "\n", "8\n", "\n", "8 (-0)\n", "\n", "\n", "\n", "8->7\n", "\n", "\n", "\n", "\n", "\n", "9\n", "\n", "9 (+0)\n", "\n", "\n", "\n", "9->8\n", "\n", "\n", "\n", "\n", "\n", "9->8\n", "\n", "\n", "\n", "\n", "\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "VisualizeInJulia( im, all = true )" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "@webio": { "lastCommId": null, "lastKernelId": null }, "celltoolbar": "Slideshow", "kernelspec": { "display_name": "Julia 1.5.1", "language": "julia", "name": "julia-1.5" }, "language_info": { "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", "version": "1.5.1" } }, "nbformat": 4, "nbformat_minor": 2 }