////////////////////////////////////////////////////////////// version = "$Id$"; category="Singularities"; info=" LIBRARY:Recognition of Corank 1 Map Germs from the plane to space by invariants AUTHORS: Saima Aslam saimashah640@gmail.com @* Muhammad Ahsan Banyamin ahsanbanyamin@gmail.com OVERVIEW: A library for characterization of the classification of corank 1 map germs interms of certain invariants. These germs were classified by Mond with respect to right left equivalence. PROCEDURES: classifycoRank1Maps(I);Corank 1 Map Germs from the plane to the space "; LIB "sing.lib"; classifyMapGerms.lib ; ///////////////////////////////////////////////////////////// ///////// proc classifycoRank1Maps(ideal I) "USAGE: classifycoRank1Maps(I); I an ideal with 3 generators in a polynomial ring with 2 variables and local ordering defining a map germ C^2 to C^3 COMPUTE: The normal form of the germ in Mond's classification if it is of corank 1 RETURN: normal form of I, of type ideal NOTE: If I is not of corank 1 it returns (0,0) EXAMPLE: example classifycoRank1Maps; shows an example" { if(size(jet(I,1))==0){return(ideal(0,0));} list L=coDimMap(I); int determinacy=L[1]; int c,m,k,cu,t; c=L[2]; poly g=I[2]; if(determinacy<0){return(ideal(0,0));} I=normalMap(I,determinacy); m =vdim(std(I)); cu=cusp(I); k=coRank(I); if((cu==-1)&&(k !=1)){return(ideal(0,0));} if(c==0 && cu==0){return("f is of type S");} if(c==0 && cu==1){return("f is of type S_"+string(0)+"");} if(c==1 && cu==2 && m==2){return("f is of type S_"+string(1)+"");} if(c > 1 && cu==2 && m==2){return("f is of type B_"+string(c)+"");} if(c == 2 && cu==3 && m==2){return("f is of type S_"+string(2)+"");} if(c == 3 && cu==3 && m==2){return("f is of type C_"+string(3)+"");} if(c == 4 && cu==3 && m==2){return("f is of type F_"+string(4)+"");} if(c== cu-1 && cu > 3 && m==2){return("f is of type S_"+string(cu-1)+"");} if(c == cu && cu > 3 && m==2){return("f is of type C_"+string(cu)+"");} if(c > 1 && cu==2 && m== 3){return("f is of type H_"+string(c)+"");} if(c ==5 && cu==3 && m== 3){return("f is of type Q_"+string(5)+"");} if(c ==6 && cu==3) { if( m== 3){return("f is of type Q_"+string(6)+"");} if( m== 4){return("f is of type R_"+string(4)+"");} return(ideal(0,0)); } if(c > 6 && cu==3 && m== 3){return("f is of type Q_"+string(c)+"");} if(c ==4 && cu==4 && m== 3){return("f is of type P_"+string(4)+"(3/2)");} return(ideal(0,0)); } /////////////////////////////////////////////////////////////////////////////// proc normalMap(ideal I, int bound) { // returns (x,b,c) A-equivalent to I modulo ^bound+1 // assumes that ord I[1]=1 I=jet(I,bound); def R=basering; //assume that the ordering is ds or Ds map phi; I[1]=simplify(I[1],1); if(lead(I[1])!=var(1)) { phi=R,var(2),var(1); I=phi(I); } phi=R,2*var(1)-I[1],var(2); I=phi(I); I=jet(I,bound); while(size(I[1])>1) { phi=R,2*var(1)-I[1],var(2); I=phi(I); I=jet(I,bound); } return(I); } /////////////////////////C(f)///////////////////////// proc cusp(ideal I) { poly f1=I[1]; poly f2=I[2]; poly f3=I[3]; poly g1= diff(f2,y); poly g2 = diff(f3,y); ideal J= g1,g2; int c = vdim(std(J)); return(c); } /////////////////////////Corank f=1: K^n---->K^p///////////////////////// proc coRank(ideal I) { matrix m=jacob(I); matrix n=subst(m,x,0,y,0); int k=rank(n); return(k); } /////////////////////////proc(I_3(f))///////////////////////// proc suppideal(ideal I) { def R=basering; ring R1=0,(x,y,u,v),ds; ideal I=imap(R1,I); poly f1=I[1]; poly f2=I[2]; poly f3=I[3]; ideal I=f1,f2,f3; map phi=basering,x,y; poly p1=phi(f2); map phi=basering,x,u; poly p2=phi(f2); map phi=basering,x,v; poly p3=phi(f2); map phi=basering,x,y; poly q1=phi(f3); map phi=basering,x,u; poly q2=phi(f3); map phi=basering,x,v; poly q3=phi(f3); ideal J=(p1-p2)/(y-u),(q1-q2)/(y-u),((p1-p2)/((y-u)*(u-v)))-((p1-p3)/((y-v)*(u-v))),((q1-q2)/((y-u)*(u-v)))-((q1-q3)/((y-v)*(u-v))); return(J); } /////////////////////////T(f)///////////////////////// proc Tf(ideal I) { def R=basering; ring R1=0,(x,y,u,v),ds; ideal I=imap(R,I); ideal J=suppideal(I); int c = vdim(std(J)); int d = c div 6 ; setring R1; setring R; return(d); }