\\ This pari file gives a certificate that odd spin components of minimal strata \\ are of general type for g>=19 running up to g =44, where this is proven by estimates. \\ To run that far we cannot loop over all distributions of prongs, but use estimates \\ for their sum of reciprocals. With this strategy the sharp D_NC-bounds of Proposition 5.13 \\ are hard to implement, so we use them only for E=2 and E=3 where we do loop \\ over all possible prong distributions. For more edges we use the general term \\ that the coefficient in R^\Gamma_NC is 1/E or better. \\ The complementary program 'onezerobruteforce' loops over all prong distributions \\ and gives the certificates of general type for the small values of $g$. allocatemem() allocatemem() allocatemem() allocatemem() allocatemem() allocatemem() default(breakloop,0) default(format, "g0.9") \\ minmax of possibly empty vector, value arbitrary, of correct sign. vectmin(v) = if(length(v)==0,1,vecmin(v)) vectmax(v) = if(length(v)==0,0,vecmax(v)) \\ Standard variables specialized to the minimal stratum. Minv = 1/(2*g-1); Mt = 0; Mtinv = 0; nt = 0; \\ graphs in the minimal stratum do not have legs on top level. kmu=4*g*(g-1)/(2*g-1); N=2*g; teta=kmu/8; ktop=Mt+nt-Mtinv+p-pinv; Ntop=ktop+vt+Mtinv+pinv; Nbot=N-Ntop; tetabot= (kmu-ktop)/8+(p-pinv)/8; wla = (12 + kmu/2)/kmu; \\ w_\lambda \\ general lower bounds for the whole setup: \\ lower bound for which it is justified to set vtop =1: \\ (vtop-1) needs to have positive coefficient and for \\ vtop>=2 this coefficient needs to compensate a 1/\ell \\ since the ramification of hyp. backbones is not taken \\ into account below in the non-compact-type routine. \\ (It is taken into account in the compact type, i.e. VDB case.) \\ We estimate coarsely -1/\ell >= -1. vtc = (6/wla*y-kmu/N)-1; vtlow = -polcoeff(vtc,0,y)/polcoeff(vtc,1,y); /* for(gg=19,44,print("g=",gg," gives vtop lower bound = ",subst(vtlow,g,gg)*1. )); \\g=19 gives vtop lower bound = 0.271139561 \\g=20 gives vtop lower bound = 0.265845704 \\g=21 gives vtop lower bound = 0.261062718 \\g=22 gives vtop lower bound = 0.256720024 \\g=23 gives vtop lower bound = 0.252759479 \\ ...... \\g=43 gives vtop lower bound = 0.212474757 \\g=44 gives vtop lower bound = 0.211427628 */ \\ classes of the Brill-Noether-type divisors in the format \\ [\lambda, Dhcoefficient, \Delta_irr coefficient, compact type coefficient] \\ where ct needs to be substitued as ct = i*(g-i) BN =[6,-(g+1)/(g+3),-(g+1)/(g+3),-6*ct/(g+3)]; Hur=[6,-(3*g^2+12*g-6)/(g+8)/(3*g-1),-(3*g^2+12*g-6)/(g+8)/(3*g-1),-6*ct*(3*g+4)/(g+8)/(3*g-1)]; psi1=1/kmu/(2*g-1)*[12,-1,ktop,ktop]; W=[-1,0,0,o]+(g+1)*g/2*psi1; NF=2*(g+3)/(g+1)/(g-2)*(BN+12/(g+3)/(g+2)*W); NF=6/NF[1]*NF; \\ upper bound for y for which it is valid to replace the compact type \\ edges by non-compact type for graphs that are not VDB (i.e. nctInterval). \\ We have to compare the larger CT-contribution in BN/Hur/Nfold against \\ the larger D_NC-term for 'other compact type'. {CTupperbd(sg) = if(sg%2==0,NCT=-2*(1-y)*Hur[3]-kmu/N/2,NCT=-2*(1-y)*BN[3]- 0 *kmu/N/2); \\ to be safe use R = 0 = \lim_{E \to \infty} 1/E if(sg%2==0,CT=-2*(1-y)*subst(Hur[4],ct,sg-1)-2*kmu/N,CT=-2*(1-y)*subst(BN[4],ct,sg-1)-2*kmu/N); pol = subst(CT-NCT,g,sg); return(-polcoeff(pol,0,y)/polcoeff(pol,1,y)); } /* for(gg=19,44,print("g=",gg," gives CTNCT-valid upper bound = ",CTupperbd(gg)*1. )); g=19 gives CTNCT-valid upper bound = 0.756756757 g=20 gives CTNCT-valid upper bound = 0.794058211 g=21 gives CTNCT-valid upper bound = 0.761075162 g=22 gives CTNCT-valid upper bound = 0.799087430 g=23 gives CTNCT-valid upper bound = 0.764609053 g=24 gives CTNCT-valid upper bound = 0.803285600 g=25 gives CTNCT-valid upper bound = 0.767554479 g=42 gives CTNCT-valid upper bound = 0.823175865 g=43 gives CTNCT-valid upper bound = 0.836085973 g=44 gives CTNCT-valid upper bound = 0.824387097 */ \\ Expression to be tested for positivity. \\ Case distinction according to the Brill-Noether type divisor that is used \\ and whether compact type or not, together with the horizontal divisor. fwithtopodd = kmu/N*(Nbot-R)-(kmu-ktop)-(1-y)*2*pinv*BN[3]+12/wla*y*( (kmu-ktop)*(1/kmu+1/8)-tetabot+(p-pinv)/8+(vt-1)/2); \\ using Hur: fwithtopeven = kmu/N*(Nbot-R)-(kmu-ktop)-(1-y)*2*pinv*Hur[3]+12/wla*y*( (kmu-ktop)*(1/kmu+1/8)-tetabot+(p-pinv)/8+(vt-1)/2); \\ using Nfold {fwithtopevenNfold = kmu/N*(Nbot-R)-(kmu-ktop)+(1-y)*2*(pinv*(g^2 + g - 2)/(g^2 + 3*g - 1) + 3/(2*g^2 + 6*g - 2)*ktop*(-1)) + 12/wla*y*( (kmu-ktop)*(1/kmu+1/8)-tetabot+(p-pinv)/8+(vt-1)/2);} ctwithtopodd = kmu/N*(Nbot-R)-(kmu-ktop)-(1-y)*2*pinv*subst(BN[4],ct,gtop*(g-gtop))+12/wla*y*( (kmu-ktop)*(1/kmu+1/8)-tetabot+(p-pinv)/8+(vt-1)/2); \\ using Hurwitz divisor: ctwithtopeven = kmu/N*(Nbot-R)-(kmu-ktop)-(1-y)*2*pinv*subst(Hur[4],ct,gtop*(g-gtop)) + 12/wla*y*( (kmu-ktop)*(1/kmu+1/8)-tetabot+(p-pinv)/8+(vt-1)/2); \\ using Nfold divisor: ctwithtopevenNfold = kmu/N*(Nbot-R)-(kmu-ktop)+(1-y)*2*pinv*(6*gtop*g^2 - 6*gtop^2*g + (6*gtop^2 - 6*gtop))/(g^2 + 3*g - 1)+12/wla*y*( (kmu-ktop)*(1/kmu+1/8)-tetabot+(p-pinv)/8+(vt-1)/2); shorODD = (-1-kmu/N) + (2-2*y)*(g+1)/(g+3) + y*12*(1+teta)/(12+12*teta-kmu); \\ using the Hurwitz divisor: shorEVEN= (-1-kmu/N) + (2-2*y)*(3*g^2+12*g-6)/(g+8)/(3*g-1) + y*12*(1+teta)/(12+12*teta-kmu); \\ using the Nfold divisor: shorEVENNfold= (-1-kmu/N) + (2-2*y)*(2*g^2+2*g-1)/(2*g^2 + 6*g -2) + y*12*(1+teta)/(12+12*teta-kmu); \\ We use only the special case vtop = 1 and justified above that \\ this is a valid bound. sGamODD = subst(fwithtopodd,vt,1); sGamEVEN = subst(fwithtopeven,vt,1); sGamEVENNfold = subst(fwithtopevenNfold,vt,1); ctGamODD = subst(ctwithtopodd,vt,1); ctGamEVEN = subst(ctwithtopeven,vt,1); ctGamEVENNfold = subst(ctwithtopevenNfold,vt,1); \\ Bounds given by D_hor: In fact only lower bounds, i.e. 'neg' will be an empty list. {horPolys(sg) = local(pos,neg,d0,d1); pos = []; neg =[]; shor = if(sg ==12 || sg ==14, subst(shorEVENNfold,g,sg), if(sg % 2 == 1, subst(shorODD,g,sg), subst(shorEVEN,g,sg))); d1 = polcoeff(shor,1,y); d0 = polcoeff(shor,0,y); if(d1 > 0, nst = -d0/d1; pos = concat(pos, nst), if(d1<0, nst = -d0/d1; neg = concat(neg, nst), if(d0<0, print("Error: const poly, neg coeff")))); return([pos,neg]); } \\ Bounds for the sum of the reciprocals of the prongs, with total sum =x, \\ are given by totally balanced and totally unbalanced cases balpinv(x,E)= local(q,r); r = x%E; q = floor(x/E); return((E-r)/q + r/(q+1)); unbpinv(x,E)=(E-1)/1 + 1/(x-(E-1)); \\ pipol=coefficient of pinv, has negative y-coefficient: if y is large it contributes negatively and \\ a lower bound for the whole expression is given by the cases where pinv large, \\ i.e. by the unbal case. For y small the lower bound is given by the balanced case. \\ In both cases, after substituting P and the estimate for P_{-1} ..... TODO!!! {nctIntervals(sg) = local(pos,neg,d0,d1); pos = []; neg =[]; snct = if(sg % 2 == 1, subst(sGamODD,g,sg), subst(sGamEVEN,g,sg)); \\print("init snct=",snct); for(gtop=1,sg-1, \\ # E=2 \\for (1,p) or (2,p), the condition p>=2E-3 or p>=2E-2 is clear, since g>3 for(p1=1, gtop, p2=2*gtop-p1; if(p1 <= 2 && gtop==sg-1, snct1=subst(snct,R,1/lcm(p1,p2)), snct1=subst(snct,R,pinv/2+if(p1==p2,1/p1,0))); snct2 = subst(subst(snct1,pinv,1/p1+1/p2),p,2*gtop); d1 = polcoeff(snct2,1,y); d0 = polcoeff(snct2,0,y); if(d1 > 0, nst = -d0/d1; pos = concat(pos, nst), if(d1<0, nst = -d0/d1;neg = concat(neg, nst)));); \\ # E=3 \\the condition of the biggest prong >7 is the worst case is (1,g,g) clear since g>7 if(gtop <= sg-2, \\i.e. v^T=1 for(p1=1, 2*gtop-1, for(p2=p1,(2*gtop+1-p1)/2, p3=2*gtop+1-p1-p2; if(p1 == 1 && gtop==sg-2, snct1=subst(snct,R,1/(3+1)), snct1=subst(snct,R,pinv/3)); snct2 = subst(subst(snct1,pinv,1/p1+1/p2+1/p3),p,2*gtop+1); d1 = polcoeff(snct2,1,y); d0 = polcoeff(snct2,0,y); if(d1 > 0, nst = -d0/d1; pos = concat(pos, nst), if(d1<0, nst = -d0/d1;neg = concat(neg, nst)));));); \\ large E for(E=4,sg-gtop+1, snct2 = subst(subst(snct, R, pinv/(E)),p,2*gtop-2+E); pipol = polcoeff(snct2,1,pinv); pi1 = polcoeff(pipol,1,y); zpi = -polcoeff(pipol,0,y)/pi1; \\print(pipol); snctb = subst(snct2,pinv,balpinv(2*gtop-2+E,E)); snctu = subst(snct2,pinv,unbpinv(2*gtop-2+E,E)); maxy=1; miny =0; emptyint = 0; \\ if set true then the interval of possible y above zpi is empty. split = 0; \\ set true, if in the range of possible y above zpi has a lower bound ('range split') \\ the upper range (unbalanced) sets max, sets emptyint if max = zpi \\ or sets min and declares split = 1; unb1 = polcoeff(snctu,1,y); if(unb1==0, if(polcoeff(snctu,0,y)<0, maxy=min(maxy,zpi); emptyint=1), \\ no solution for y large, else no constraint zunb = -polcoeff(snctu,0,y)/unb1; if(unb1<0, \\ negative coeff: gives upper bound if(zunb>=zpi, maxy = min(maxy,zunb), maxy = min(maxy,zpi); emptyint=1);, \\ if zero in unbal range too small:poss empty interval. \\ else pos coeff unb1>0: gives lower bound if(zunb>zpi, miny = max(miny,zunb), split=1;)); \\ end of unbal disc. if(split ==0, bal1 = polcoeff(snctb,1,y); if(bal1==0, if(polcoeff(snctb,0,y)<0, if(emptyint==1, print("Empty interval"); return([[1],[0]]), miny=max(miny,zpi)),)); \\ no solution for y small, else no constraint. End of bal1=0-case zbal = -polcoeff(snctb,0,y)/bal1; if(bal1>0, \\ pos coeff: gives lower bound if(zbal<=zpi, miny = max(miny,zbal), if(emptyint==1, print("Empty interval"); return([[1],[0]]), miny=max(miny,zpi)));, \\ else neg coef bal1<0: gives upper bound. if(emptyint==1, maxy = min(maxy,min(zbal,zpi)), maxy=(min(maxy,min(zbal,zunb)))); \\ \\\\ The following two lines both give valid certificates, one can try both \\\\ For 'general type' with the above R the second line produces no y-range. \\maxy = min(maxy,min(zbal,zpi)); \\ use the lower interval \\\\if(emptyint==1, maxy = min(maxy,min(zbal,zpi)), miny=zpi); \\ if upper interval non-empty use that(only); )); \\ end bal1-sign ); \\ end split =0. No discussion of lower interval if split =1, included if really needed. pos = concat(pos,miny); neg = concat(neg, maxy); )); \\ end E-loop and gtop-loop return([pos,neg]); }; {compPolys(sg)= local(pos,neg,d0,d1); pos = []; neg =[]; sct = if(sg % 2 == 1, subst(ctGamODD,g,sg), subst(ctGamEVEN,g,sg)); for(sgtop =1,sg-1, ell = 2*sgtop-1; spinv = 1/ell; sct2 = subst(subst(subst(subst(sct, R, (2+2*(sgtop==1))*pinv + 1/ell),pinv,spinv),p,2*sgtop-1),gtop,sgtop); \\print(sct2); d1 = polcoeff(sct2,1,y); d0 = polcoeff(sct2,0,y); if(d1 > 0, nst = -d0/d1; pos = concat(pos, nst), if(d1<0, nst = -d0/d1; neg = concat(neg, nst), if(d0<0,print("Error: const poly, neg coeff"))));); return([pos,neg]); } \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ General type \\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ General type \\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ General type \\\\\\\\\\\\\\\\\\\\\\\\ print("General type ranges for y"); ll = 35; start = 10; {for(gg=start, start+ll, hg = horPolys(gg); ctg = compPolys(gg); nctg = nctIntervals(gg); lb = max(subst(vtlow,g,gg),vectmax([vectmax(hg[1]),vectmax(ctg[1]),vectmax(nctg[1])])); ub = min(CTupperbd(gg),vectmin([vectmin(hg[2]),vectmin(ctg[2]),vectmin(nctg[2])])); print(gg, " gives ",1.*lb, " to ", 1.*ub);)} /* 10 gives 1.21953857 to 0.640441272 11 gives 1.09259259 to 0.667983149 12 gives 0.911561265 to 0.579062995 13 gives 0.778909091 to 0.616703297 14 gives 0.672039072 to 0.541990136 15 gives 0.594164456 to 0.581721271 16 gives 0.634667703 to 0.516916488 17 gives 0.474747475 to 0.556089071 18 gives 0.543867596 to 0.498708815 19 gives 0.392289348 to 0.536384431 \\ general type ok from here on. 20 gives 0.474941029 to 0.484825641 21 gives 0.332477535 to 0.520704879 22 gives 0.420969649 to 0.473856349 23 gives 0.287407407 to 0.507898814 24 gives 0.377645599 to 0.464951183 25 gives 0.252399774 to 0.497223773 26 gives 0.342153875 to 0.457565710 27 gives 0.239880664 to 0.488177259 28 gives 0.312581332 to 0.445702481 29 gives 0.234785959 to 0.480405827 30 gives 0.287584665 to 0.420049383 31 gives 0.230354310 to 0.464227448 32 gives 0.266194362 to 0.400564524 33 gives 0.226464161 to 0.442837879 34 gives 0.247694019 to 0.385231828 35 gives 0.223021962 to 0.425455697 36 gives 0.231543352 to 0.372832653 37 gives 0.219954544 to 0.411034278 38 gives 0.218542753 to 0.362585936 39 gives 0.217203849 to 0.398865149 40 gives 0.215932327 to 0.353967332 41 gives 0.214723226 to 0.388451049 42 gives 0.213572058 to 0.346611356 43 gives 0.212474757 to 0.379432313 44 gives 0.211427628 to 0.340255207 45 gives 0.210427307 to 0.371542122 */