//-------IN THE DIRECTORY WHERE YOU RUN SINGULAR THE MUST BE THE FILES EisensteinSeriesE2.txt EisensteinSeriesE4.txt EisensteinSeriesE.txt int d=2; //The integer in q to the d int noofeq=0; // The number of equations used after substituting Eisenstein series //in the polynomial relation with unknown coefficients is equal to the numbers //of variables. If they are linearly dependent then the solution depends on //some variables. In this case increase noofeq. It will increase the number //equations. int check=50; //The obtained relation is checked up to q to the number of variables +noofeq+check; //This number must be less than the number of monomials in the truncated Eisenstein series. //We have used the truncated Eisenstein series of degree <=500 intvec psifun=1, 3, 4, 6, 6, 12, 8, 12, 12, 18, 12, 24, 14, 24, 24, 24, 18, 36, 20, 36, 32, 36, 24, 48, 30, 42, 36, 48, 30, 72, 32, 48, 48, 54, 48, 72, 38, 60, 56, 72, 42, 96, 44, 72, 72, 72, 48, 96, 56, 90, 72, 84, 54, 108, 72, 96, 80, 90, 60, 144, 62, 96, 96, 96, 84, 144, 68, 108, 96; int sumd=psifun[d]; //This is in fact the dedekind psi function //--------------------The data of monomials appearing in the polynomial relations--------------------------------------------- ring r1=0,(t(1..3), s(1..3)),wp(1,2,3,1,2,3); int i,j,k; int a_0, a_1, a_2, a_3; list Ipoly=poly(0),poly(0),poly(0); k=1; i=-1; for (a_0=k*sumd; 0<=a_0;a_0=a_0-1){for (a_1=0; a_1<=k*sumd;a_1=a_1+1){for (a_2=0; a_2<=k*sumd;a_2=a_2+1){for (a_3=0; a_3<=k*sumd;a_3=a_3+1){ if (k*sumd==k*a_0+1*a_1+2*a_2+3*a_3) { i=i+1; Ipoly[1]=Ipoly[1]+t(k)^a_0*s(1)^a_1*s(2)^a_2*s(3)^a_3; } }}}} for (k=2; k<=3;k=k+1) { i=-1; for (a_0=k*sumd; 0<=a_0;a_0=a_0-1){for (a_2=0; a_2<=k*sumd;a_2=a_2+1){for (a_3=0; a_3<=k*sumd;a_3=a_3+1){ if (k*sumd==k*a_0+2*a_2+3*a_3) { i=i+1; Ipoly[k]=Ipoly[k]+t(k)^a_0*s(2)^a_2*s(3)^a_3; } }}} } intvec nc=size(Ipoly[1]),size(Ipoly[2]), size(Ipoly[3]); int noofmon=nc[1]; list Ipoly1=Ipoly; //--------------Defining coefficients of the polynomial relations as variables--------------------------------------------- intvec wei=1; for (i=2; i<=noofmon-1;i=i+1){wei=wei,1;} wei=wei,1,2,3,1,2,3; ring r2=0,(x(1..noofmon-1),t(1..3), s(1..3)),wp(wei); list Ipoly=imap(r1,Ipoly); for (i=1; i<=3;i=i+1){ Ipoly[i]=Ipoly[i]-t(i)^sumd; for (j=1; j<=size(Ipoly[i]);j=j+1) { Ipoly[i]=Ipoly[i]-Ipoly[i][j]+Ipoly[i][j]*x(j); } Ipoly[i]=Ipoly[i]+t(i)^sumd; } //---------------Finding polynomial relations---------------------------------- ring r3=0,(x(1..noofmon-1),q, t(1..3), s(1..3)),wp(1,wei); list Ipoly=imap(r2, Ipoly); string sss; sss="poly ssq(1)="+read("EisensteinSeriesE2.txt")+";"; execute(sss); sss="poly ssq(2)="+read("EisensteinSeriesE4.txt")+";"; execute(sss); sss="poly ssq(3)="+read("EisensteinSeriesE6.txt")+";"; execute(sss); intvec nor=-24,240,-504; ssq(1)=nor[1]*ssq(1); ssq(2)=nor[2]*ssq(2); ssq(3)=nor[3]*ssq(3); int whichone; ideal II; poly tq(1..3); poly sq(1..3); poly Ip; ideal III; poly Ipder; list xv; poly Ipp; ideal V_d; for (whichone=1; whichone<=3;whichone=whichone+1) { II=q^(nc[whichone]-1+noofeq+check); II=std(II); sq(1)=reduce(ssq(1),II); sq(2)=reduce(ssq(2),II); sq(3)=reduce(ssq(3),II); tq(1)=d^2*subst(sq(1),q,q^d);tq(2)=(d^4)*subst(sq(2),q,q^d);tq(3)=(d^6)*subst(sq(3),q,q^d); Ip=Ipoly[whichone]; Ip=subst(Ip,t(whichone),tq(whichone)); Ip=reduce(Ip, II); for (i=1; i<=3;i=i+1){ Ip=subst(Ip,s(i),sq(i)); Ip=reduce(Ip,II);} Ipder=Ip; III=0; for (i=1; i<=nc[whichone]-1+noofeq;i=i+1) { III=III,subst(Ipder, q,0); Ipder=diff(Ipder,q); } III=std(III); Ipp=Ipoly[whichone]; xv=list(); for (i=1; i<=nc[whichone]-1;i=i+1) { xv=insert(xv, reduce(x(i), III), size(xv)); Ipp=subst(Ipp,x(i),xv[i]); Ip=subst(Ip,x(i),xv[i]); } if ( Ip <> 0){"There is some mistake";} V_d=V_d, Ipp; } V_d=V_d[2],V_d[3],V_d[4]; for (i=1; i<=3;i=i+1){coef(V_d[i],t(i));} //write(":w poly", Ipp); //texobj("poly",coef(Ipp,t(whichone))); //-------------------------Finding an ideal defining V_d by iterating the derivation--------------------------------------------------------- ring r4=0, (t(1..3),s(1..3)),wp(1,2,3,1,2,3); int d=2; list vecfield=1/12*(t(1)^2-t(2)), 1/3*(t(1)*t(2)-t(3)), 1/2*(t(1)*t(3)-t(2)^2), 1/12*(s(1)^2-s(2))*d, 1/3*(s(1)*s(2)-s(3))*d, 1/2*(s(1)*s(3)-s(2)^2)*d; ideal V_d=imap(r3, V_d); int i,j; ideal dof; poly AA; int che=0; i=1; ideal Vstd; while (che==0) { i; dof=jacob(V_d[i]); AA=dof[1]*vecfield[1]+dof[2]*vecfield[2]+dof[3]*vecfield[3]+dof[4]*vecfield[4]+dof[5]*vecfield[5]+dof[6]*vecfield[6]; V_d=V_d, AA; Vstd=std(V_d); che=1; for (j=size(V_d)-2;j<=size(V_d); j=j+1) { dof=jacob(V_d[j]); AA=dof[1]*vecfield[1]+dof[2]*vecfield[2]+dof[3]*vecfield[3]+dof[4]*vecfield[4]+dof[5]*vecfield[5]+dof[6]*vecfield[6]; if ( reduce(AA,Vstd)<>0) {che=0;} } i=i+1; } //-----------------------------Calculating J_d,i and cheking theorem 3---------------------------------------- ring r5=0, (t(1..3),s(1..3)),wp(1,2,3,1,2,3); int d=2; list vecfield=1/12*(t(1)^2-t(2)), 1/3*(t(1)*t(2)-t(3)), 1/2*(t(1)*t(3)-t(2)^2), 1/12*(s(1)^2-s(2))*d, 1/3*(s(1)*s(2)-s(3))*d, 1/2*(s(1)*s(3)-s(2)^2)*d; list Ipoly=imap(r1, Ipoly1); matrix A1[nc[1]][nc[1]]; matrix A2[nc[2]][nc[2]]; matrix A3[nc[3]][nc[3]]; list mat=A1,A2,A3; for (i=1; i<=3;i=i+1) { for (j=1; j<=nc[i];j=j+1){mat[i][1,j]=Ipoly[i][j];} } ideal dof; for (k=1; k<=3;k=k+1) { for (i=2; i<=nc[k];i=i+1) { for (j=1; j<=nc[k];j=j+1) { dof=jacob(mat[k][i-1,j]); k,i,j; mat[k][i,j]= dof[1]*vecfield[1]+dof[2]*vecfield[2]+dof[3]*vecfield[3]+dof[4]*vecfield[4]+dof[5]*vecfield[5]+dof[6]*vecfield[6]; } } } ideal V_d=imap(r4, V_d); V_d=std(V_d); dim(V_d); for (int i=1; i<=3; i=i+1){reduce( det(mat[i]), V_d); } V_d=imap(r3, V_d); V_d; V_d=std(V_d); poly aa=det(mat[2]); i=1; poly ch=1; while(ch<>0){ch=reduce(ch*aa,V_d); i=i+1;i; size(ch);} //---------------------------Investigating the ideal generated by I_d1,I_d2,I_d3-------------- ring r6=0, (t(1..3),s(1..3)),wp(1,2,3,1,2,3); int d=2; list vecfield=1/12*(t(1)^2-t(2)), 1/3*(t(1)*t(2)-t(3)), 1/2*(t(1)*t(3)-t(2)^2), 1/12*(s(1)^2-s(2))*d, 1/3*(s(1)*s(2)-s(3))*d, 1/2*(s(1)*s(3)-s(2)^2)*d; ideal V_d=imap(r3, V_d); ideal komaki=V_d,s(2)^3-s(3)^2; komaki=std(komaki); facstd(komaki); //-------------Lixo-cheking----------------------------------------------------------------------------------- ring rcheck=0, (t(1..3),s(1..3),q),wp(1,2,3,1,2,3,1); int d=2; string sss; sss="poly sq(1)="+read("EisensteinSeriesE2.txt")+";"; execute(sss); sss="poly sq(2)="+read("EisensteinSeriesE4.txt")+";"; execute(sss); sss="poly sq(3)="+read("EisensteinSeriesE6.txt")+";"; execute(sss); intvec nor=-24,240,-504; sq(1)=nor[1]*sq(1); sq(2)=nor[2]*sq(2); sq(3)=nor[3]*sq(3); ideal II=q^200; II=std(II); poly tq(1..3); sq(1)=reduce(sq(1),II); sq(2)=reduce(sq(2),II); sq(3)=reduce(sq(3),II); tq(1)=d^2*subst(sq(1),q,q^d);tq(2)=(d^4)*subst(sq(2),q,q^d);tq(3)=(d^6)*subst(sq(3),q,q^d); ideal I123= t(1)^3-6*t(1)^2*s(1)+12*t(1)*s(1)^2-8*s(1)^3-3*t(1)*s(2)+6*s(1)*s(2)-2*s(3), t(2)^3-18*t(2)^2*s(2)+33*t(2)*s(2)^2+484*s(2)^3-500*s(3)^2, t(3)^3-1323*t(3)*s(2)^3-66*t(3)^2*s(3)+10584*s(2)^3*s(3)+1452*t(3)*s(3)^2-10648*s(3)^3; I123=subst(I123, t(1),tq(1)); I123=subst(I123, t(2),tq(2)); I123=subst(I123, t(3),tq(3)); I123=subst(I123, s(1),sq(1)); I123=subst(I123, s(2),sq(2)); I123=subst(I123, s(3),sq(3)); q*diff(sq(1),q)-1/12*(sq(1)^2-sq(2)); q*diff(sq(2),q)-1/3*(sq(1)*sq(2)-sq(3)); q*diff(sq(3),q)-1/2*(sq(1)*sq(3)-sq(2)^2); d*q*diff(tq(1),q)-1/12*(tq(1)^2-tq(2)); d*q*diff(tq(2),q)-1/3*(tq(1)*tq(2)-tq(3)); d*q*diff(tq(3),q)-1/2*(tq(1)*tq(3)-tq(2)^2); -1/4*tq(1)^2*tq(2)+tq(1)*tq(2)*sq(1)-tq(2)*sq(1)^2+3/2*tq(1)^2*sq(2)+1/4*tq(2)*sq(2)-6*tq(1)*sq(1)*sq(2)+6*sq(1)^2*sq(2)+sq(2)^2+5/2*tq(1)*sq(3)-5*sq(1)*sq(3); -tq(2)^2*tq(3)+6*tq(1)*tq(2)^2*sq(2)+12*tq(2)*tq(3)*sq(2)-12*tq(2)^2*sq(1)*sq(2)-22*tq(1)*tq(2)*sq(2)^2-11*tq(3)*sq(2)^2+44*tq(2)*sq(1)*sq(2)^2-484*tq(1)*sq(2)^3+968*sq(1)*sq(2)^3+12*tq(2)^2*sq(3)-44*tq(2)*sq(2)*sq(3)+32*sq(2)^2*sq(3)+500*tq(1)*sq(3)^2-1000*sq(1)*sq(3)^2; list vecfield=(t(1)^2-1/12*t(2)), (4*t(1)*t(2)-6*t(3)), (6*t(1)*t(3)-1/3*t(2)^2), -d*(s(1)^2-1/12*s(2)), -d*(4*s(1)*s(2)-6*s(3)), -d*(6*s(1)*s(3)-1/3*s(2)^2); I123=subst(I123,t(2),t(2)/12); I123=subst(I123,t(3),t(3)/8); I123=subst(I123,s(2),s(2)/12); I123=subst(I123,s(3),s(3)/8);