\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\ This program provides the compatational steps to prove Theorem 4.5 \\ fix of the built-in lift(x), which has a small bug LIFT(x) = { local(t = type(x)); while (t == "t_INTMOD" || t == "t_POLMOD", x = lift(x); t = type(x)); x; } default(breakloop,0) z; zet1;zet2; X; r2; \\r2; r1=1; \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\ CONSTRUCTION OF THE EQUATION IN ROOTS OF UNITY om = r1/(z-xx)-r1/(z-y)+r2/(z-u)-r2/(z+u)-r1/(z+xx)+r1/(z+y); den = (z^2-xx^2)*(z^2-y^2)*(z^2 - u^2); nu = om*den; factorednum = polcoeff(nu,4,z)*(z-1)^2*(z+1)^2; diffnum = nu -factorednum; \\ diffnum needs to be zero to have a differential of type (2,2) \\ this gives two conditions, E1 and E2 E1 = polcoeff(diffnum,2,z); \\ (-2*u*xx^2 + (-2*u*y^2 + 4*u))*r2 + (2*y*xx^2 + (-2*y^2 + (-2*u^2 + 4))*xx + (2*u^2 - 4)*y)*r1 E2 = polcoeff(diffnum,0,z)/2; \\ = ((u*y^2*xx^2 - u)*r2 + (-u^2*y*xx^2 + (u^2*y^2 - 1)*xx + y)*r1) E1s = subst(subst(subst(E1,xx,(1-X)/(1+X)),y,(1-zet1*X)/(1+zet1*X)), u, (1-zet2)/(1+zet2)); \\ clear denominators E1s = (1+X)^2*(1+zet1*X)^2*(zet2+1)^2*E1s/X; \\ ((-8*r2 + 8)*X^2*zet2^2 + (32*X^2 + 16*X)*zet2 + (8*r2 + 8)*X^2)*zet1^2 + (((-8*r2 - 8)*X^2 - 32*r2*X + (-8*r2 + 8))*zet2^2 + (-32*X^2 + 32)*zet2 + ((8*r2 - 8)*X^2 + 32*r2*X + (8*r2 + 8)))*zet1 + ((-8*r2 - 8)*zet2^2 + (-16*X - 32)*zet2 + (8*r2 - 8)) E2s = subst(subst(subst(E2,xx,(1-X)/(1+X)),y,(1-zet1*X)/(1+zet1*X)), u, (1-zet2)/(1+zet2)); \\ clear denominators E2s = (1+X)^2*(1+zet1*X)^2*(zet2+1)^2*E2s/X; \\= ((4*r2 - 4)*X^2*zet2^2 - 8*X*zet2 + (-4*r2 - 4)*X^2)*zet1^2 + (((4*r2 + 4)*X^2 + (4*r2 - 4))*zet2^2 + ((-4*r2 + 4)*X^2 + (-4*r2 - 4)))*zet1 + ((4*r2 + 4)*zet2^2 + 8*X*zet2 + (-4*r2 + 4)) Eq = E1s - polcoeff(E1s,2,X)/polcoeff(E2s,2,X)*E2s; Eq /= 64*X; Eq = numerator(Eq); \\ check that that it coincides with the written equation eq_ecrit = r2*(r2-1)*zet1 + r2*(r2-1)*zet1^2*zet2^4 - 2*(r2^2-1)*zet1*zet2^2 - 2*(r2^2-1)*zet1^2*zet2^2 +r2*(r2+1)*zet1^2 + r2*(r2+1)*zet1*zet2^4 -2*zet1^3*zet2^2 -2*zet2^2; \\ Check that the equation is as written in the text print("same equation: ", Eq == - eq_ecrit ) \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\ List of exponents of the equation in the order of Theorem 4.5 Exps = [1,0;2,4;1,2;2,2;2,0;1,4;3,2;0,2]; \\ checking for triples to be good in the sense defined before Lemma 4.3 for(i=1,8,for(j=i+1,8,for(k=j+1,8,M = [Exps[j,1]-Exps[i,1],Exps[k,1]-Exps[i,1];Exps[j,2]-Exps[i,2],Exps[k,2]-Exps[i,2]]; dt= matdet(M); if(abs(dt)==0,print(i,j,k," dt=",dt,))))) \\ List of bad triples 136 dt=0 245 dt=0 347 dt=0 348 dt=0 378 dt=0 478 dt=0 \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\ Check the sub-relations of length two, resulting from Lemma 4.6 \\ Partition (12) \\ zet2 = \pm I implies zet1 = -1, excluded E12 = subst(subst(Eq,zet1,-1/zet2^4)*zet2^10,zet2,x)/(x^2-1)/(x^2+1) \\ Partition (56) \\ zet2 = \pm I implies zet1 = -1, excluded subst(Eq,zet1,-zet2^4) E56 = subst(%,zet2,x)/x^2/(x^2+1)/(x^2-1) E12 == subst(-E56,r2,-r2) \\ we retrieve the negatives of the above solutions. \\ Partition (78) E78 = subst(subst(Eq,zet1,-1/zet2^4),zet2,x)/(x^2+1)/(x^2-1)*x^10 \\ The special case: the only possibility given by the simple \\ factors that is not ruled out by the primitivity hypothesis EqII = subst(Eq,zet2,I) \\ -2*zet1^3 + (-4*r2^2 + 2)*zet1^2 + (-4*r2^2 + 2)*zet1 - 2 subst(EqII,r2,sqrt(2)/2)/(-2) \\ implies that zet1^3 = -1 \\ check the quadratic irrationals that annihilate coefficients \\ the largest N with \varphi(N) \leq 16 is N=60. \\ the equations are of degree 8 over a quadratic field, \\ hence the degree of a solution is at most 16. pr1 = polroots(subst(E56,r2,sqrt(2))) \\ up to complex conjugation and negatives, there are two solutions to check. tc = pr1[1] tc0 = 1; for(i=1,61,tc0*=tc; if(abs(tc0-1)<0.001,print(i," ",c0),)) tc = pr1[5] tc0 = 1; for(i=1,61,tc0*=tc; if(abs(tc0-1)<0.001,print(i," ",c0),)) pr2 = polroots(subst(E78,r2,sqrt(13)/3)) \\ up to complex conjugation and negatives, there is only solutions on the \\ unit circle tc = pr2[5] tc0 = 1; for(i=1,61,tc0*=tc; if(abs(tc0-1)<0.001,print(i," ",c0),)) pr3 = polroots(subst(E78,r2,sqrt(1/3))) \\ up to complex conjugation and negatives, there are two solutions to check. tc = pr3[1] tc0 = 1; for(i=1,61,tc0*=tc; if(abs(tc0-1)<0.001,print(i," ",c0),)) tc = pr3[5] tc0 = 1; for(i=1,61,tc0*=tc; if(abs(tc0-1)<0.001,print(i," ",c0),)) \\ Conclusion: no solution in either case \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\ search for solutions as described in Section 4.4 {for(i=1,8,for(j=i+1,8,for(k=j+1,8, e = 2^(i-1)+2^(j-1)+2^(k-1); M1 = vecextract(Exps~,e); M1r = matrix(2,2,s,t,M1[s,t+1]-M1[s,1]); d1 = matdet(M1r); M2 = vecextract(Exps~,255-e); M2r = matrix(2,4,s,t,M2[s,t+1]-M2[s,1]); d=d1; for(l=1,4,for(m=l+1,4,MM = matrix(2,2); MM[,1]= M2r[,l]; MM[,2] = M2r[,m]; d=gcd(d,matdet(MM)))); if(d==1,,print(i,j,k," d=",d,)); )))} \\ \\123 d=2 \\124 d=2 \\125 d=2 \\126 d=2 \\127 d=2 \\128 d=2 \\134 d=2 \\135 d=2 \\136 d=2 \\137 d=2 \\138 d=2 \\145 d=2 \\146 d=2 \\147 d=2 \\148 d=2 \\156 d=2 \\157 d=2 \\158 d=2 \\167 d=2 \\168 d=2 \\178 d=2 \\234 d=2 \\235 d=2 \\236 d=2 \\237 d=2 \\238 d=2 \\245 d=2 \\246 d=2 \\247 d=2 \\248 d=2 \\256 d=2 \\257 d=2 \\258 d=2 \\267 d=2 \\268 d=2 \\278 d=2 \\345 d=2 \\346 d=2 \\347 d=2 \\348 d=2 \\356 d=2 \\357 d=2 \\358 d=2 \\367 d=2 \\368 d=2 \\378 d=2 \\456 d=2 \\457 d=2 \\458 d=2 \\467 d=2 \\468 d=2 \\478 d=2 \\567 d=2 \\568 d=2 \\578 d=2 \\678 d=2 \\ {gcm(M,r)=local(g); g=0; for(l=1,r,for(m=l+1,r,MM = matrix(2,2); MM[,1]= M[,l]; MM[,2] = M[,m]; g=gcd(g,matdet(MM)))); g;} \\ Case (4,4) {for(i=1,8,for(j=i+1,8,for(k=j+1,8,for(n=k+1,8, e = 2^(i-1)+2^(j-1)+2^(k-1)+2^(n-1); M1 = vecextract(Exps~,e); M1r = matrix(2,3,s,t,M1[s,t+1]-M1[s,1]); M2 = vecextract(Exps~,255-e); M2r = matrix(2,3,s,t,M2[s,t+1]-M2[s,1]); d=gcd(gcm(M1r,3),gcm(M2r,3)); if(d==1,,print(i,j,k,n," d=",d,)); ))))} \\1234 d=2 \\1235 d=2 \\1236 d=2 \\1237 d=2 \\1238 d=2 \\1245 d=2 \\1246 d=2 \\1247 d=2 \\1248 d=2 \\1256 d=4 \\1257 d=2 \\1258 d=2 \\1267 d=2 \\1268 d=2 \\1278 d=2 \\1345 d=2 \\1346 d=2 \\1347 d=2 \\1348 d=2 \\1356 d=2 \\1357 d=2 \\1358 d=2 \\1367 d=4 \\1368 d=2 \\1378 d=2 \\1456 d=2 \\1457 d=2 \\1458 d=2 \\1467 d=2 \\1468 d=4 \\1478 d=2 \\1567 d=2 \\1568 d=2 \\1578 d=2 \\1678 d=2 \\2345 d=2 \\2346 d=2 \\2347 d=2 \\2348 d=2 \\2356 d=2 \\2357 d=4 \\2358 d=2 \\2367 d=2 \\2368 d=2 \\2378 d=2 \\2456 d=2 \\2457 d=2 \\2458 d=4 \\2467 d=2 \\2468 d=2 \\2478 d=2 \\2567 d=2 \\2568 d=2 \\2578 d=2 \\2678 d=2 \\3456 d=2 \\3457 d=2 \\3458 d=2 \\3467 d=2 \\3468 d=2 \\3478 d=4 \\3567 d=2 \\3568 d=2 \\3578 d=2 \\3678 d=2 \\4567 d=2 \\4568 d=2 \\4578 d=2 \\4678 d=2 \\5678 d=2 \\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\ Loop through the case (8) qr = r2^2 + be*r2 + ga; PR = polresultant(qr,eq_ecrit,r2); giveeq(N,i,j) = subst(subst(eq_ecrit, zet1,exp(2*Pi*I*i/N)),zet2,exp(2*Pi*I*j/N)); givereq(N,i,j) = ps = subst(subst(eq_ecrit, zet1,exp(2*Pi*I*i/N)),zet2,exp(2*Pi*I*j/N)); ps = round(10^20*ps)/10^20; ps=ps/polcoeff(ps,2,r2); \\\\\\\ \\ cross-check that the PRij pick all the coefficients from PR PR0 = polcoeff(PR,0,be); PR1 = polcoeff(PR,1,be); PR2 = polcoeff(PR,2,be); PR00 = polcoeff(PR0,0,ga); PR01 = polcoeff(PR0,1,ga); PR02 = polcoeff(PR0,2,ga); PR10 = polcoeff(PR1,0,ga); PR11 = polcoeff(PR1,1,ga); PR12 = polcoeff(PR1,2,ga); PR20 = polcoeff(PR2,0,ga); PR21 = polcoeff(PR2,1,ga); PR22 = polcoeff(PR3,2,ga); {PR == PR00*ga^0*be^0 + PR01*ga^1*be^0 + PR02*ga^2*be^0 + PR10*ga^0*be^1 + PR11*ga^1*be^1 + PR12*ga^2*be^1 + PR20*ga^0*be^2 + PR21*ga^1*be^2 + PR22*ga^2*be^2} \\ =1 \\\\\\\\\\\\\ End cross-check \\ remove bad factors, since these solutions correspond to rational r (instead of quadratic) rbf(h) = if(subst(h,ga,2*be-4)==0,h =h/(2*be-ga-4),); if(subst(h,ga,-2*be-4)==0, h=h/(2*be+ga+4),); if(subst(h,ga,-be-1)==0, h=h/(be+ga+1),); if(subst(h,ga,be-1)==0,h=h/(be-ga-1),);h; testsol(N,i,j,b,g) = rt = (-b+sqrt(b^2-4*g))/2; norml2(subst(subst(subst(eq_ecrit,r2,rt), zet1,exp(2*Pi*I*i/N)),zet2,exp(2*Pi*I*j/N))) \\ List of N that are a priori possible Nstart = [1,3,5,7,11,13,3*5,17,3*7,5*7,5*11,5*13,7*11] NList = concat(Nstart,concat(2*Nstart,concat(4*Nstart,concat(8*Nstart,concat(16*Nstart,32*Nstart))))) SolList = []; \\ Solutions CandList = []; \\ Candidates: DMList = []; \\ Also candidates: { for(NN=1,length(NList), N=NList[NN]; print("Now working with N=",N); P = polcyclo(N,v); Np = poldegree(P); for(i=1,N-1,print("current i=",i); for(j=1,(N-1)/2, \\ print("current j=",j);\\ may restrict using N-e_xy, N-eU symmetry if(gcd(i,gcd(j,N)) == 1, if(i == N/2,, \\ treat \zeta_XY = -1 separately eqlist = []; PR00s = subst(subst(PR00,zet1,Mod(v^i,P)),zet2,Mod(v^j,P)); PR01s = subst(subst(PR01,zet1,Mod(v^i,P)),zet2,Mod(v^j,P)); PR02s = subst(subst(PR02,zet1,Mod(v^i,P)),zet2,Mod(v^j,P)); PR10s = subst(subst(PR10,zet1,Mod(v^i,P)),zet2,Mod(v^j,P)); PR11s = subst(subst(PR11,zet1,Mod(v^i,P)),zet2,Mod(v^j,P)); PR12s = subst(subst(PR12,zet1,Mod(v^i,P)),zet2,Mod(v^j,P)); PR20s = subst(subst(PR20,zet1,Mod(v^i,P)),zet2,Mod(v^j,P)); PR21s = subst(subst(PR21,zet1,Mod(v^i,P)),zet2,Mod(v^j,P)); PR22s = subst(subst(PR22,zet1,Mod(v^i,P)),zet2,Mod(v^j,P)); PRs = LIFT(PR00s)*ga^0*be^0 + LIFT(PR01s)*ga^1*be^0 + LIFT(PR02s)*ga^2*be^0 + LIFT(PR10s)*ga^0*be^1 + LIFT(PR11s)*ga^1*be^1 + LIFT(PR12s)*ga^2*be^1 + LIFT(PR20s)*ga^0*be^2 + LIFT(PR21s)*ga^1*be^2 + LIFT(PR22s)*ga^2*be^2; \\PRs = LIFT(PR00s*ga^0*be^0 + PR01s*ga^1*be^0 + PR02s*ga^2*be^0 + PR10s*ga^0*be^1 + PR11s*ga^1*be^1 + PR12s*ga^2*be^1 + PR20s*ga^0*be^2 + PR21s*ga^1*be^2 + PR22s*ga^2*be^2); for(k=0,Np, if(polcoeff(PRs,k,v) ==0,, eqlist = concat(eqlist,rbf(polcoeff(PRs,k,v))))); if(length(eqlist) <=1, print("Cand:",i," ",j," ",PRs); CandList=concat(CandList,[[N,i,j]]), prv = vector(length(eqlist)-1,i,polresultant(eqlist[1],eqlist[i+1],be)); nz = 0; \\ till now no non-zero resultant found for(k=1,length(prv),if(prv[k]==0,,nz=1; FA=factor(prv[k])~; k = length(prv)+1); \\ end the loop, if a non-zero resultant was found ); if(nz==1, for(l=1,length(FA), if(poldegree(FA[1,l],ga) == 1, \\ print(i,j," l=",l," Factor: ",FA[1,l]); sga = -polcoeff(FA[1,l],0,ga)/polcoeff(FA[1,l],1,ga); \\ gamma to be substituted in seqlist = []; for(m=1,length(eqlist),s = subst(eqlist[m],ga,sga); if(s==0,,seqlist=concat(seqlist,[s]))); \\ print(i," ",j," seqlist: "seqlist); if(poldegree(seqlist[1],be)> 0, FAB = factor(seqlist[1]); \\ print(FAB); for(m=1,length(FAB~), \\ print("m=",m); if(poldegree(FAB[m,1],be) == 1, sbe = -polcoeff(FAB[m,1],0,be)/polcoeff(FAB[m,1],1,be); \\ beta to be substituted in \\ print("found beta = ",sbe); issol=1; for(n=2,length(seqlist), if(subst(seqlist[n],be,sbe)==0,,issol=0; n=length(seqlist)+1)); if(issol==1, \\print("Eqsolution: N=",N," i="i," j=",j," ga=",sga," be=",sbe); \\ print("here"); if((sga<0) && (abs(testsol(N,i,j,sbe,sga))<0.0001), print("TRUESOLUTION: N=",N," i="i," j=",j," ga=",sga," be=",sbe); SolList = concat(SolList,[[N,i,j,sbe,sga]]),); ) , \\ do nothing with non-lin factors in FAB ); ); \\ end for(m=..) ,) \\ do nothing if the factor is constant (as poly in beta) , \\ do not do anything with non-linear factors ) \\ end if ) \\ end for(l=) , print(i," ",j," All resultants are zero, check by different method"); DMList=concat(DMList,[[N,i,j]]); ); \\ end if nz==1 )) ,) )) \\ end for i,j looping [1,N] ) \\ end for N looping NList } \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\ These routines give the list from Theorem 4.5 print("The list of certified solutions: ",SolList) print("Candidates to be checked directly: ('CandList') ", CandList) print("Candidates to be checked directly: ('DMList') ", DMList) print("Now making rationality checks") rat2test(N,i,j) = ps = subst(subst(eq_ecrit, zet1,exp(2*Pi*I*i/N)),zet2,exp(2*Pi*I*j/N)); pr = polroots(ps); print1(algdep(pr[1],1), " and ", algdep(pr[1],2)); for(i=1,length(CandList),print(rat2test(CandList[i][1],CandList[i][2],CandList[i][3]), " provides the rationality test for", CandList[i])) for(i=1,length(DMList),print(rat2test(DMList[i][1],DMList[i][2],DMList[i][3])," provides the rationality test for ", DMList[i] )) \\ astronomic coefficients show failure of the rationality test. \\The list of certified solutions: [[48, 16, 9, 0, -3], [48, 16, 21, 0, -3], [48, 32, 3, 0, -3], [48, 32, 15, 0, -3]] \\Candidates to be checked directly: ('CandList') [[3, 1, 1], [3, 2, 1], [6, 1, 1], [6, 2, 1], [6, 4, 1], [6, 5, 1], [4, 1, 1], [4, 3, 1], [12, 2, 3], [12, 2, 5], [12, 4, 3], [12, 4, 5], [12, 8, 3], [12, 8, 5], [12, 10, 3], [12, 10, 5], [8, 2, 1], [8, 2, 3], [8, 6, 1], [8, 6, 3]] \\Candidates to be checked directly: ('DMList') [[6, 1, 2], [6, 5, 2], [12, 4, 1], [12, 8, 1]] \\Now making rationality checks \\x + 2 and x + 20 is rationality test for[3, 1, 1] \\x + 1 and x + 10 is rationality test for[3, 2, 1] \\3*x + 2 and 3*x^2 + 2*x0 is rationality test for[6, 1, 1] \\x + 1 and x + 10 is rationality test for[6, 2, 1] \\x + 2 and x + 20 is rationality test for[6, 4, 1] \\x + 1 and x + 10 is rationality test for[6, 5, 1] \\x + 1 and x + 10 is rationality test for[4, 1, 1] \\x + 1 and x + 10 is rationality test for[4, 3, 1] \\1023286908188737*x + 723573111879672 and 2*x^2 - 10 is rationality test for[12, 2, 3] \\x + 2 and x + 20 is rationality test for[12, 2, 5] \\779939566141121*x + 955226983626719 and 2*x^2 - 30 is rationality test for[12, 4, 3] \\858763866804299*x + 3754757215926716 and x^2 + 3*x - 60 is rationality test for[12, 4, 5] \\779939566141121*x + 955226983626719 and 2*x^2 - 30 is rationality test for[12, 8, 3] \\858763866804299*x + 1178465615513819 and x^2 - 3*x - 60 is rationality test for[12, 8, 5] \\1023286908188737*x + 723573111879672 and 2*x^2 - 10 is rationality test for[12, 10, 3] \\x + 1 and x + 10 is rationality test for[12, 10, 5] \\x + 1 and x + 10 is rationality test for[8, 2, 1] \\x + 2 and x + 20 is rationality test for[8, 2, 3] \\x + 2 and x + 20 is rationality test for[8, 6, 1] \\x + 1 and x + 10 is rationality test for[8, 6, 3] \\x + 1 and x + 10 is rationality test for [6, 1, 2] \\3*x + 2 and 3*x^2 + 2*x0 is rationality test for [6, 5, 2] \\858763866804299*x + 1178465615513819 and x^2 - 3*x - 60 is rationality test for [12, 4, 1] \\858763866804299*x + 3754757215926716 and x^2 + 3*x - 60 is rationality test for [12, 8, 1]