proc mono3_wh() "USAGE: mono3_wh(); RETURN: None NOTE: compute H^1_q H^2_q; 3<= q <= 3d for weighted homogeneous singularities " { LIB "general.lib"; LIB "poly.lib"; LIB "sing.lib"; LIB "dmodapp.lib"; ring R0=0, (x,y,z),dp; int i, d, d1; option(noredefine); int startTime = rtimer; poly f; // ********* replace your polynomial here ******************************* //f=z*x^2*y^2+x^5+y^5; // NON WH // f=(x^3+y^3+z^3)^3-27*x^3*y^3*z^3; // Line arr // f=(x^3-y^3)*(x^3-z^3)*(y^3-z^3); // Line arr // f=(x^4-y^4)*(x^4-z^4)*(y^4-z^4); // Line arr // f=(y^2*z^2 - x^4)^2*y^2 - x^10; // NON WH f=x^6*y^6*z^(6)+x^(18)+y^(18); // NON WH // f=x^2*y^2*z^2+x^6+y^6; // NON WH // f= x^5+y^4*z+x^4*y; // NON WH Saito f1 //f=x*y*z*((x^3+y^3+z^3)^3-27*x^3*y^3*z^3); // Line arr // f=(y^2*z - x^3)^2 - x^3*y^3; // WH // f=(x^3+y^3)^4+(y^4+z^4)^3; // WH - (3,4)-torus type // eventual o transformare f=subst(f,z, x+2*y-3*z); // ********************************************************************** poly g; g=subst(f,z,1); // g=f(x,y,1) for the final test in the ring R3 d=deg(f); ideal J=jacob(f); d1=max( deg(syz(J)[1][1]),deg(syz(J)[1][2])); if (deg(syz(J)[1][3]) >d1) { d1=deg(syz(J)[1][3]);} // d1=mdr(f) option(redSB); J=std(J); poly fs=x^d+y^d+z^d; ideal Js=jacob(fs); Js=std(Js); list mf; for (i=1; i<=3*d+1; i++) {mf[i]=size(kbase(J,i-1));} ring R3 = 0,(x,y),dp; poly g; g=imap(R0, g); // move g=f(x,y,1) from the ring R0 in the new ring R3 ideal I, J, T; J=jacob(g); ideal IS=1; // IS=S = the ring I=J, g*g; int mg=codim(IS,std(I)); //Here we compute the global Milnor number of the affine curve g=0 using Briancon-Skoda Thm, //i.e. locally g*g is in J. int E_top=d^2-3*d+3-mg; //Here we compute the Euler number of the projective complement and compare it //with the k-th Euler number given by E_3. int Tjurina_total= mf[3*d+1]; int Milnor_total=mg; print("Tjurina total: "+string(Tjurina_total)); print("Milnor total : "+string(Milnor_total)); int WH=Milnor_total==Tjurina_total; int QMax; if (WH==0) {QMax=d; } else {QMax= 2*d-2;} setring R0; list mfs;// for (i=1; i<=3*d+1; i++) {mfs[i]=size(kbase(Js,i-1));} list er; for (i=1; i<=2*d-5+1; i++) {er[i]=mf[d-1+i]-mfs[d-1+i];} for (i=2*d-5+2; i<=3*d+1; i++) {er[i]=mf[3*d+1];} list kr; for (i=1; i<=d-1; i++){kr[i]=0;} for (i=d; i<=2*d-2; i++){kr[i]=3*((i-d+2)*(i-d+1) div 2);} for (i=2*d-1; i<=3*d+1; i++){kr[i]=3*((i-d+2)*(i-d+1) div 2)-((i-2*d+3)*(i-2*d+2) div 2);} list ar; for (i=1; i<=3*d+1; i++) {ar[i]=er[i]+kr[i];} list kdim2; kdim2[2]=0; // initializare pt vectorul kdim2 list kappa2_Q, k2_Q, e2_Q; list kdim1, kappa1_Q, k1_Q, e1_Q, top1_Q; int na, nb, nc, nu, nv, nw, nup, nvp, nwp; list col1_1, col2_1, col3_1, col4_1, col5_1, col6_1, col7_1, col8_1; list col1_f, col2_f, col3_f; int col1, col2, col3, col4, col5, col6, col7, col8; string s1, s2, s3, s4, s5, s6, s7, s8, sline; int Q, dS1; // *********** 3<=Q <=QMax ************ // for (Q=3; Q<=QMax;Q++){ print("*** Table 1: 3<= q <= "+string(QMax)+" *** compute q= "+string(Q)+" ***"); na=Q*(Q-1) div 2; nb=na; nc=na; nu=(Q-d)*(Q-d-1) div 2; nv=nu; nw=nu; nup=nu;nvp=nu; nwp=nu; ring R1=(0,a(1..na),b(1..nb),c(1..nc),u(1..nu),v(1..nv),w(1..nw)), (x,y,z),dp; poly f; f =imap(R0,f); poly F1, F2; poly A, B, C; poly U, V, W; A=make_poly(Q-2, 1); B=make_poly(Q-2, 2); C=make_poly(Q-2, 3); F1=A*diff(f,x)+B*diff(f,y)+C*diff(f,z); if (Q