Changeset e3f423 in git for Singular/LIB/gaussman.lib
- Timestamp:
- May 25, 2001, 11:38:10 AM (23 years ago)
- Branches:
- (u'spielwiese', '6e5adcba05493683b94648c659a729c189812c77')
- Children:
- 442ed6ac7e2517e4ea705090a7921a01d9db3a85
- Parents:
- d1391bf52b65e3d13858d295d40762007171a8f0
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/LIB/gaussman.lib
rd1391b re3f423 1 1 /////////////////////////////////////////////////////////////////////////////// 2 version="$Id: gaussman.lib,v 1.3 8 2001-05-23 16:57:10 mschulze Exp $";2 version="$Id: gaussman.lib,v 1.39 2001-05-25 09:38:10 mschulze Exp $"; 3 3 category="Singularities"; 4 4 … … 12 12 13 13 PROCEDURES: 14 gms(f,s); Brieskorn lattice in the Gauss-Manin system 15 gmsnf(p,K,Kmax); Gauss-Manin system normal form 16 gmscoeffs(p,K,Kmax); Gauss-Manin system basis representation 14 17 monodromy(f[,opt]); monodromy matrix, spectrum of monodromy of f 15 18 vfiltration(f[,opt]); V-filtration on H''/H', singularity spectrum of f … … 37 40 /////////////////////////////////////////////////////////////////////////////// 38 41 39 proc gms(poly t,string d) 42 proc gms(poly t,string s) 43 "USAGE: gms(f,s); poly f, string s; 44 ASSUME: basering has characteristic 0 and local degree ordering, 45 f has isolated singularity at 0 46 RETURN: 47 @format 48 ring G: 49 G=C{{s}}*basering, 50 s is the inverse of the Gauss-Manin connection of f, 51 G contains: 52 poly @t: image of f 53 ideal @dt: image of Jacobian ideal df of f 54 ideal @g: image of standard basis of df 55 matrix @a: matrix(@dt)*s=matrix(@g) 56 ideal @m: image of monomial vector space basis of Jacobian algebra of f 57 int @wmax: maximal weight of variables of basering 58 G projects to H''=C{{s}}*@m 59 @end format 60 NOTE: do not modify @t, @dt, @g, @a, @m, or @wmax if you want to use 61 gms procedures 62 KEYWORDS: singularities; Gauss-Manin connection 63 EXAMPLE: example gms; shows examples 64 " 40 65 { 41 66 def R=basering; … … 55 80 for(i=nvars(R);i>=1;i--) 56 81 { 57 if(deg(var(i))==0)58 {59 ERROR("degree ordering expected");60 }61 82 if(deg(var(i))>@wmax) 62 83 { … … 85 106 ideal m=kbase(g); 86 107 87 string s="ring G="+string(charstr(R))+",("+d+","+varstr(R)+108 string G="ring @G="+string(charstr(R))+",("+s+","+varstr(R)+ 88 109 "),(ws("+string(deg(highcorner(g))+@wmax)+"),",ordstr(R),");"; 89 execute( s);110 execute(G); 90 111 91 112 poly @t=imap(R,t); … … 98 119 export @t,@dt,@g,@a,@m,@wmax; 99 120 100 return(G); 121 return(@G); 122 } 123 example 124 { "EXAMPLE:"; echo=2; 125 ring R=0,(x,y),ds; 126 poly f=x5+x2y2+y5; 127 def G=gms(f,"s"); 128 setring(G); 129 @t; 130 print(@dt); 131 print(@g); 132 print(@a); 133 @wmax; 101 134 } 102 135 /////////////////////////////////////////////////////////////////////////////// 103 136 104 137 proc gmsnf(ideal p,int K,list #) 138 "USAGE: gmsnf(p,K[,Kmax]); poly p, int K[, int Kmax]; 139 ASSUME: basering was constructed by gms, K<=Kmax 140 RETURN: 141 @format 142 list l: 143 ideal l[1]: projection of p to H''=C{{s}}*@m mod s^{K+1} 144 ideal l[2]: p=l[1]+l[2] mod s^(Kmax+1) 145 @end format 146 NOTE: by setting p=l[2] the computation can be continued up to order 147 at most Kmax, by default Kmax=infinity 148 KEYWORDS: singularities; Gauss-Manin connection 149 EXAMPLE: example gmsnf; shows examples 150 " 105 151 { 106 152 int Kmax=-1; 107 153 if(size(#)>0) 108 154 { 109 if(typeof(l[1])=="int") 110 { 111 Kmax=l[1]; 155 if(typeof(#[1])=="int") 156 { 157 Kmax=#[1]; 158 if(K>Kmax) 159 { 160 Kmax=K; 161 } 112 162 } 113 163 } … … 116 166 v[nvars(basering)]=0; 117 167 168 int k; 118 169 if(Kmax>=0) 119 170 { 120 p=jet(jet(p,K,v),(Kmax+1)*deg(var(1))-@wmax); 171 for(k=ncols(p);k>=1;k--) 172 { 173 p[k]=jet(jet(p[k],K,v),(Kmax+1)*deg(var(1))-@wmax); 174 } 121 175 } 122 176 … … 126 180 127 181 poly s; 128 int i,j ,k;129 for(k= 1;k<=ncols(p);k++)182 int i,j; 183 for(k=ncols(p);k>=1;k--) 130 184 { 131 185 while(p[k]!=0&°(lead(p[k]),v)<=K) … … 146 200 { 147 201 p[k]=p[k]+ 148 jet(jet(diff(s*@a[j,i],var(j+1))*var(1),K ,v),202 jet(jet(diff(s*@a[j,i],var(j+1))*var(1),Kmax,v), 149 203 (Kmax+1)*deg(var(1))-@wmax); 150 204 } … … 170 224 } 171 225 172 return(r,q); 173 } 174 /////////////////////////////////////////////////////////////////////////////// 175 176 proc gmsmat(ideal p,int K) 177 { 178 def r,q=gmsnf(p,K); 226 return(list(r,q)); 227 } 228 example 229 { "EXAMPLE:"; echo=2; 230 ring R=0,(x,y),ds; 231 poly f=x5+x2y2+y5; 232 def G=gms(f,"s"); 233 setring(G); 234 list l0=gmsnf(@t,0); 235 print(l0[1]); 236 list l1=gmsnf(@t,1); 237 print(l1[1]); 238 list l=gmsnf(l0[2],1); 239 print(l[1]); 240 } 241 /////////////////////////////////////////////////////////////////////////////// 242 243 proc gmscoeffs(ideal p,int K,list #) 244 "USAGE: gmscoeffs(p,K[,Kmax]); poly p, int K[, int Kmax]; 245 ASSUME: basering was constructed by gms, K<=Kmax 246 RETURN: 247 @format 248 list l: 249 matrix l[1]: projection of p to H''=C{{s}}*@m=C{{s}}^mu mod s^(K+1) 250 ideal l[2]: p=matrix(@m)*l[1]+l[2] mod s^(Kmax+1) 251 @end format 252 NOTE: by setting p=l[2] the computation can be continued up to order 253 at most Kmax, by default Kmax=infinity 254 KEYWORDS: singularities; Gauss-Manin connection 255 EXAMPLE: example gmscoeffs; shows examples 256 " 257 { 258 list l=gmsnf(p,K,#); 259 ideal r,q=l[1..2]; 179 260 poly v=1; 180 261 for(int i=2;i<=nvars(basering);i++) … … 184 265 matrix C=coeffs(r,@m,v); 185 266 return(C,q); 267 } 268 example 269 { "EXAMPLE:"; echo=2; 270 ring R=0,(x,y),ds; 271 poly f=x5+x2y2+y5; 272 def G=gms(f,"s"); 273 setring(G); 274 list l0=gmscoeffs(@t,0); 275 print(l0[1]); 276 list l1=gmscoeffs(@t,1); 277 print(l1[1]); 278 list l=gmscoeffs(l0[2],1); 279 print(l[1]); 186 280 } 187 281 /////////////////////////////////////////////////////////////////////////////// … … 240 334 proc monodromy(poly f,list #) 241 335 "USAGE: monodromy(f[,opt]); poly f, int opt 242 ASSUME: basering has characteristic 0 and local ordering,336 ASSUME: basering has characteristic 0 and local degree ordering, 243 337 f has isolated singularity at 0 244 338 RETURN: … … 265 359 266 360 def R=basering; 267 def G=gms(f," D");361 def G=gms(f,"s"); 268 362 setring G; 269 363 … … 271 365 int mu,modm=ncols(@m),maxorddif(@m); 272 366 ideal w=@t*@m; 367 list l; 273 368 matrix U=freemodule(mu); 274 369 matrix A0[mu][mu],A,C; … … 286 381 if(opt==0) 287 382 { 288 C,w=gmsmat(w,k,mu);383 l=gmscoeffs(w,k,mu); 289 384 } 290 385 else 291 386 { 292 C,w=gmsmat(w,k,mu+n); 293 } 387 l=gmscoeffs(w,k,mu+n); 388 } 389 C,w=l[1..2]; 294 390 A0=A0+C; 295 391 296 392 H0=H; 297 393 dbprint(printlevel-voice+2,"//gaussman::monodromy: compute dH"); 298 dH=jet(module(A0*dH+ D^2*diff(matrix(dH),D)),k);299 H=H* D+dH;394 dH=jet(module(A0*dH+s^2*diff(matrix(dH),s)),k); 395 H=H*s+dH; 300 396 301 397 dbprint(printlevel-voice+2,"//gaussman::monodromy: test dH==0"); 302 sdH=size(reduce(H,std(H0* D)));303 } 304 305 A0=A0- D^k;398 sdH=size(reduce(H,std(H0*s))); 399 } 400 401 A0=A0-s^k; 306 402 307 403 dbprint(printlevel-voice+2, 308 404 "//gaussman::monodromy: compute basis of saturation"); 309 405 H=minbase(H0); 310 int modH=maxorddif(H)/deg( D);406 int modH=maxorddif(H)/deg(s); 311 407 if(opt==0) 312 408 { 313 C,w=gmsmat(w,modH+1,modH+1);409 l=gmscoeffs(w,modH+1,modH+1); 314 410 } 315 411 else 316 412 { 317 C,w=gmsmat(w,modH+1,modH+1+n); 318 } 413 l=gmscoeffs(w,modH+1,modH+1+n); 414 } 415 C,w=l[1..2]; 319 416 A0=A0+C; 320 417 321 418 dbprint(printlevel-voice+2, 322 419 "//gaussman::monodromy: compute A on saturation"); 323 l ist l=division(H*D,A0*H+D^2*diff(matrix(H),D));420 l=division(H*s,A0*H+s^2*diff(matrix(H),s)); 324 421 A=jet(l[1],l[2],0); 325 422 … … 344 441 if(mide>0) 345 442 { 346 C,w=gmsmat(w,modH+1+mide,modH+1+mide); 443 l=gmscoeffs(w,modH+1+mide,modH+1+mide); 444 C,w=l[1..2]; 347 445 A0=A0+C; 348 446 … … 438 536 proc vfiltration(poly f,list #) 439 537 "USAGE: vfiltration(f[,opt]); poly f, int opt 440 ASSUME: basering has characteristic 0 and local ordering,538 ASSUME: basering has characteristic 0 and local degree ordering, 441 539 f has isolated singularity at 0 442 540 RETURN: … … 472 570 473 571 def R=basering; 474 def G=gms(f," D");572 def G=gms(f,"s"); 475 573 setring G; 476 574 … … 478 576 int mu,modm=ncols(@m),maxorddif(@m); 479 577 ideal w=@t*@m; 578 list l; 480 579 matrix U=freemodule(mu); 481 580 matrix A[mu][mu],C; … … 492 591 493 592 dbprint(printlevel-voice+2,"//gaussman::vfiltration: compute C"); 494 C,w=gmsmat(w,k); 593 l=gmscoeffs(w,k); 594 C,w=l[1..2]; 495 595 A=A+C; 496 596 497 597 H0=H; 498 598 dbprint(printlevel-voice+2,"//gaussman::vfiltration: compute dH"); 499 dH=jet(module(A*dH+ D^2*diff(matrix(dH),D)),k);500 H=H* D+dH;599 dH=jet(module(A*dH+s^2*diff(matrix(dH),s)),k); 600 H=H*s+dH; 501 601 502 602 dbprint(printlevel-voice+2,"//gaussman::vfiltration: test dH==0"); 503 sdH=size(reduce(H,std(H0* D)));504 } 505 506 A=A- D^k;603 sdH=size(reduce(H,std(H0*s))); 604 } 605 606 A=A-s^k; 507 607 508 608 dbprint(printlevel-voice+2, 509 609 "//gaussman::vfiltration: compute basis of saturation"); 510 610 H=minbase(H0); 511 int modH=maxorddif(H)/deg(D); 512 C,w=gmsmat(w,N+modH,N+modH); 611 int modH=maxorddif(H)/deg(s); 612 l=gmscoeffs(w,N+modH,N+modH); 613 C,w=l[1..2]; 513 614 A=A+C; 514 615 515 616 dbprint(printlevel-voice+2, 516 617 "//gaussman::vfiltration: transform H0 to saturation"); 517 l ist l=division(H,freemodule(mu)*D^k);618 l=division(H,freemodule(mu)*s^k); 518 619 H0=jet(l[1],l[2],N-1); 519 620 … … 550 651 dbprint(printlevel-voice+2, 551 652 "//gaussman::vfiltration: compute A on saturation"); 552 l=division(H* D,A*H+D^2*diff(matrix(H),D));653 l=division(H*s,A*H+s^2*diff(matrix(H),s)); 553 654 A=jet(l[1],l[2],N-1); 554 655 … … 619 720 list V; 620 721 matrix Me; 621 V[ncols(eM)+1]= std(V1);722 V[ncols(eM)+1]=interred(V1); 622 723 intvec d; 623 724 if(opt==0) … … 634 735 "//gaussman::vfiltration: compute V["+string(i)+"]"); 635 736 V1=module(V1)+syz(Me); 636 V[i]= std(intersect(V1,V0));737 V[i]=interred(intersect(V1,V0)); 637 738 638 739 if(size(V[i])>size(V[i+1])) … … 659 760 "//gaussman::vfiltration: compute V["+string(i)+"]"); 660 761 V1=module(V1)+syz(Me); 661 V[i]= std(intersect(V1,V0));762 V[i]=interred(intersect(V1,V0)); 662 763 663 764 if(size(V[i])>size(V[i+1])) … … 698 799 "//gaussman::vfiltration: compute V["+string(i)+"]"); 699 800 V1=module(V1)+syz(Me); 700 V[i]= std(intersect(V1,V0));801 V[i]=interred(intersect(V1,V0)); 701 802 702 803 if(size(V[i])>size(V[i+1])) … … 737 838 dbprint(printlevel-voice+2, 738 839 "//gaussman::vfiltration: compute graded parts"); 739 option(redSB);740 840 for(k=1;k<size(v);k++) 741 841 { 742 v[k]= std(reduce(v[k],std(v[k+1])));842 v[k]=interred(reduce(v[k],std(v[k+1]))); 743 843 d[k]=size(v[k]); 744 844 } 745 v[k]= std(v[k]);845 v[k]=interred(v[k]); 746 846 d[k]=size(v[k]); 747 847 … … 763 863 proc spectrum(poly f) 764 864 "USAGE: spectrum(f); poly f 765 ASSUME: basering has characteristic 0 and local ordering,865 ASSUME: basering has characteristic 0 and local degree ordering, 766 866 f has isolated singularity at 0 767 867 RETURN: … … 789 889 proc endfilt(poly f,list V) 790 890 "USAGE: endfilt(f,V); poly f, list V 791 ASSUME: basering has characteristic 0 and local ordering,891 ASSUME: basering has characteristic 0 and local degree ordering, 792 892 f has isolated singularity at 0 793 893 RETURN:
Note: See TracChangeset
for help on using the changeset viewer.