Our implementation $\mathtt{ConstructibleImage}$ finishes in less than 15 seconds and outperforms
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
using CapAndHomalg
CapAndHomalg v1.0.0
Imported OSCAR's components GAP and Singular_jll
Type: ?CapAndHomalg for more information
LoadPackage( "ZariskiFrames" )
ℚ = HomalgFieldOfRationalsInSingular( )
GAP: Q
B = ℚ["t0000,t0001,t0011,t0111,t1111,t0101"]
GAP: Q[t0000,t0001,t0011,t0111,t1111,t0101]
T = ℚ["s_0..4"]
GAP: Q[s_0,s_1,s_2,s_3,s_4]
ϕ = 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 );
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]
im = ConstructibleImage( ϕ )
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 ) )
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( <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> ) ∪ 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> ) \ ∅
VisualizeInJulia( im )
VisualizeInJulia( im, all = true )