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{.}$$

Here we consider the case $(D,d,N) = (2,2,4)$.

Our implementation $\mathtt{ConstructibleImage}$ finishes in less than 15 seconds and outperforms

  • $\mathtt{totalImage}$ (Macaulay2 package $\mathtt{TotalImage}$ [HMS18,CMS])
  • $\mathtt{grobcov}$ (Singular package $\mathtt{grobcov.lib}$ [MW10])
  • $\mathtt{PolynomialMapImage}$ ($\mathsf{Maple}$ package $\mathtt{RegularChains}$ [CGL+07])
  • $\mathtt{Comprehensive}$ ($\mathsf{Maple}$ package $\mathtt{AlgebraicThomas}$ [BGLHR12])

which did not finish after a day.

[HMS18] Corey Harris, Mateusz Michałek, and Emre Can Sertöz, Computing images of polynomial maps, (arXiv:1801.00827), 2018.

[CMS] Adam Czaplin ́ski, Mateusz Michałek, and Tim Seynnaeve, Uniform matrix product states from an algebraic geometer’s point of view.

[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

[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.

[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

In [1]:
using CapAndHomalg
CapAndHomalg v1.2.0
Imported OSCAR's components GAP and Singular_jll
Type: ?CapAndHomalg for more information
In [2]:
LoadPackage( "ZariskiFrames" )
In [3]:
 = HomalgFieldOfRationalsInSingular( )
Out[3]:
GAP: Q
In [4]:
B = ["t0000,t0001,t0011,t0111,t1111,t0101"]
Out[4]:
GAP: Q[t0000,t0001,t0011,t0111,t1111,t0101]
In [5]:
T = ["s_0..4"]
Out[5]:
GAP: Q[s_0,s_1,s_2,s_3,s_4]
In [6]:
ϕ = 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 );
In [7]:
Display( ϕ )
Q[s_0,s_1,s_2,s_3,s_4]
  ^
  |
[ -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 ]
  |
  |
Q[t0000,t0001,t0011,t0111,t1111,t0101]
In [8]:
im = ConstructibleImage( ϕ )
Out[8]:
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]}( J1_2 ) ) ∪ ( V_{Q[t0000,t0001,t0011,t0111,t1111,t0101]}( I2 ) \ V_{Q[t0000,t0001,t0011,t0111,t1111,t0101]}( J2_1 ) )
In [9]:
Display( im )
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( <t0011-t0101,4*t0001*t0111^3+t0001^2*t1111^2-6*t0001*t0111*t1111*t0101-3*t0111^2*t0101^2+4*t1111*t0101^3,-4*t0001*t0111+t0000*t1111+3*t0101^2,t0000*t0111^2+t0001^2*t1111-6*t0001*t0111*t0101+4*t0101^3> ) \ V( <-2*t0111^4+t0011^2*t1111^2+4*t0111^2*t1111*t0101-2*t0011*t1111^2*t0101-t1111^2*t0101^2,2*t0111^3-2*t0011*t0111*t1111+t0001*t1111^2-t0111*t1111*t0101,-2*t0011*t0111^2+t0011^2*t1111+t0001*t0111*t1111+3*t0111^2*t0101-2*t0011*t1111*t0101-t1111*t0101^2,2*t0011^2*t0111^2+2*t0001*t0111^3-2*t0011^3*t1111-12*t0011*t0111^2*t0101+7*t0011^2*t1111*t0101+10*t0111^2*t0101^2-4*t0011*t1111*t0101^2-3*t1111*t0101^3,-2*t0011^2*t0111+2*t0001*t0111^2+2*t0001*t0011*t1111-3*t0001*t1111*t0101+t0111*t0101^2,-2*t0011^4+4*t0001*t0011^2*t0111+2*t0001^2*t0111^2+4*t0011^3*t0101-16*t0001*t0011*t0111*t0101+3*t0011^2*t0101^2+8*t0001*t0111*t0101^2-2*t0011*t0101^3-t0101^4,-16*t0011^3+48*t0001*t0011*t0111-16*t0001^2*t1111-6*t0011^2*t0101-28*t0001*t0111*t0101+7*t0000*t1111*t0101+8*t0011*t0101^2+3*t0101^3,8*t0011*t0111^2-6*t0011^2*t1111+t0000*t1111^2-4*t0111^2*t0101+t1111*t0101^2,-4*t0001*t0011^3+12*t0001^2*t0011*t0111-4*t0001^3*t1111+2*t0001*t0011^2*t0101-14*t0001^2*t0111*t0101+2*t0001*t0011*t0101^2+7*t0000*t0111*t0101^2-t0001*t0101^3,-2*t0011^2*t0111+4*t0001*t0111^2+t0000*t0111*t1111-4*t0001*t1111*t0101+t0111*t0101^2,t0000*t0111^2-t0001^2*t1111,-38*t0011^3+100*t0001*t0011*t0111-24*t0001^2*t1111+7*t0000*t0011*t1111-16*t0011^2*t0101-56*t0001*t0111*t0101+19*t0011*t0101^2+8*t0101^3,-2*t0001*t0011^2+2*t0001^2*t0111+2*t0000*t0011*t0111-3*t0000*t0111*t0101+t0001*t0101^2,4*t0001^2*t0011^3-12*t0001^3*t0011*t0111+4*t0001^4*t1111-2*t0001^2*t0011^2*t0101+14*t0001^3*t0111*t0101-16*t0001^2*t0011*t0101^2+7*t0000*t0011^2*t0101^2+22*t0001^2*t0101^3-14*t0000*t0011*t0101^3-7*t0000*t0101^4,-2*t0001^2*t0011^2+2*t0000*t0011^3-2*t0001^3*t0111+12*t0001^2*t0011*t0101-7*t0000*t0011^2*t0101-10*t0001^2*t0101^2+4*t0000*t0011*t0101^2+3*t0000*t0101^3,-2*t0001*t0011^2+4*t0001^2*t0111+t0000*t0001*t1111-4*t0000*t0111*t0101+t0001*t0101^2,-2*t0001^2*t0011+t0000*t0011^2+t0000*t0001*t0111+3*t0001^2*t0101-2*t0000*t0011*t0101-t0000*t0101^2,8*t0001^2*t0011-6*t0000*t0011^2+t0000^2*t1111-4*t0001^2*t0101+t0000*t0101^2,2*t0001^3-2*t0000*t0001*t0011+t0000^2*t0111-t0000*t0001*t0101,-2*t0001^4+t0000^2*t0011^2+4*t0000*t0001^2*t0101-2*t0000^2*t0011*t0101-t0000^2*t0101^2> )

∪

V( <t0011-t0101,t0001*t1111-t0111*t0101,t0000*t1111-t0101^2,t0111^2-t1111*t0101,t0001*t0111-t0101^2,t0000*t0111-t0001*t0101,t0001^2-t0000*t0101> ) \ ∅
In [10]:
Visualize( im )
hgn 1 1 (+5) 2 6 (+2) 3 4 (-3) 2->3 4 5 (-3) 2->4 3->1 4->1
In [11]:
Visualize( im, all = true )
hgn 1 @1 (+5) 2 2 (-4) 2->1 3 3 (+4) 3->2 3->2 4 @4 (-3) 4->3 5 @5 (-3) 5->3 6 @6 (+2) 6->4 6->5 7 7 (-1) 7->6 8 8 (+1) 8->7 8->7 9 9 (-0) 9->8 10 10 (+0) 10->9 10->9
In [ ]: