Geometry of the Main Component

This page contains the code we used to prove that for \(g\leq 7\) the main component of the Hirota variety \(\mathcal{H}_{\mathcal{C}}^M\) is an irreducible component of dimension \(3g\). In particular, here we show the code for \(g=6\). If you want to run the code yourself, you may download the following file main_component.m2.

To generate the entries of the cube \(\mathcal{C}=\{0,1\}^g\) that index the variables \({\bf a}=(a_1,a_2,\dots,a_{2^g})\) we used the function in \(\texttt{Mathematica}\):

g = 6;
{Array[List, ConstantArray[2, g], 0, ## &]}

This is the only part of the code depending on the genus, the rest of is generalised to any genus \(g\). This is implemented in \(\texttt{Macaulay2}\).

 restart
C = ZZ/32999

g = 6
r = 2^g+3*g --number parameters in product space
t = 2*g+g+1 --number of kappas and lambdas
p = 2^g-1     --number of a's
cube = {{0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1}, {0, 0, 0, 0, 1, 0}, {0, 0, 0,
   0, 1, 1}, {0, 0, 0, 1, 0, 0}, {0, 0, 0, 1, 0, 1}, {0, 0, 0, 1, 1,
  0}, {0, 0, 0, 1, 1, 1}, {0, 0, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 1}, {0,
  0, 1, 0, 1, 0}, {0, 0, 1, 0, 1, 1}, {0, 0, 1, 1, 0, 0}, {0, 0, 1, 1,
   0, 1}, {0, 0, 1, 1, 1, 0}, {0, 0, 1, 1, 1, 1}, {0, 1, 0, 0, 0,
  0}, {0, 1, 0, 0, 0, 1}, {0, 1, 0, 0, 1, 0}, {0, 1, 0, 0, 1, 1}, {0,
  1, 0, 1, 0, 0}, {0, 1, 0, 1, 0, 1}, {0, 1, 0, 1, 1, 0}, {0, 1, 0, 1,
   1, 1}, {0, 1, 1, 0, 0, 0}, {0, 1, 1, 0, 0, 1}, {0, 1, 1, 0, 1,
  0}, {0, 1, 1, 0, 1, 1}, {0, 1, 1, 1, 0, 0}, {0, 1, 1, 1, 0, 1}, {0,
  1, 1, 1, 1, 0}, {0, 1, 1, 1, 1, 1}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0,
   0, 1}, {1, 0, 0, 0, 1, 0}, {1, 0, 0, 0, 1, 1}, {1, 0, 0, 1, 0,
  0}, {1, 0, 0, 1, 0, 1}, {1, 0, 0, 1, 1, 0}, {1, 0, 0, 1, 1, 1}, {1,
  0, 1, 0, 0, 0}, {1, 0, 1, 0, 0, 1}, {1, 0, 1, 0, 1, 0}, {1, 0, 1, 0,
   1, 1}, {1, 0, 1, 1, 0, 0}, {1, 0, 1, 1, 0, 1}, {1, 0, 1, 1, 1,
 0}, {1, 0, 1, 1, 1, 1}, {1, 1, 0, 0, 0, 0}, {1, 1, 0, 0, 0, 1}, {1,
 1, 0, 0, 1, 0}, {1, 1, 0, 0, 1, 1}, {1, 1, 0, 1, 0, 0}, {1, 1, 0, 1,
  0, 1}, {1, 1, 0, 1, 1, 0}, {1, 1, 0, 1, 1, 1}, {1, 1, 1, 0, 0,
 0}, {1, 1, 1, 0, 0, 1}, {1, 1, 1, 0, 1, 0}, {1, 1, 1, 0, 1, 1}, {1,
 1, 1, 1, 0, 0}, {1, 1, 1, 1, 0, 1}, {1, 1, 1, 1, 1, 0}, {1, 1, 1, 1,
   1, 1}};


--create the a_i generators
agens = {};
for i from 0 to p do
    agens=append(agens,a_(cube_i))
#agens == 2^g

--create the vectors of the degrees
deg = {};
for i from 1 to g do
    deg = append(deg,1)
for i from 1 to g do
    deg = append(deg,2)
for i from 1 to g do
    deg = append(deg,3)
for i from 1 to p+1 do
    deg = append(deg,0)
--
R = C[u_1..u_g,v_1..v_g,w_1..w_g,agens,Degrees=>deg];
#(generators R)==r
kappas=2*g
lambdas=g
T = C[k_1..k_kappas,l_0..l_lambdas];
t == #(generators T)
S = R[q_1..q_g];
--extract a_i generators
Agens = {};
for i from 3*g to r-1 do
    Agens = append(Agens,(generators R)_i)
#Agens==2^g

--now we write the degenerate theta function
l = 0;
for i from 1 to g do
    l = l + q_i^2
I = ideal(l);
G = S/I;
--
F = 0;
mon = 1;
--cubeS = sub(cube,S);
-*for i from 0 to p do {    --index moving elements of cube
    mon = 1;
    for j from 0 to g-1 do {    --index moving elements in the vertex of the cube
        if (cube_i)_j == 1 then
           mon = mon * q_(j+1)};
    F = F + a_(cube_i)*mon;
}*-
for i from 0 to p do {    --index moving elements of cube
    mon = 1;
    for j from 0 to g-1 do {    --index moving elements in the vertex of the cube
        if (cube_i)_j == 1 then
           mon = mon * q_(j+1)};
    F = F + Agens_i*mon;
}
F

Once we have the expression of the degenerate theta function we can evaluate the Hirota’s bilinear form and ask for its coefficients to vanish in order to compute the equations defining the Hirota variety. This is what we do in the next steps. Notice that the variables \(\verb|q_1,...,q_g|\) are used to represent the exponentials \(\exp[z_1],\dots,\exp[z_g]\).

dx = f -> u_1*q_1*diff(q_1,f)+u_2*q_2*diff(q_2,f)+u_3*q_3*diff(q_3,f)+
u_4*q_4*diff(q_4,f)+u_5*q_5*diff(q_5,f)+u_6*q_6*diff(q_6,f);
dy = f -> v_1*q_1*diff(q_1,f)+v_2*q_2*diff(q_2,f)+v_3*q_3*diff(q_3,f)+
v_4*q_4*diff(q_4,f)+v_5*q_5*diff(q_5,f)+v_6*q_6*diff(q_6,f);
dt = f -> w_1*q_1*diff(q_1,f)+w_2*q_2*diff(q_2,f)+w_3*q_3*diff(q_3,f)+
w_4*q_4*diff(q_4,f)+w_5*q_5*diff(q_5,f)+w_6*q_6*diff(q_6,f);

FX = dx(F);
FXX = dx(FX);
FXXX = dx(FXX);
FXXXX = dx(FXXX);
FY = dy(F);
FYY = dy(FY);
FT = dt(F);
FXT = dx(FT);

-- Now we impose Hirota's bilinear relation
hirota = FXXXX*F-4*FXXX*FX+3*FXX^2+4*FX*FT-4*FXT*F+3*FYY*F-3*FY^2;
-- We impose that all coefficients vanish and we get the condtion that we are looking for.
H = sub(ideal((coefficients(hirota))_1),R);
H = ideal mingens H;
numgens H

J = jacobian(H);

In what follows we define the parametrisation and then we plug it in the Jacobian of the Hirota variety. To do this we assume the parameters \(\lambda_0 = \lambda_1 = \dots = \lambda_g =1\) and the parameters \(\kappa_i\) to be random values in the field \(\texttt{C}\), otherwise a completely symbolic computation would be computationally too hard.

--we create the list of indices appearing in the kappas in the parametrization for each vertex of the cube
I = mutableMatrix(ZZ,g,2^g);
for k from 0 to p do {
  for i from 0 to g-1 do{
      if i == 0 then {
          if (cube_k)_i == 0 then
             I_(i,k) = 2
          else
            I_(i,k) = 1}
      else
          if (cube_k)_i == 0 then
              I_(i,k) = 2*i+2
       else
             I_(i,k) = 2*i+1
 }
}


--we create a matrix whose entries are the parametrization for the a_i's
param = mutableMatrix(C,1,p+1);
--initialize the matrix param to have all 1's as entries
for i from 0 to 0 do {
    for j from 0 to p do
      param_(i,j) = 1
  }
-- vector of random entries for the kappa parameters
kk={};
for i from 0 to kappas-1 do
kk = append(kk,random(C));
#kk == kappas
for i from 0 to 0 do {
    for j from 0 to p do {
        for t from 0 to g-2 do {
            for s from t+1 to g-1 do
            param_(i,j)=param_(i,j)*(kk_(I_(t,j)-1) - kk_(I_(s,j)-1))
        }
    }
}

--parametrization for u,v,w
Puvw = {};
for i from 1 to kappas-1 do {
      if i%2==1 then
      Puvw = append(Puvw,kk_(i-1)-kk_(i));
}
for i from 1 to kappas-1 do {
      if i%2==1 then
      Puvw = append(Puvw,kk_(i-1)^2-kk_(i)^2);
}
for i from 1 to kappas-1 do {
      if i%2==1 then
      Puvw = append(Puvw,kk_(i-1)^3-kk_(i)^3);
}

G = mutableMatrix(C,1,r);
for i from 0 to 0 do {
    for j from 0 to 3*g-1 do
        G_(i,j) = Puvw_j;
    for j from 3*g to r-1 do
        G_(i,j) = param_(0,j-3*g)
        }
G = matrix G;


f = map(C,R,G);


expectedRank = r-(3*g+1)
tang = f(J);
rank tang