Changeset 87dcc3 in git for Singular/LIB/finvar.lib
- Timestamp:
- Dec 20, 2007, 2:56:21 PM (16 years ago)
- Branches:
- (u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
- Children:
- 2ec0d5d3adb763304233a52a8b7b8b7a0ea1258f
- Parents:
- 0fe8302bf29ee6908ae99acfc5ce2a788b79af7f
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/LIB/finvar.lib
r0fe830 r87dcc3 1 1 /////////////////////////////////////////////////////////////////////////////// 2 version="$Id: finvar.lib,v 1.7 4 2007-12-19 18:04:15king Exp $"2 version="$Id: finvar.lib,v 1.75 2007-12-20 13:56:21 king Exp $" 3 3 category="Invariant theory"; 4 4 info=" … … 78 78 LIB "general.lib"; 79 79 LIB "algebra.lib"; 80 LIB "ring.lib"; 80 81 81 82 /////////////////////////////////////////////////////////////////////////////// … … 6993 6994 { ""; 6994 6995 } 6995 // ring alskdfalkdsj=0,x,dp; 6996 // matrix M[1][2]=1,(1-x)^n; 6997 // export alskdfalkdsj; 6998 // export M; // we look at our primary invariants as 6999 // setring br; // such of the subgroup that only 7000 // matrix REY=matrix(maxideal(1)); // contains the identity, this means that 7001 // ch does not divide the order anymore, 7002 // this means that we can make use of the 7003 // Molien series again - M[1,1]/M[1,2] is 7004 // the Molien series of that group, we 7005 // now calculate the secondary invariants 7006 // of this subgroup in the usual fashion 7007 // where the primary invariants are the 7008 // ones from the bigger group 6996 6997 // we look at our primary invariants as such of the subgroup that only 6998 // contains the identity, this means that ch does not divide the order anymore, 6999 // this means that we can make use of the Molien series again - M[1,1]/M[1,2] is 7000 // the Molien series of that group, we now calculate the secondary invariants 7001 // of this subgroup in the usual fashion where the primary invariants are the 7002 // ones from the bigger group. 7009 7003 if (v) 7010 7004 { " First, get secondary invariants for the trivial action, with respect to"; … … 7018 7012 return(); 7019 7013 } 7020 matrix trivialS = matrix(kbase(GP));// , trivialIS=secondary_charp(P,REY,"alskdfalkdsj",v); 7021 // kill trivialIS; 7022 // kill alskdfalkdsj; 7023 // now we have those secondary invariants 7024 int k=ncols(trivialS); // k is the number of the secondary 7025 // invariants, we just calculated 7014 matrix trivialS = matrix(kbase(GP)); // Now we have those secondary invariants! 7015 // Simply they are standard monomials. 7016 int k=ncols(trivialS); // k is the number of trivial s.i. 7026 7017 if (v) 7027 7018 { " We calculate secondary invariants from the ones found for the trivial"; … … 7041 7032 M(1)[i,1..k]=B[1..k]; // we will look for the syzygies of M(1) 7042 7033 } 7043 // intvec save_opts=option(get);7044 // option(returnSB,redSB);7045 // module M(2)=syz(M(1)); // nres(M(1),2)[2];7046 // option(set,save_opts);7047 7034 if (v) 7048 7035 { " Compute syzygies of the \"trivial\" secondaries"; } … … 7060 7047 intvec dv = degvec(ideal(P)),1; 7061 7048 ring newR = char(br), (y(1..n),h),(a(dv),dp); 7062 def R = br + newR; 7049 def tmpR = br + newR; 7050 setring tmpR; 7051 intvec newdv=degvec(maxideal(1)); 7052 def R = changeord("a("+string(newdv)+"),dp"); 7063 7053 setring R; 7054 kill tmpR; 7064 7055 matrix P=fetch(br,P); // primary invariants in the new ring 7065 7056 ideal ElimP; 7066 7057 for (i=1;i<=n;i++) 7067 7058 { ElimP[i]=y(i)-P[1,i]; } 7068 def RHilb = newR+br; // the new variables only appear linearly, so that block order wouldn't hurt 7069 setring RHilb; 7070 ideal ElimP=imap(R,ElimP); 7071 intvec EPvec = hilb(groebner(ElimP),1,degvec(maxideal(1))); 7072 setring R; 7073 ideal GElimP = std(ElimP,EPvec,degvec(maxideal(1))); 7074 attrib(GElimP,"isSB",1); 7075 int newN = ncols(GElimP); 7059 // def RHilb = newR+br; // the new variables only appear linearly, so that block order wouldn't hurt 7060 // setring RHilb; 7061 // ideal ElimP=imap(R,ElimP); 7062 // intvec EPvec = hilb(groebner(ElimP),1,degvec(maxideal(1))); 7063 // setring R; 7064 // ideal GElimP = std(ElimP,EPvec,degvec(maxideal(1))); 7065 // attrib(GElimP,"isSB",1); 7066 // int newN = ncols(GElimP); 7067 int newN = ncols(ElimP); 7076 7068 matrix M[k][m+k*newN]; 7077 7069 M[1..k,1..m]=matrix(imap(br,M(2))); // will contain a module - 7078 for (i=1;i<=newN;i++) 7079 { for (j=1;j<=k;j++)7080 {M[j,m+(i-1)*k+j]=GElimP[i]; // y(i)-P[1,i];7081 }7082 }7083 7084 M=elim(module(M),1,n); // eliminating x(1..n), std-calculation 7085 //is done internally -7070 for (i=1;i<=newN;i++){ 7071 for (j=1;j<=k;j++) { 7072 // M[j,m+(i-1)*k+j]=GElimP[i]; // y(i)-P[1,i]; 7073 M[j,m+(i-1)*k+j]=ElimP[i]; 7074 } 7075 } 7076 7077 M=elim(module(M),1,n); // eliminating x(1..n), std-calculation is done internally - 7086 7078 M=homog(module(M),h); // homogenize for 'minbase' 7087 7079 M=minbase(module(M)); … … 7091 7083 } 7092 7084 substitute = substitute,ideal(P),1; 7093 map f=R,substitute; 7085 map f=R,substitute; // replacing y(1..n) by primary 7094 7086 // invariants and h by 1 - 7095 7087 M=f(M); // we can't directly map from R to br 7096 7088 setring br; // if there is a minpoly. 7097 module M(3)=imap(R,M); 7089 module M(3)=imap(R,M); // M(2) is the new module 7098 7090 m=ncols(M(3)); 7099 7091 matrix S[1][m];
Note: See TracChangeset
for help on using the changeset viewer.