LIB"primdec.lib"; LIB"sing.lib"; LIB "classify.lib"; /////////////////// Deciding 3-jet ///////////////////////////////// proc decompose(poly f) { int i; ideal I=f; I=jet(I,3); ideal J=slocus(I); list LI=primdecGTZ(I); list LJ=primdecGTZ(J); if((size(LI)==3)&&(size(LJ)==1)){return(6);} if((size(LI)==3)&&(size(LJ)==3)){return(1);} if((size(LI)==2)&&(size(LJ)==3)){return(2);} if((size(LI)==2)&&(size(LJ)==1)){return(5);} if((size(LI)==1)&&(size(LJ)==1)){return(7);} if(size(LI)==1&&size(LJ)==2) { for(i=1;i<=size(LJ);i++) { if(vdim(std(LJ[i][1]))==6){return(3);} if(vdim(std(LJ[i][1]))==4){return(4);} } } return(0); //this should not occur } ////////////////////////////////////////////////////////////////// proc decompose1(poly f) { int i; ideal I=f; I=jet(I,4); ideal J=slocus(I); list LI=primdecGTZ(I); list LJ=primdecGTZ(J); if((size(LI)==2)&&(size(LJ)==3)){return(1);} if((size(LI)==2)&&(size(LJ)==2)){return(2);} return(0); //this should not occur } /////////////////// Corank=2 /////////////////////////////////// proc LclassiFy2(poly f) { int k,c,m,p; list L; k=milnor(f); c=corank(f); m=mult(std(f)); ////////////////////// Non-isolated Case////////////////////// if(m==-1) { return("f is a non-isolated singularity"); } ////////////////////// Smooth Case//////////////////////////// if(m==0) { return("f is smooth"); } //================= the A_k =================================== if(c==1) { return("f is of type A"+string(k)+""); } //================= the D_k or E_k=================================== if(c==2 && m==3) { L=factorize(jet(f,3)); if(size(L[1])==3) { return("f is of type D"+string(k)+""); } if(size(L[1])==2 && k==6) { return("f is of type E6"); } if(size(L[1])==2 && k==7) { return("f is of type E7"); } if(size(L[1])==2 && k==8) { return("f is of type E8"); } if(size(L[1])==2 && k<=5 || size(L[1])==2 && 8<=k) { return(0); } if(size(L[1])!=2 && size(L[1])!=3) { return(0); } } //==================================================== if(c==2 && m==4) { if(k==9) { return("f is of type X9"); } if(k==10) { return("f is of type T_2,4,5"); } if(k==11) { p=decompose1(f); if(p==1) { return("f is of type T_2,5,5"); } if(p==2) { return("f is of type Z11"); } } if(k==12) { return("f is of type W12"); } if(k<=8 || 13<=k) { return(0); } } if(5<=m || 3<=c) { return(0); } } /////////////////// Corank=3 /////////////////////////////////// proc LclassiFy3(poly f) { int k,c,m,p,a,b,d; list L; k=milnor(f); c=corank(f); m=mult(std(f)); if(m!=3 || c!=3) { return(0); } if(m==3 && c==3) { if(k==8) { return("f is of type T_3,3,3"); } if(k==9) { return("f is of type T_3,3,4"); } if(k==10) { a=decompose(f); if(a==3) { return("f is of type T_3,3,5"); } if(a==4) { return("f is of type Q10"); } } if(k==11) { b=decompose(f); if(b==2) { return("f is of type T_3,4,5"); } if(b==1) { return("f is of type T_4,4,4"); } if(b==4) { return("f is of type Q11"); } if(b==5) { return("f is of type S11"); } } if(k==12) { d=decompose(f); if(d==2) { return("f is of type T_3,5,5"); } if(d==1) { return("f is of type T_4,4,5"); } if(d==5) { return("f is of type S12"); } } if(k==13) { return("f is of type T_4,5,5"); } if(k==14) { return("f is of type T_5,5,5"); } } }