Changeset e17927 in git
- Timestamp:
- Oct 31, 2008, 4:32:45 PM (15 years ago)
- Branches:
- (u'spielwiese', '0d6b7fcd9813a1ca1ed4220cfa2b104b97a0a003')
- Children:
- ae61244678c3fb06cf465e22e3f6fa5315b9b6f5
- Parents:
- 486043b7198dd43aadbe6a8b1f1d6fec45bbdfa6
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/LIB/finvar.lib
r486043 re17927 1 1 /////////////////////////////////////////////////////////////////////////////// 2 version="$Id: finvar.lib,v 1.7 7 2008-10-06 17:04:27Singular Exp $"2 version="$Id: finvar.lib,v 1.78 2008-10-31 15:32:45 Singular Exp $" 3 3 category="Invariant theory"; 4 4 info=" … … 281 281 REY=concat(REY,P(k)*vars); // adding new mapping to REY 282 282 if (v) 283 { " Group element " +string(g)+" has been found.";283 { " Group element ",g," has been found."; 284 284 } 285 285 } … … 292 292 if (v) 293 293 { if (g<=i) 294 { " There are only " +string(g)+" group elements.";294 { " There are only ",g," group elements."; 295 295 } 296 296 ""; … … 573 573 } 574 574 if (v) 575 { " Term " +string(j)+" of the Molien series has been computed.";575 { " Term ",j," of the Molien series has been computed."; 576 576 } 577 577 } … … 726 726 setring bre; 727 727 if (v) 728 { " Term " +string(i)+" of the Molien series has been computed.";728 { " Term ",i," of the Molien series has been computed."; 729 729 } 730 730 } … … 843 843 } 844 844 if (v) 845 { " Term " +string(i)+" of the Molien series has been computed.";845 { " Term ",i," of the Molien series has been computed."; 846 846 } 847 847 } … … 1139 1139 } 1140 1140 if (v) 1141 { " Group element " +string(g)+" has been found.";1141 { " Group element ",g," has been found."; 1142 1142 } 1143 1143 } … … 1150 1150 if (v) 1151 1151 { if (g<=i) 1152 { " There are only " +string(g)+" group elements.";1152 { " There are only ",g," group elements."; 1153 1153 } 1154 1154 ""; … … 1361 1361 } 1362 1362 if (v) 1363 { " Group element " +string(g)+" has been found.";1363 { " Group element ",g," has been found."; 1364 1364 } 1365 1365 setring br; … … 1373 1373 if (v) 1374 1374 { if (g<=i) 1375 { " There are only " +string(g)+" group elements.";1375 { " There are only ",g," group elements."; 1376 1376 } 1377 1377 ""; … … 2166 2166 // inviarants of degree d 2167 2167 if (v) 2168 { " Computing primary invariants in degree " +string(d)+":";2168 { " Computing primary invariants in degree ",d,":"; 2169 2169 } 2170 2170 B=invariant_basis_reynolds(REY,d,intvec(cd,6)); // basis of invariants of … … 2315 2315 setring br; 2316 2316 if (v) 2317 { " Computing primary invariants in degree " +string(d)+":";2317 { " Computing primary invariants in degree ",d,":"; 2318 2318 } 2319 2319 B=invariant_basis_reynolds(REY,d,intvec(cd,6)); // basis of invariants of … … 2454 2454 d++; // degree where we'll search 2455 2455 if (v) 2456 { " Computing primary invariants in degree " +string(d)+":";2456 { " Computing primary invariants in degree ",d,":"; 2457 2457 } 2458 2458 B=invariant_basis_reynolds(REY,d,intvec(-1,6)); // basis of invariants of … … 2595 2595 d++; // degree where we'll search 2596 2596 if (v) 2597 { " Computing primary invariants in degree " +string(d)+":";2597 { " Computing primary invariants in degree ",d,":"; 2598 2598 } 2599 2599 B=invariant_basis_reynolds(REY,d,intvec(-1,6)); // basis of invariants of … … 2742 2742 d++; // degree where we'll search 2743 2743 if (v) 2744 { " Computing primary invariants in degree " +string(d)+":";2744 { " Computing primary invariants in degree ",d,":"; 2745 2745 } 2746 2746 B=invariant_basis(d,#[1..gen_num]); // basis of invariants of degree d … … 3036 3036 } 3037 3037 else 3038 { "HELP: The " +string(dif)+" random combination(s) of the "+string(cd)+" basis elements with";3039 " coefficients in the range from -" +string(max)+" to "+string(max)+" did not lower the";3040 " dimension by " +string(dif)+". You can abort, try again or give a new range:";3038 { "HELP: The ",dif," random combination(s) of the ",cd," basis elements with"; 3039 " coefficients in the range from -",max," to ",max," did not lower the"; 3040 " dimension by ",dif,". You can abort, try again or give a new range:"; 3041 3041 answer=""; 3042 3042 while (answer<>"n … … 3062 3062 { flag=1; 3063 3063 while (flag) 3064 { " Give a new <int> > " +string(max)+" that bounds the range of coefficients:";3064 { " Give a new <int> > ",max," that bounds the range of coefficients:"; 3065 3065 answer=read(""); 3066 3066 for (j=1;j<=size(answer)-1;j++) … … 3132 3132 } 3133 3133 else 3134 { "HELP: The " +string(dif)+" random combination(s) of the "+string(cd)+" basis elements with";3135 " coefficients in the range from -" +string(max)+" to "+string(max)+" did not lower the";3136 " dimension by " +string(dif)+". You can abort, try again, lower the number of";3134 { "HELP: The ",dif," random combination(s) of the ",cd," basis elements with"; 3135 " coefficients in the range from -",max," to ",max," did not lower the"; 3136 " dimension by ",dif,". You can abort, try again, lower the number of"; 3137 3137 " combinations searched for by 1 or give a larger coefficient range:"; 3138 3138 answer=""; … … 3171 3171 { flag=1; 3172 3172 while (flag) 3173 { " Give a new <int> > " +string(max)+" that bounds the range of coefficients:";3173 { " Give a new <int> > ",max," that bounds the range of coefficients:"; 3174 3174 answer=read(""); 3175 3175 for (j=1;j<=size(answer)-1;j++) … … 3301 3301 // inviarants of degree d 3302 3302 if (v) 3303 { " Computing primary invariants in degree " +string(d)+":";3303 { " Computing primary invariants in degree ",d,":"; 3304 3304 } 3305 3305 B=invariant_basis_reynolds(REY,d,intvec(cd,6)); // basis of invariants of … … 3327 3327 if (ncols(P)==i) 3328 3328 { "WARNING: The return value is not a set of primary invariants, but"; 3329 " polynomials qualifying as the first " +string(i)+" primary invariants.";3329 " polynomials qualifying as the first ",i," primary invariants."; 3330 3330 return(matrix(P)); 3331 3331 } … … 3454 3454 setring br; 3455 3455 if (v) 3456 { " Computing primary invariants in degree " +string(d)+":";3456 { " Computing primary invariants in degree ",d,":"; 3457 3457 } 3458 3458 B=invariant_basis_reynolds(REY,d,intvec(cd,6)); // basis of invariants of … … 3480 3480 if (ncols(P)==n+1) 3481 3481 { "WARNING: The first return value is not a set of primary invariants,"; 3482 " but polynomials qualifying as the first " +string(i)+" primary invariants.";3482 " but polynomials qualifying as the first ",i," primary invariants."; 3483 3483 return(matrix(P)); 3484 3484 } … … 3592 3592 d++; // degree where we'll search 3593 3593 if (v) 3594 { " Computing primary invariants in degree " +string(d)+":";3594 { " Computing primary invariants in degree ",d,":"; 3595 3595 } 3596 3596 B=invariant_basis_reynolds(REY,d,intvec(-1,6)); // basis of invariants of … … 3620 3620 if (ncols(P)==i) 3621 3621 { "WARNING: The first return value is not a set of primary invariants,"; 3622 " but polynomials qualifying as the first " +string(i)+" primary invariants.";3622 " but polynomials qualifying as the first ",i," primary invariants."; 3623 3623 return(matrix(P)); 3624 3624 } … … 3739 3739 d++; // degree where we'll search 3740 3740 if (v) 3741 { " Computing primary invariants in degree " +string(d)+":";3741 { " Computing primary invariants in degree ",d,":"; 3742 3742 } 3743 3743 B=invariant_basis_reynolds(REY,d,intvec(-1,6)); // basis of invariants of … … 3767 3767 if (ncols(P)==n+1) 3768 3768 { "WARNING: The first return value is not a set of primary invariants,"; 3769 " but polynomials qualifying as the first " +string(i)+" primary invariants.";3769 " but polynomials qualifying as the first ",i," primary invariants."; 3770 3770 return(matrix(P)); 3771 3771 } … … 3897 3897 d++; // degree where we'll search 3898 3898 if (v) 3899 { " Computing primary invariants in degree " +string(d)+":";3899 { " Computing primary invariants in degree ",d,":"; 3900 3900 } 3901 3901 B=invariant_basis(d,#[1..gen_num]); // basis of invariants of degree d … … 3924 3924 if (ncols(P)==n+1) 3925 3925 { "WARNING: The first return value is not a set of primary invariants,"; 3926 " but polynomials qualifying as the first " +string(i)+" primary invariants.";3926 " but polynomials qualifying as the first ",i," primary invariants."; 3927 3927 return(matrix(P)); 3928 3928 } … … 4339 4339 { // elements in the current degree (i-1) 4340 4340 if (v) 4341 { "Searching in degree " +string(i-1)+", we need to find "+string(int(dimmat[i,1]))+" invariant(s)...";4341 { "Searching in degree ",i-1,", we need to find ",int(dimmat[i,1])," invariant(s)..."; 4342 4342 } 4343 4343 TEST=sP; … … 4467 4467 of monomials) of the basering modulo the primary invariants, mapping 4468 4468 those to invariants with the Reynolds operator. Among these images 4469 or their power products we pick secondary invariants using Groebner 4470 basis techniques (see S. King: Fast Computation of Secondary 4469 or their power products we pick secondary invariants using Groebner 4470 basis techniques (see S. King: Fast Computation of Secondary 4471 4471 Invariants). 4472 4472 The size of this set can be read off from the Molien series. … … 4626 4626 { // elements in the current degree (i-1) 4627 4627 if (v) 4628 { "Searching in degree " +string(i-1)+", we need to find "+string(int(dimmat[i,1]))+4628 { "Searching in degree ",i-1,", we need to find ",int(dimmat[i,1]), 4629 4629 " invariant(s)..."; 4630 4630 " Looking for Power Products..."; … … 4919 4919 of monomials) of the basering modulo the primary invariants, mapping 4920 4920 those to invariants with the Reynolds operator. Among these images 4921 or their power products we pick secondary invariants using Groebner 4921 or their power products we pick secondary invariants using Groebner 4922 4922 basis techniques (see S. King: Fast Computation of Secondary Invariants). 4923 4923 The size of this set can be read off from the Molien series. Here, only … … 5092 5092 { // elements in the current degree (i-1) 5093 5093 if (v) 5094 { "Searching in degree " +string(i-1)+". There are "+5095 string(int(dimmat[i,1]))+" secondary invariant(s)...";5094 { "Searching in degree ",i-1,". There are ", 5095 int(dimmat[i,1])," secondary invariant(s)..."; 5096 5096 } 5097 5097 counter = 0; // we'll count up to dimmat[i,1] … … 5174 5174 attrib(RedSSort[i-1][k],"size",saveAttr); 5175 5175 if (v) 5176 { " We found reducible sec. inv. number " +string(counter);5176 { " We found reducible sec. inv. number ",counter; 5177 5177 } 5178 5178 if (int(dimmat[i,1])<>counter) … … 5239 5239 { RedISSort[i-1] = NF(B,sP); 5240 5240 } 5241 if (v) {" We found " +string(size(B))+" irred. sec. inv.";}5241 if (v) {" We found ",size(B)," irred. sec. inv.";} 5242 5242 } 5243 5243 else … … 5294 5294 } 5295 5295 if (v) 5296 { " We found irred. sec. inv. number " +string(irrcounter);5296 { " We found irred. sec. inv. number ",irrcounter; 5297 5297 } 5298 5298 Reductor = ideal(helpP); … … 5331 5331 { RedISSort[i-1] = B; 5332 5332 } 5333 if (v) {" We found " +string(size(B))+" irred. sec. inv.";}5333 if (v) {" We found ",size(B)," irred. sec. inv.";} 5334 5334 } 5335 5335 else … … 5357 5357 } 5358 5358 if (v) 5359 { " We found irred. sec. inv. number " +string(irrcounter);5359 { " We found irred. sec. inv. number ",irrcounter; 5360 5360 } 5361 5361 Reductor = ideal(helpP); … … 5512 5512 { // elements in the current degree (i-1) 5513 5513 if (v) 5514 { "Searching in degree " +string(i-1)+", we need to find "+string(deg_dim_vec[i])+" invariant(s)...";5514 { "Searching in degree ",i-1,", we need to find ",deg_dim_vec[i]," invariant(s)..."; 5515 5515 } 5516 5516 TEST=sP; … … 5650 5650 of monomials) of the basering modulo the primary invariants, mapping 5651 5651 those to invariants with the Reynolds operator. Among these images 5652 or their power products we pick secondary invariants using Groebner 5652 or their power products we pick secondary invariants using Groebner 5653 5653 basis techniques (see S. King: Fast Computation of Secondary Invariants). 5654 5654 The size of this set can be read off from the Molien series. … … 5811 5811 { // elements in the current degree (i-1) 5812 5812 if (v) 5813 { "Searching in degree " +string(i-1)+", we need to find "+string(deg_dim_vec[i])+5813 { "Searching in degree ",i-1,", we need to find ",deg_dim_vec[i], 5814 5814 " invariant(s)..."; 5815 5815 " Looking for Power Products..."; … … 6110 6110 hence the number of secondary invariants is the product of the degrees of 6111 6111 primary invariants divided by the group order. 6112 NOTE: <secondary_and_irreducibles_no_molien> should usually be faster and of 6112 NOTE: <secondary_and_irreducibles_no_molien> should usually be faster and of 6113 6113 more useful functionality. 6114 6114 SEE ALSO: secondary_and_irreducibles_no_molien … … 6194 6194 max=max/nrows(REY); 6195 6195 if (v) 6196 { " We need to find " +string(max)+" secondary invariants.";6196 { " We need to find ",max," secondary invariants."; 6197 6197 ""; 6198 6198 "In degree 0 we have: 1"; … … 6233 6233 if (deg_vec[k]<>i) 6234 6234 { if (v) 6235 { "Searching in degree " +string(i)+"...";6235 { "Searching in degree ",i,"..."; 6236 6236 } 6237 6237 mon = kbase(sP,i); … … 6267 6267 S[counter] = B[j]; 6268 6268 if (v) 6269 { " We found sec. inv. number " +string(counter)+" in degree "+string(i);6269 { " We found sec. inv. number ",counter," in degree ",i; 6270 6270 } 6271 6271 if (counter == max) {break;} … … 6299 6299 S[counter] = B[j]; 6300 6300 if (v) 6301 { " We found sec. inv. number " +string(counter)+" in degree "+string(i);6301 { " We found sec. inv. number ",counter," in degree ",i; 6302 6302 } 6303 6303 if (counter == max) {break;} … … 6356 6356 monomials) of the basering modulo primary invariants, mapping those to 6357 6357 invariants with the Reynolds operator. Among these images 6358 or their power products we pick secondary invariants using Groebner 6358 or their power products we pick secondary invariants using Groebner 6359 6359 basis techniques (see S. King: Fast Computation of Secondary Invariants). 6360 6360 We have the Reynolds operator, hence, we are in the non-modular case. … … 6447 6447 max=max/nrows(REY); 6448 6448 if (v) 6449 { " We need to find " +string(max)+" secondary invariants.";6449 { " We need to find ",max," secondary invariants."; 6450 6450 ""; 6451 6451 "In degree 0 we have: 1"; … … 6502 6502 if (deg_vec[l]<>i-1) 6503 6503 { if (v) 6504 { "Searching in degree " +string(i-1);6504 { "Searching in degree ",i-1; 6505 6505 " Looking for Power Products..."; 6506 6506 } … … 6863 6863 { d++; 6864 6864 if (deg_vec[l]<>d) 6865 { if (v) { "Searching irred. sec. inv. in degree " +string(d); }6865 { if (v) { "Searching irred. sec. inv. in degree ",d; } 6866 6866 NewIS = ideal(); 6867 6867 NewIScounter=0; … … 6872 6872 if (mon[1]<>0) 6873 6873 { 6874 if (v) { " We have " +string(monsize)+" candidates for irred. secondaries";}6874 if (v) { " We have ",monsize," candidates for irred. secondaries";} 6875 6875 block=0; // Loops through the monomials 6876 6876 while (block<monsize) … … 6895 6895 if (helpP<>0) 6896 6896 { counter++; // found new irr. sec. inv.! 6897 if (v) { " We found irr. sec. inv. number " +string(counter)+" in degree "+string(d); }6897 if (v) { " We found irr. sec. inv. number ",counter," in degree ",d; } 6898 6898 IS[counter] = Inv[block]; 6899 6899 sIS = sIS,helpP; … … 7017 7017 } 7018 7018 // ring alskdfalkdsj=0,x,dp; 7019 // matrix M[1][2]=1,(1-x)^n; 7019 // matrix M[1][2]=1,(1-x)^n; 7020 7020 // export alskdfalkdsj; 7021 7021 // export M; // we look at our primary invariants as … … 7070 7070 // module M(2)=syz(M(1)); // nres(M(1),2)[2]; 7071 7071 // option(set,save_opts); 7072 if (v) 7072 if (v) 7073 7073 { "Syzygies of the \"trivial\" secondaries"; } 7074 7074 module M(2)=nres(M(1),2)[2]; … … 7079 7079 // ring, generated by the primary invariants 7080 7080 7081 // generate a ring where we can do elimination 7081 // generate a ring where we can do elimination 7082 7082 // in order to make it weighted homogeneous, we choose appropriate weights 7083 7083 if (v) … … 7098 7098 ideal GElimP = std(ElimP,EPvec,degvec(maxideal(1))); 7099 7099 attrib(GElimP,"isSB",1); 7100 int newN = ncols(GElimP); 7100 int newN = ncols(GElimP); 7101 7101 matrix M[k][m+k*newN]; 7102 7102 M[1..k,1..m]=matrix(imap(br,M(2))); // will contain a module - … … 7106 7106 } 7107 7107 } 7108 7109 M=elim(module(M),1..n); // eliminating x(1..n), std-calculation 7110 // is done internally - 7108 M=elim(module(M),1..n); // eliminating x(1..n), std-calculation 7109 // is done internally - 7110 //M=std(module(M)); // we have already an elimination ordering 7111 //M=nselect(M,1..n); 7111 7112 M=homog(module(M),h); // homogenize for 'minbase' 7112 7113 M=minbase(module(M)); … … 8171 8172 THEORY: We do an incremental search in increasing degree d. Generators of the invariant 8172 8173 ring are found among the orbit sums of degree d. The generators are chosen by 8173 Groebner basis techniques (see S. King: Minimal generating sets of non-modular 8174 Groebner basis techniques (see S. King: Minimal generating sets of non-modular 8174 8175 invariant rings of finite groups). 8175 NOTE: invariant_algebra_perm should not be used in rings with weighted orders. 8176 NOTE: invariant_algebra_perm should not be used in rings with weighted orders. 8176 8177 SEE ALSO: invariant_algebra_reynolds 8177 8178 KEYWORDS: invariant ring minimal generating set permutation group … … 8266 8267 OrbSize = ncols(OrbSums); 8267 8268 if (v) 8268 { " We have " +string(OrbSize)+" orbit sums of degree "+string(d);8269 { " We have ",OrbSize," orbit sums of degree ",d; 8269 8270 } 8270 8271 RedSums = reduce(OrbSums,sG); … … 8277 8278 totalcount++; 8278 8279 if (v) 8279 { " We found generator number " +string(totalcount)+8280 " in degree " +string(d);8280 { " We found generator number ",totalcount, 8281 " in degree ",d; 8281 8282 } 8282 8283 G[totalcount] = OrbSums[i]; … … 8350 8351 THEORY: We do an incremental search in increasing degree d. Generators of the invariant 8351 8352 ring are found among the Reynolds images of monomials of degree d. The generators are 8352 chosen by Groebner basis techniques (see S. King: Minimal generating sets of 8353 chosen by Groebner basis techniques (see S. King: Minimal generating sets of 8353 8354 non-modular invariant rings of finite groups). 8354 8355 NOTE: invariant_algebra_reynolds should not be used in rings with weighted orders. … … 8386 8387 monsize = ncols(mon); 8387 8388 if (mon[1]<>0) 8388 { if (v) { " We have " +string(monsize)+8389 " relevant monomials in degree " +string(d);}8389 { if (v) { " We have ",monsize, 8390 " relevant monomials in degree ",d;} 8390 8391 block=0; // Loops through the monomials 8391 8392 while (block<monsize) … … 8410 8411 if (helpP<>0) 8411 8412 { counter++; // found new inv. algebra generator! 8412 if (v) { " We found generator number "+string(counter)+ 8413 " in degree "+string(d); } 8413 if (v) { " We found generator number ",counter," in degree ",d; } 8414 8414 G[counter] = Inv[block]; 8415 8415 sG[sGoffset+counter] = helpP;
Note: See TracChangeset
for help on using the changeset viewer.