Changeset faed79 in git for Singular/LIB/algebra.lib


Ignore:
Timestamp:
Feb 20, 2009, 10:26:50 AM (15 years ago)
Author:
Hans Schönemann <hannes@…>
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
67555dbff0c54631269c2ede478103e9cd2cc3cf
Parents:
9b4893753f061124557a6f764b1588a09516031e
Message:
*gmg: new versions for normal.lib


git-svn-id: file:///usr/local/Singular/svn/trunk@11410 2c84dea3-7e68-4137-9b89-c4e89433aadc
File:
1 edited

Legend:

Unmodified
Added
Removed
  • Singular/LIB/algebra.lib

    r9b4893 rfaed79  
     1//syntax of nselect adopted (intvec instead of two integers),
     2//help for finitenessTest and mapIsFinite edited
     3//new proc  nonZeroEntry(id), used to fix a bug in proc finitenessTest
    14///////////////////////////////////////////////////////////////////////////////
    2 version="$Id: algebra.lib,v 1.18 2008-10-24 12:16:59 Singular Exp $";
     5version="$Id: algebra.lib,v 1.19 2009-02-20 09:26:50 Singular Exp $";
    36category="Commutative Algebra";
    47info="
     
    1922 noetherNormal(id);     noether normalization of ideal id
    2023 mapIsFinite(R,phi,I);  query for finiteness of map phi:R --> basering/I
     24
     25AUXILIARY PROCEDURES:
    2126 finitenessTest(i,z);   find variables which occur as pure power in lead(i)
     27 nonZeroEntry(id);      list describing non-zero entries of an identifier
    2228";
    2329
     
    778784@format
    779785         a list l of two ideals, say I,J:
    780          - I defines a map (coordinate change in the basering), such that:
    781            if we define  map phi=basering,I;
     786         - I is generated by a subset of the variables with size(I) = dim(id)
     787         - J defines a map (coordinate change in the basering), such that:
     788           if we define  map phi=basering,J;
    782789           then k[var(1),...,var(n)]/phi(id) is finite over k[I].
    783          - J is generated by a subset of the variables with size(J) = dim(id)
    784790         If p is given, 0<=p<=100, a sparse coordinate change with p percent
    785791         of the matrix entries being 0 (default: p=0 i.e. dense)
     
    891897///////////////////////////////////////////////////////////////////////////////
    892898
    893 proc finitenessTest(ideal i,list #)
     899proc finitenessTest(ideal i, list #)
    894900"USAGE:   finitenessTest(J[,v]); J ideal, v intvec (say v1,...,vr with vi>0)
    895901RETURN:
     
    906912THEORY:  If J is a standard basis of an ideal generated by x_1 - f_1(y),...,
    907913         x_n - f_n with y_j ordered lexicographically and y_j >> x_i, then,
    908          if y_i appears as pure power in the leading term of J[k]. J[k] defines
     914         if y_i appears as pure power in the leading term of J[k], J[k] defines
    909915         an integral relation for y_i over the y_(i+1),... and the f's.
    910916         Moreover, in this situation, if l[2] = y_1,...,y_r, then K[y_1,...y_r]
    911917         is finite over K[f_1..f_n]. If J contains furthermore polynomials
    912918         h_j(y), then K[y_1,...y_z]/<h_j> is finite over K[f_1..f_n].
     919         For a proof cf. Prop. 3.1.5, p. 214. in [G.-M. Greuel, G. Pfister:
     920         A SINGULAR Introduction to Commutative Algebra, 2nd Edition,
     921         Springer Verlag (2007)]
    913922EXAMPLE: example finitenessTest; shows an example
    914923"
     
    916925   intvec v,w;
    917926   int j,z,ii;
     927   v[n]=0;                             //v should have size n
    918928   intvec V = 1..n;
     929   list nze;                           //the non-zero entries of a leadexp
    919930   if (size(#) != 0 )
    920931   {
     
    929940   ideal relation,zero,nonzero;
    930941   // ---------------------- check leading exponents -------------------------
     942
    931943   for(j=1;j<=ncols(i);j++)
    932944   {
    933       w=leadexp(i[j]);
    934       if(size(ideal(w))==1)           //the leading term of i[j] is a
     945      w = leadexp(i[j]);
     946      nze = nonZeroEntry(w);
     947      if( nze[1] == 1 )               //the leading term of i[j] is a
    935948      {                               //pure power of some variable
    936949        if( W*w != 0 )                //case: variable has index appearing in V
     
    944957   //the nonzero entries of v correspond to variables which occur as
    945958   //pure power in the leading term of some polynomial in i
     959
    946960   for(j=1; j<=size(v); j++)
    947961   {
     
    973987
    974988proc mapIsFinite(map phi, R, list #)
    975 "USAGE:   mapIsFinite(phi,R[,J]); R a ring, phi: R ---> basering a map
     989"USAGE:   mapIsFinite(phi,R[,J]); R the preimage ring of the map
     990         phi: R ---> basering
    976991         J an ideal in the basering, J = 0 if not given
    977992RETURN:  1 if R ---> basering/J is finite and 0 else
     993NOTE:    R may be a quotient ring (this will be ignored since a map R/I-->S/J
     994         is finite iff the induced map R-->S/J is finite).
     995SEE ALSO: finitenessTest
    978996EXAMPLE: example mapIsFinite; shows an example
    979997"
     
    10231041//////////////////////////////////////////////////////////////////////////////
    10241042
     1043proc nonZeroEntry(id)
     1044"USAGE:  nonZeroEntry(id); id=object for which the test 'id[i]!=0', i=1,..,N,
     1045         N=size(id) (resp. ncols(id) for id of type ideal or module)
     1046         is defined (e.g. ideal, vector, list of polynomials, intvec,...)
     1047RETURN:  @format
     1048         a list, say l, with l[1] an integer, l[2], l[3] integer vectors:
     1049         - l[1] number of non-zero entries of id
     1050         - l[2] intvec of size l[1] with l[2][i]=i if id[i] != 0
     1051           in case l[1]!=0 (and l[2]=0 if l[1]=0)
     1052         - l[3] intvec with l[3][i]=1 if id[i]!=0 and l[3][i]=0 else
     1053@end format
     1054NOTE:
     1055EXAMPLE: example nonZeroEntry; shows an example
     1056"
     1057{
     1058   int ii,jj,N,n;
     1059   intvec v,V;
     1060
     1061   if ( typeof(id) == "ideal" || typeof(id) == "module" )
     1062   {
     1063      N = ncols(id);
     1064   }
     1065   else
     1066   {
     1067     N = size(id);
     1068   }
     1069   for ( ii=1; ii<=N; ii++ )
     1070   {
     1071      V[ii] = 0;
     1072      if ( id[ii] != 0 )
     1073      {
     1074         n++;
     1075         v=v,ii;      //the first entry of v is always 0
     1076         V[ii] = 1;
     1077      }
     1078   }
     1079   if ( size(v) > 1 ) //if id[ii] != 0 for at least one ii delete the first 0
     1080   {
     1081      v = v[2..size(v)];
     1082   }
     1083
     1084   list l = n,v,V;
     1085   return(l);
     1086}
     1087example
     1088{ "EXAMPLE:"; echo = 2;
     1089   ring r = 0,(a,b,c),dp;
     1090   poly f = a3c+b3+c2+a;
     1091   intvec v = leadexp(f);
     1092   nonZeroEntry(v);
     1093
     1094   intvec w;
     1095   list L = 37,0,f,v,w;
     1096   nonZeroEntry(L);
     1097}
     1098//////////////////////////////////////////////////////////////////////////////
     1099
Note: See TracChangeset for help on using the changeset viewer.