Changeset 091424 in git for Singular/LIB/normal.lib
- Timestamp:
- Aug 3, 1999, 1:43:10 PM (25 years ago)
- Branches:
- (u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
- Children:
- 80b3cd91bb34663c436c755f638ee6d91193bd1c
- Parents:
- 3d276d2b96d8b91e89923453839edc84b93c91ed
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/LIB/normal.lib
r3d276d r091424 3 3 // algorithms for computing the normalization based on 4 4 // the criterion of Grauert/Remmert and ideas of De Jong & Vasconcelos 5 // written by Gert-Martin Greuel and Gerhard Pfister6 5 /////////////////////////////////////////////////////////////////////////////// 7 6 8 version="$Id: normal.lib,v 1.1 7 1999-07-07 14:39:11obachman Exp $";7 version="$Id: normal.lib,v 1.18 1999-08-03 11:43:08 obachman Exp $"; 9 8 info=" 10 LIBRARY: normal.lib PROCEDURES FOR NORMALIZATION 9 LIBRARY: normal.lib PROCEDURES FOR NORMALIZATION 10 AUTHORS: Gert-Martin Greuel, email: greuel@mathematik.uni-kl.de, 11 Gerhard Pfister, email: pfister@mathematik.uni-kl.de 11 12 12 13 PROCEDURES: … … 21 22 LIB "presolve.lib"; 22 23 LIB "inout.lib"; 23 24 24 /////////////////////////////////////////////////////////////////////////////// 25 25 static … … 178 178 intvec rw,rw1; 179 179 list L; 180 181 180 y = printlevel-voice+2; // y=printlevel (default: y=0) 182 181 def P = basering; … … 222 221 if ( y>=1 ) 223 222 { 224 "// compute p*Hom( rad(J),rad(J)) = p*J:J, p a non-zerodivisor";223 "// compute p*Hom(J,J) = p*J:J, p a non-zerodivisor"; 225 224 "// p is equal to:"; ""; 226 225 p; 227 226 ""; 228 227 } 229 230 228 f = quotient(p*J,J); 231 229 if ( y>=1 ) 232 { "// the module p*Hom(rad(J),rad(J)) = p*J:J, p a non-zerodivisor"; 233 230 { "// the module p*Hom(J,J) = p*J:J, p a non-zerodivisor"; 234 231 "// p"; p; 235 232 "// f=p*J:J";f; … … 281 278 if(y>=1) 282 279 { 283 "// R=Hom( rad(J),rad(J))";280 "// R=Hom(J,J)"; 284 281 " "; 285 282 lastRing; … … 302 299 endphi; 303 300 " "; 304 pause ();301 pause; 305 302 newline; 306 303 } … … 310 307 if(y>=1) 311 308 { 312 "// R is not equal to Hom( rad(J),rad(J)), we have to try again";309 "// R is not equal to Hom(J,J), we have to try again"; 313 310 pause(); 314 311 newline; 315 312 } 316 //---------- Hom(J, j) != R: create new ring and map form old ring -------------313 //---------- Hom(J,J) != R: create new ring and map form old ring ------------- 317 314 // the ring newR1/SBid+syzf will be isomorphic to Hom(J,J) as R-module 318 315 … … 361 358 if(y>=1) 362 359 { 363 "// the ring structure of Hom( rad(J),rad(J)) as R-algebra";360 "// the ring structure of Hom(J,J) as R-algebra"; 364 361 " "; 365 362 "// the linear relations"; … … 465 462 (which is sometimes more efficient) 466 463 RETURN: a list of rings (say nor), in each ring nor[i] are two ideals 467 norid, normap such that the product of the nor[i]/norid is the468 normalization of basering/id and normap is the map from basering/id469 to nor[i]/norid464 norid, normap such that the direct sum of the rings nor[i]/norid is 465 the normalization of basering/id; normap gives the normalization map 466 from basering/id to nor[i]/norid (for each i) 470 467 NOTE: to use the i-th ring type: def R=nor[i]; setring R; 471 468 increasing printlevel displays more comments (default: printlevel=0) … … 492 489 493 490 if(size(#)==0) 491 //--------------- the factorizing Buchberger algorithm is used --------------- 494 492 { 495 493 prim[1]=id; … … 555 553 result = normalizationPrimes(prim[1],maxideal(1)); 556 554 sr = string(size(result)); 557 555 558 556 dbprint(y+1," 559 557 // 'normal' created a list of "+sr+" ring(s). … … 565 563 // normap the map from the original basering to R/norid"); 566 564 567 // kill endphi,endid;568 565 return(result); 569 566 } 570 567 else 568 //------------- the factorizing Buchberger algorithm is not used ------------- 571 569 { 572 570 if(#[1]==0) … … 583 581 "// we have ",size(prim),"components"; 584 582 } 585 for(i=1; i<=size(prim);i++)583 for(i=1; i<=size(prim); i++) 586 584 { 587 585 if(y>=1) … … 626 624 627 625 dbprint(y+1," 628 // 'normal' created a list of "+sr+" ring(s). 626 // 'normal' created a list of "+sr+" ring(s). 629 627 // To see the rings, type (if the name of your list is nor): 630 show( nor); 628 show( nor); 631 629 // To access the 1-st ring and map (and similair for the others), type: 632 def R = nor[1]; setring R; norid; normap; 630 def R = nor[1]; setring R; norid; normap; 633 631 // R/norid is the 1-st ring of the normalization and 634 632 // normap the map from the original basering to R/norid"); … … 653 651 static 654 652 proc normalizationPrimes(ideal i,ideal ihp, list #) 655 "USAGE: normalizationPrimes(i); i prime ideal 653 "USAGE: normalizationPrimes(i,ihp[,si]); i prime ideal, ihp map 654 (partial normalization), si SB of singular locus 656 655 RETURN: a list of one ring L=R, in R are two ideals 657 656 S,M such that R/M is the normalization 658 657 S is a standardbasis of M 659 658 NOTE: to use the ring: def r=L[1];setring r; 660 printlevel >= 1: display comments (default: printlevel=0)659 printlevel >= voice+1: display comments (default: printlevel=0) 661 660 EXAMPLE: example normalizationPrimes; shows an example 662 661 " 663 662 { 664 663 int y = printlevel-voice+2; // y=printlevel (default: y=0) 665 664 666 665 if(y>=1) 667 666 { … … 695 694 setring BAS; 696 695 return(result); 697 698 696 } 699 697 … … 702 700 "// SB-computation of the input ideal"; 703 701 } 704 list SM=mstd(i); 705 702 list SM=mstd(i); //here the work starts 703 int dimSM = dim(SM[1]); 704 // Case: Get an ideal containing a unit 705 if( dimSM == -1) 706 { ""; 707 " // A unit ideal was found."; 708 " // Stop with partial result computed so far";""; 709 710 MB=SM[2]; 711 intvec rw; 712 list LL=substpart(MB,ihp,0,rw); 713 def newR6=LL[1]; 714 setring newR6; 715 ideal norid=endid; 716 ideal normap=endphi; 717 kill endid,endphi; 718 export norid; 719 export normap; 720 result=newR6; 721 setring BAS; 722 return(result); 723 } 724 706 725 if(y>=1) 707 726 { 708 727 "// the dimension is:"; ""; 709 dim (SM[1]);"";728 dimSM;""; 710 729 } 711 730 … … 860 879 &&(size(#)==0)) 861 880 { 862 881 /* 882 write (":a normal-fehler" , 883 "basering:",string(basering),"nvars:", nvars(basering), 884 "dim(SM[1]):",dim(SM[1]),"ncols(jacob(SM[2]))",ncols(jacob(SM[2])), 885 "SM:", SM); 886 887 pause(); 888 */ 863 889 J=minor(jacob(SM[2]),nvars(basering)-dim(SM[1])); 864 890 //ti=timer; 865 if(y >=1)891 if(y >=1 ) 866 892 { 867 893 "// SB of singular locus will be computed"; … … 1090 1116 return(tluser); 1091 1117 } 1118 // A component with singular locus the whole component found 1119 if( Ann == 1) 1120 { 1121 "// Input appeared not to be a radical ideal!"; 1122 "// A (everywhere singular) component with ideal"; 1123 "// equal to its Jacobian ideal was found"; 1124 "// Procedure will stop with partial result computed so far";""; 1125 1126 MB=SM[2]; 1127 intvec rw; 1128 list LL=substpart(MB,ihp,0,rw); 1129 def newR6=LL[1]; 1130 setring newR6; 1131 ideal norid=endid; 1132 ideal normap=endphi; 1133 kill endid,endphi; 1134 export norid; 1135 export normap; 1136 result=newR6; 1137 setring BAS; 1138 return(result); 1139 } 1092 1140 else 1093 1141 { … … 1173 1221 static 1174 1222 proc substpart(ideal endid, ideal endphi, int homo, intvec rw) 1223 1224 "//Repeated application of elimpart to endid, until no variables can be 1225 //directy substituded. homo=1 if input is homogeneous, rw contains 1226 //original weights, endphi (partial) normalization map"; 1227 1175 1228 { 1176 1229 def newRing=basering;
Note: See TracChangeset
for help on using the changeset viewer.