//------Singular code used in the article quasi-modular forms for triangular groups-------------- //-----Connection formula-------------------------------------------------------------- LIB "linalg.lib"; ring r=(0,A,B,C),x,dp; number a=C; number b=A*B*C; number c=A*C; matrix M1[2][2]=c/b,a,1,1; matrix M2[2][2]=-c/a,-1,1,a; print((B^(-1)-C)*M2*inverse(M1)); matrix M3[2][2]=1,-c/b,-1,c/a; matrix M4[2][2]=-1,1,1,-c; print((A-B^(-1))*M4*inverse(M3)); print((A*C-1)*inverse(M2*inverse(M1))); matrix P1=M2*inverse(M1); matrix P2= M4*inverse(M3); print( P2*inverse(P1)); //------------------------------------------------------------------------------------ //-----Conjugating the monodromy group in the previous article "On Ramanujan relations..." to get a real monodromy---- LIB "linalg.lib"; ring r=(0,v_1,v_i),x,dp; number v_0=1; matrix M1[2][2]=v_1,0,(1+v_1*v_i)/v_1,1/v_1; matrix M2[2][2]=1/v_0,(1/v_0)*(-v_1/v_i-v_0^2),0,v_0; matrix M3[2][2]=-v_i/v_1, -v_i/v_1-1, (-v_i/v_1)*(-1-v_1*v_i),(-v_i/v_1)*(-1-v_1*v_i)+1; M3=(1/v_i)*M3; print(M3*M2*M1); matrix g[2][2]=(1+v_1*v_i)/v_1, 1/v_1,0,-1; matrix S1=g*M1*inverse(g); matrix S2=g*M2*inverse(g); matrix S3= g*inverse(M2*M1)*inverse(g); print(S1); print(S2); print(S3); //matrix magic[2][2]=1,v_1+1/v_1,0,1; //print(magic*S1*inverse(magic)); //---------------------------------------------------------------------------------------- //------cheking the relation between theta series and our solution in the infty-infty-infty case---------------------- LIB "linalg.lib"; LIB "foliation.lib"; LIB "atkins.lib"; ring r=(0,nu,m_1,m_i), (x(1..3),q),dp; int i,j; int til=100; ideal II=q^til; II=std(II); list pose=t1t2t3(0,0,til,2^3); pose[2]=pose[2]+1; list pose1=1,1,1; for (i=1; i<=3;i=i+1) { pose[i]=subst(pose[i], q,q^4); pose[i]=(-1)*pose[i];} poly komak; for (i=1; i<=3;i=i+1) { for (j=1; j<=size(pose[i]);j=j+1) { pose[i]=pose[i]-pose[i][j]+pose[i][j]/deg(pose[i][j]); } komak=1; for (j=1; j<=til;j=j+1) { komak=komak*pose[i]/j; komak=reduce(komak, II); pose1[i]=pose1[i]+komak; } } pose1[2]=pose1[2]*2*q; //---------------------------------------------------------------------------------------- //---------------------checkin---2-3-infty-------------------------------------- LIB "linalg.lib"; LIB "foliation.lib"; LIB "atkins.lib"; ring r=(0,nu,m_1,m_i), (x(1..3),q),dp; int iteration=30; ideal II=q^iteration; II=std(II); list t23=EisensteinTriangular(1/3,1/2,iteration,2^3*3); //----cheking 3-3-infty--------------------- list t33=EisensteinTriangular(1/3,1/3,iteration); poly aa=t23[1][1]; number c_2=-number(3^5)/number(2^6); //The square root of its inverse is the true c_2 aa=subst(aa,q, c_2*q); aa=subst(aa, q, q^2); aa=reduce(aa, II); t33[1][1]-aa; poly bb=t23[1][2]; bb=subst(bb,q, c_2*q); bb=subst(bb, q, q^2); bb=reduce(bb, II); bb-(1/2)*t33[1][2]-(1/2)*t33[2][2]; reduce(aa^3-t33[1][2]*t33[2][2],II); poly cc=t23[3]; cc=subst(cc,q, c_2*q); cc=subst(cc, q, q^2); cc=reduce(cc, II); t33[3]-cc; //-----m-infty-infty--------------- int m=2; list tmi=t1t2t3(0,1/number(m), iteration, -2^3); reduce( tmi[1]-tmi[2]-(m*subst(t23[3],q,q^m)-t23[3])/number(m-1), II); list tmi=EisensteinTriangular(0,1/number(m), iteration, -2^3); reduce(16/15*subst(t23[2][1],q,q^m)-1/15*t23[2][1]-tmi[2][2] , II); reduce(4/3*subst(t23[3],q,q^m)-1/3*t23[3]-tmi[3],II); int m=3; list tmi=t1t2t3(0,1/number(m), iteration, -3/2); poly E2=tmi[1]-tmi[2]; reduce( tmi[1]-tmi[2]-(m*subst(t23[3],q,q^m)-t23[3])/number(m-1), II); list tmi=EisensteinTriangular(0,1/number(m), iteration, -3/2); reduce(81/80*subst(t23[2][1],q,q^m)-1/80*t23[2][1]-tmi[2][2] , II); reduce( 243/112*subst(t23[1][2],q,q^m)-5/112*t23[1][2]-tmi[2][3]-9/8*E2^3, II); reduce(9/8*subst(t23[3],q,q^m)-1/8*t23[3]-tmi[3],II); //----2-m-infty---------------------------------- int m=4; int which1=1; int k=2; int which2=1; list c_2=2, 3/8; list t2m=EisensteinTriangular(1/number(m),1/2,iteration, c_2[which1]); list E=t23[3], t23[1][1],t23[1][2]; list E2m=t2m[3], t2m[1][1], t2m[1][2]; number cons1=(1/number(m/2)^(k/2)); reduce (1/(cons1+1)*(cons1*E[which2]+subst(E[which2], q, q^(m/2)))- E2m[which2], II); //----m-m-infty-------------- list tmm=EisensteinTriangular(1/number(m),1/number(m),iteration); list cc_2=-2^8,-3^5*2^6; subst(t2m[1][1], q, cc_2[which1]*q); tmm[1][1]; (1/2)*tmm[1][2]+(1/2)*tmm[2][2]; subst(t2m[1][2], q, cc_2[which1]*q); reduce(tmm[1][2]*tmm[2][2],II); reduce( subst(t2m[1][1]^3, q, cc_2[which1]*q), II); tmm[3]; reduce( subst(t2m[3], q, cc_2[which1]*q), II); //-----------Cheking the conjecture-calculating the prime powers---------------------------- LIB "linalg.lib"; LIB "foliation.lib"; LIB "atkins.lib"; ring r=(0,nu,m_1,m_i), (x(1..3),q),dp; int pupto=300; int iteration=182; int i; poly pos; intvec pow; int count; number komak; int mm_1; int mm_i; number vv_1; number vv_i; list lll; for (mm_1=1; mm_1<=30;mm_1=mm_1+1) { vv_1=1/number(mm_1); if (mm_1==30){vv_1=0;} for (mm_i=1; mm_i<=mm_1;mm_i=mm_i+1) { vv_i=1/number(mm_i); lll=t1t2t3primepowers(vv_1,vv_i,iteration, pupto); vv_1, vv_i; lll; write("powers", vv_1,vv_i); write("powers", lll); } } //-----------------------------Calculating the polynomial structure of the recursion------------------------------- LIB "linalg.lib"; LIB "foliation.lib"; LIB "atkins.lib"; ring r=(0,nu,m_1,m_i), (x(1..3),q),dp; number v_0=0; number v_1=1/m_1; number v_i=1/m_i; number a=1/2*(1+v_1-v_i-v_0); number b=1/2*(1+v_0-v_i-v_1); number c=1/2*(1+v_i-v_1-v_0); poly t(1)=var(1);poly t(2)=var(2);poly t(3)=var(3); list vecfield=HalphenRamanujan(2, list(t(1..3)), list(a,b,c)); int i,j; vecfield[1]=vecfield[1]-vecfield[3]; for (i=1; i<=3;i=i+1){vecfield[i]=subst(vecfield[i],t(1),t(1)+t(3));} list seco=m_1^2*m_i^2, m_1*m_i+m_1+m_i, m_1^2*m_i^2-m_1^2*m_i+m_1*m_i^2; list pose=0+seco[1]*t(1),-1+seco[2]*t(2),0+seco[3]*t(3); for (i=1; i<=3;i=i+1) { for (j=1; j<=3;j=j+1) { vecfield[i]=subst(vecfield[i],t(j), pose[j]); } vecfield[i]=vecfield[i]/seco[i]; } int di=3; matrix Vm=derivatives(vecfield, list(t(1..3))); for (i=1; i<=di;i=i+1){Vm=subst(Vm,t(i),0);} matrix Id[di][di]; for (i=1; i<=di;i=i+1){Id[i,i]=1;} matrix speed[di][di]=inverse(Vm-nu*Id); det(Vm-nu*Id); det(Vm-nu*Id)*speed; matrix A=Vm; A[1..3,1]=submat(A, 1..3,1)-submat(A,1..3,3);