Our implementation $\mathtt{ConstructibleImage}$ finishes in less than 15 seconds and outperforms
[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.2
Imported OSCAR's components GAP and Singular_jll
Type: ?CapAndHomalg for more information
LoadPackage( "ZariskiFrames" )
UseSystemSingular(true)
true
ℚ = HomalgFieldOfRationalsInSingular( )
GAP: Q
B = ℚ["t000,t001,t011,t111"]
GAP: Q[t000,t001,t011,t111]
T = ℚ["s_0..4"]
GAP: Q[s_0,s_1,s_2,s_3,s_4]
ϕ = 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 );
Display( ϕ )
Q[s_0,s_1,s_2,s_3,s_4] ^ | [ -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 ] | | Q[t000,t001,t011,t111]
im = ConstructibleImage( ϕ )
GAP: ( V_{Q[t000,t001,t011,t111]}( I1 ) \ V_{Q[t000,t001,t011,t111]}( J1_1 ) )
Display( im )
V( <> ) \ ∅
Visualize( im )
Visualize( im, all = true )
imf = ConstructibleImage( ϕ, freeness = true )
GAP: ( V_{Q[t000,t001,t011,t111]}( I1 ) \ V_{Q[t000,t001,t011,t111]}( J1_1 ) )
imf == im
true
Display( imf )
V( <> ) \ ∅
Visualize( imf )
Visualize( imf, all = true )