{ "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,3)$.\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", "\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.6.8\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": [ "true" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "UseSystemSingular(false)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "GAP: Q" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ℚ = HomalgFieldOfRationalsInSingular( )" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "GAP: Q[t000,t001,t011,t111]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "B = ℚ[\"t000,t001,t011,t111\"]" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "GAP: Q[s_0,s_1,s_2,s_3,s_4]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "T = ℚ[\"s_0..4\"]" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [], "source": [ "ϕ = RingMap( HomalgMatrix( \"-(1/2)*s_0^3+(3/2)*s_0*s_2,-(1/2)*s_0^2*s_1+(1/2)*s_1*s_2+s_0*s_3,-(1/2)*s_0*s_1^2+s_1*s_3+(1/2)*s_0*s_4,-(1/2)*s_1^3+(3/2)*s_1*s_4\", Length( Indeterminates( B ) ), 1, T ), B, T );" ] }, { "cell_type": "code", "execution_count": 8, "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^3+3/2*s_0*s_2, -1/2*s_0^2*s_1+1/2*s_1*s_2+s_0*s_3, -1/2*s_0*s_1^2+s_1*s_3+1/2*s_0*s_4, -1/2*s_1^3+3/2*s_1*s_4 ]\n", " |\n", " |\n", "Q[t000,t001,t011,t111]\n" ] } ], "source": [ "Display( ϕ )" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "GAP: ( V_{Q[t000,t001,t011,t111]}( I1 ) \\ V_{Q[t000,t001,t011,t111]}( J1_1 ) )" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "im = ConstructibleImage( ϕ )" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "( V( <> )\n", "\n", "\\ ∅ )\n" ] } ], "source": [ "Display( 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 (+4)\n", "\n", "\n", "\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "Visualize( im )" ] }, { "cell_type": "code", "execution_count": 12, "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 (+4)\n", "\n", "\n", "\n", "2\n", "\n", "2 (-3)\n", "\n", "\n", "\n", "2->1\n", "\n", "\n", "\n", "\n", "\n", "3\n", "\n", "3 (+3)\n", "\n", "\n", "\n", "3->2\n", "\n", "\n", "\n", "\n", "\n", "3->2\n", "\n", "\n", "\n", "\n", "\n", "4\n", "\n", "4 (-2)\n", "\n", "\n", "\n", "4->3\n", "\n", "\n", "\n", "\n", "\n", "5\n", "\n", "5 (-2)\n", "\n", "\n", "\n", "5->3\n", "\n", "\n", "\n", "\n", "\n", "6\n", "\n", "6 (-2)\n", "\n", "\n", "\n", "6->3\n", "\n", "\n", "\n", "\n", "\n", "7\n", "\n", "7 (+2)\n", "\n", "\n", "\n", "7->4\n", "\n", "\n", "\n", "\n", "\n", "7->4\n", "\n", "\n", "\n", "\n", "\n", "8\n", "\n", "8 (-1)\n", "\n", "\n", "\n", "8->7\n", "\n", "\n", "\n", "\n", "\n", "10\n", "\n", "10 (+2)\n", "\n", "\n", "\n", "8->10\n", "\n", "\n", "\n", "\n", "\n", "9\n", "\n", "9 (-1)\n", "\n", "\n", "\n", "9->7\n", "\n", "\n", "\n", "\n", "\n", "11\n", "\n", "11 (+2)\n", "\n", "\n", "\n", "9->11\n", "\n", "\n", "\n", "\n", "\n", "10->5\n", "\n", "\n", "\n", "\n", "\n", "10->5\n", "\n", "\n", "\n", "\n", "\n", "11->6\n", "\n", "\n", "\n", "\n", "\n", "11->6\n", "\n", "\n", "\n", "\n", "\n", "12\n", "\n", "12 (+1)\n", "\n", "\n", "\n", "12->8\n", "\n", "\n", "\n", "\n", "\n", "12->8\n", "\n", "\n", "\n", "\n", "\n", "13\n", "\n", "13 (+1)\n", "\n", "\n", "\n", "13->9\n", "\n", "\n", "\n", "\n", "\n", "13->9\n", "\n", "\n", "\n", "\n", "\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "Visualize( im, all = true )" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "GAP: ( V_{Q[t000,t001,t011,t111]}( I1 ) \\ V_{Q[t000,t001,t011,t111]}( J1_1 ) )" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "imf = ConstructibleImage( ϕ, freeness = true )" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "true" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "imf == im" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "( V( <> )\n", "\n", "\\ ∅ )\n" ] } ], "source": [ "Display( imf )" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "hgn\n", "\n", "\n", "\n", "1\n", "\n", "1 (+4)\n", "\n", "\n", "\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "Visualize( imf )" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "hgn\n", "\n", "\n", "\n", "1\n", "\n", "@1 (+4)\n", "\n", "\n", "\n", "2\n", "\n", "2 (-3)\n", "\n", "\n", "\n", "2->1\n", "\n", "\n", "\n", "\n", "\n", "3\n", "\n", "3 (-3)\n", "\n", "\n", "\n", "3->1\n", "\n", "\n", "\n", "\n", "\n", "4\n", "\n", "4 (-3)\n", "\n", "\n", "\n", "4->1\n", "\n", "\n", "\n", "\n", "\n", "5\n", "\n", "5 (-3)\n", "\n", "\n", "\n", "5->1\n", "\n", "\n", "\n", "\n", "\n", "6\n", "\n", "6 (-3)\n", "\n", "\n", "\n", "6->1\n", "\n", "\n", "\n", "\n", "\n", "7\n", "\n", "7 (-3)\n", "\n", "\n", "\n", "7->1\n", "\n", "\n", "\n", "\n", "\n", "8\n", "\n", "8 (+3)\n", "\n", "\n", "\n", "8->2\n", "\n", "\n", "\n", "\n", "\n", "8->2\n", "\n", "\n", "\n", "\n", "\n", "9\n", "\n", "9 (-2)\n", "\n", "\n", "\n", "9->8\n", "\n", "\n", "\n", "\n", "\n", "25\n", "\n", "25 (+3)\n", "\n", "\n", "\n", "9->25\n", "\n", "\n", "\n", "\n", "\n", "10\n", "\n", "10 (-2)\n", "\n", "\n", "\n", "10->8\n", "\n", "\n", "\n", "\n", "\n", "11\n", "\n", "11 (-2)\n", "\n", "\n", "\n", "11->8\n", "\n", "\n", "\n", "\n", "\n", "12\n", "\n", "12 (-2)\n", "\n", "\n", "\n", "12->8\n", "\n", "\n", "\n", "\n", "\n", "17\n", "\n", "17 (+3)\n", "\n", "\n", "\n", "12->17\n", "\n", "\n", "\n", "\n", "\n", "20\n", "\n", "20 (+3)\n", "\n", "\n", "\n", "12->20\n", "\n", "\n", "\n", "\n", "\n", "23\n", "\n", "23 (+3)\n", "\n", "\n", "\n", "12->23\n", "\n", "\n", "\n", "\n", "\n", "13\n", "\n", "13 (-2)\n", "\n", "\n", "\n", "13->8\n", "\n", "\n", "\n", "\n", "\n", "14\n", "\n", "14 (-2)\n", "\n", "\n", "\n", "14->8\n", "\n", "\n", "\n", "\n", "\n", "14->17\n", "\n", "\n", "\n", "\n", "\n", "14->20\n", "\n", "\n", "\n", "\n", "\n", "15\n", "\n", "15 (-2)\n", "\n", "\n", "\n", "15->8\n", "\n", "\n", "\n", "\n", "\n", "15->17\n", "\n", "\n", "\n", "\n", "\n", "15->23\n", "\n", "\n", "\n", "\n", "\n", "15->25\n", "\n", "\n", "\n", "\n", "\n", "26\n", "\n", "26 (+3)\n", "\n", "\n", "\n", "15->26\n", "\n", "\n", "\n", "\n", "\n", "16\n", "\n", "16 (-2)\n", "\n", "\n", "\n", "16->8\n", "\n", "\n", "\n", "\n", "\n", "16->26\n", "\n", "\n", "\n", "\n", "\n", "17->3\n", "\n", "\n", "\n", "\n", "\n", "17->3\n", "\n", "\n", "\n", "\n", "\n", "18\n", "\n", "18 (-2)\n", "\n", "\n", "\n", "18->17\n", "\n", "\n", "\n", "\n", "\n", "18->26\n", "\n", "\n", "\n", "\n", "\n", "19\n", "\n", "19 (-2)\n", "\n", "\n", "\n", "19->17\n", "\n", "\n", "\n", "\n", "\n", "19->25\n", "\n", "\n", "\n", "\n", "\n", "20->4\n", "\n", "\n", "\n", "\n", "\n", "20->4\n", "\n", "\n", "\n", "\n", "\n", "21\n", "\n", "21 (-2)\n", "\n", "\n", "\n", "21->20\n", "\n", "\n", "\n", "\n", "\n", "21->23\n", "\n", "\n", "\n", "\n", "\n", "21->25\n", "\n", "\n", "\n", "\n", "\n", "22\n", "\n", "22 (-2)\n", "\n", "\n", "\n", "22->20\n", "\n", "\n", "\n", "\n", "\n", "23->5\n", "\n", "\n", "\n", "\n", "\n", "23->5\n", "\n", "\n", "\n", "\n", "\n", "24\n", "\n", "24 (-2)\n", "\n", "\n", "\n", "24->23\n", "\n", "\n", "\n", "\n", "\n", "25->6\n", "\n", "\n", "\n", "\n", "\n", "25->6\n", "\n", "\n", "\n", "\n", "\n", "26->7\n", "\n", "\n", "\n", "\n", "\n", "26->7\n", "\n", "\n", "\n", "\n", "\n", "27\n", "\n", "27 (+2)\n", "\n", "\n", "\n", "27->9\n", "\n", "\n", "\n", "\n", "\n", "27->9\n", "\n", "\n", "\n", "\n", "\n", "28\n", "\n", "28 (-1)\n", "\n", "\n", "\n", "28->27\n", "\n", "\n", "\n", "\n", "\n", "30\n", "\n", "30 (+2)\n", "\n", "\n", "\n", "28->30\n", "\n", "\n", "\n", "\n", "\n", "31\n", "\n", "31 (+2)\n", "\n", "\n", "\n", "28->31\n", "\n", "\n", "\n", "\n", "\n", "32\n", "\n", "32 (+2)\n", "\n", "\n", "\n", "28->32\n", "\n", "\n", "\n", "\n", "\n", "33\n", "\n", "33 (+2)\n", "\n", "\n", "\n", "28->33\n", "\n", "\n", "\n", "\n", "\n", "36\n", "\n", "36 (+2)\n", "\n", "\n", "\n", "28->36\n", "\n", "\n", "\n", "\n", "\n", "38\n", "\n", "38 (+2)\n", "\n", "\n", "\n", "28->38\n", "\n", "\n", "\n", "\n", "\n", "39\n", "\n", "39 (+2)\n", "\n", "\n", "\n", "28->39\n", "\n", "\n", "\n", "\n", "\n", "41\n", "\n", "41 (+2)\n", "\n", "\n", "\n", "28->41\n", "\n", "\n", "\n", "\n", "\n", "42\n", "\n", "42 (+2)\n", "\n", "\n", "\n", "28->42\n", "\n", "\n", "\n", "\n", "\n", "43\n", "\n", "43 (+2)\n", "\n", "\n", "\n", "28->43\n", "\n", "\n", "\n", "\n", "\n", "29\n", "\n", "29 (-1)\n", "\n", "\n", "\n", "29->27\n", "\n", "\n", "\n", "\n", "\n", "29->30\n", "\n", "\n", "\n", "\n", "\n", "29->31\n", "\n", "\n", "\n", "\n", "\n", "29->32\n", "\n", "\n", "\n", "\n", "\n", "29->33\n", "\n", "\n", "\n", "\n", "\n", "34\n", "\n", "34 (+2)\n", "\n", "\n", "\n", "29->34\n", "\n", "\n", "\n", "\n", "\n", "40\n", "\n", "40 (+2)\n", "\n", "\n", "\n", "29->40\n", "\n", "\n", "\n", "\n", "\n", "29->41\n", "\n", "\n", "\n", "\n", "\n", "29->43\n", "\n", "\n", "\n", "\n", "\n", "30->10\n", "\n", "\n", "\n", "\n", "\n", "30->10\n", "\n", "\n", "\n", "\n", "\n", "31->11\n", "\n", "\n", "\n", "\n", "\n", "31->11\n", "\n", "\n", "\n", "\n", "\n", "32->12\n", "\n", "\n", "\n", "\n", "\n", "32->12\n", "\n", "\n", "\n", "\n", "\n", "33->13\n", "\n", "\n", "\n", "\n", "\n", "33->13\n", "\n", "\n", "\n", "\n", "\n", "34->14\n", "\n", "\n", "\n", "\n", "\n", "34->14\n", "\n", "\n", "\n", "\n", "\n", "35\n", "\n", "35 (-1)\n", "\n", "\n", "\n", "35->34\n", "\n", "\n", "\n", "\n", "\n", "35->38\n", "\n", "\n", "\n", "\n", "\n", "35->39\n", "\n", "\n", "\n", "\n", "\n", "35->42\n", "\n", "\n", "\n", "\n", "\n", "36->15\n", "\n", "\n", "\n", "\n", "\n", "36->15\n", "\n", "\n", "\n", "\n", "\n", "37\n", "\n", "37 (-1)\n", "\n", "\n", "\n", "37->36\n", "\n", "\n", "\n", "\n", "\n", "37->40\n", "\n", "\n", "\n", "\n", "\n", "38->16\n", "\n", "\n", "\n", "\n", "\n", "38->16\n", "\n", "\n", "\n", "\n", "\n", "39->18\n", "\n", "\n", "\n", "\n", "\n", "39->18\n", "\n", "\n", "\n", "\n", "\n", "40->19\n", "\n", "\n", "\n", "\n", "\n", "40->19\n", "\n", "\n", "\n", "\n", "\n", "41->21\n", "\n", "\n", "\n", "\n", "\n", "41->21\n", "\n", "\n", "\n", "\n", "\n", "42->22\n", "\n", "\n", "\n", "\n", "\n", "42->22\n", "\n", "\n", "\n", "\n", "\n", "43->24\n", "\n", "\n", "\n", "\n", "\n", "43->24\n", "\n", "\n", "\n", "\n", "\n", "44\n", "\n", "44 (+1)\n", "\n", "\n", "\n", "44->28\n", "\n", "\n", "\n", "\n", "\n", "44->28\n", "\n", "\n", "\n", "\n", "\n", "45\n", "\n", "45 (-0)\n", "\n", "\n", "\n", "45->44\n", "\n", "\n", "\n", "\n", "\n", "46\n", "\n", "46 (+1)\n", "\n", "\n", "\n", "45->46\n", "\n", "\n", "\n", "\n", "\n", "47\n", "\n", "47 (+1)\n", "\n", "\n", "\n", "45->47\n", "\n", "\n", "\n", "\n", "\n", "48\n", "\n", "48 (+1)\n", "\n", "\n", "\n", "45->48\n", "\n", "\n", "\n", "\n", "\n", "46->29\n", "\n", "\n", "\n", "\n", "\n", "46->29\n", "\n", "\n", "\n", "\n", "\n", "47->35\n", "\n", "\n", "\n", "\n", "\n", "47->35\n", "\n", "\n", "\n", "\n", "\n", "48->37\n", "\n", "\n", "\n", "\n", "\n", "48->37\n", "\n", "\n", "\n", "\n", "\n", "49\n", "\n", "49 (+0)\n", "\n", "\n", "\n", "49->45\n", "\n", "\n", "\n", "\n", "\n", "49->45\n", "\n", "\n", "\n", "\n", "\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "Visualize( imf, all = true )" ] } ], "metadata": { "@webio": { "lastCommId": null, "lastKernelId": null }, "celltoolbar": "Slideshow", "kernelspec": { "display_name": "Julia 1.12", "language": "julia", "name": "julia-1.12" }, "language_info": { "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", "version": "1.12.3" } }, "nbformat": 4, "nbformat_minor": 2 }