Changeset faed79 in git for Singular/LIB/algebra.lib
- Timestamp:
- Feb 20, 2009, 10:26:50 AM (15 years ago)
- Branches:
- (u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
- Children:
- 67555dbff0c54631269c2ede478103e9cd2cc3cf
- Parents:
- 9b4893753f061124557a6f764b1588a09516031e
- 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 1 4 /////////////////////////////////////////////////////////////////////////////// 2 version="$Id: algebra.lib,v 1.1 8 2008-10-24 12:16:59Singular Exp $";5 version="$Id: algebra.lib,v 1.19 2009-02-20 09:26:50 Singular Exp $"; 3 6 category="Commutative Algebra"; 4 7 info=" … … 19 22 noetherNormal(id); noether normalization of ideal id 20 23 mapIsFinite(R,phi,I); query for finiteness of map phi:R --> basering/I 24 25 AUXILIARY PROCEDURES: 21 26 finitenessTest(i,z); find variables which occur as pure power in lead(i) 27 nonZeroEntry(id); list describing non-zero entries of an identifier 22 28 "; 23 29 … … 778 784 @format 779 785 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; 782 789 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)784 790 If p is given, 0<=p<=100, a sparse coordinate change with p percent 785 791 of the matrix entries being 0 (default: p=0 i.e. dense) … … 891 897 /////////////////////////////////////////////////////////////////////////////// 892 898 893 proc finitenessTest(ideal i, list #)899 proc finitenessTest(ideal i, list #) 894 900 "USAGE: finitenessTest(J[,v]); J ideal, v intvec (say v1,...,vr with vi>0) 895 901 RETURN: … … 906 912 THEORY: If J is a standard basis of an ideal generated by x_1 - f_1(y),..., 907 913 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] defines914 if y_i appears as pure power in the leading term of J[k], J[k] defines 909 915 an integral relation for y_i over the y_(i+1),... and the f's. 910 916 Moreover, in this situation, if l[2] = y_1,...,y_r, then K[y_1,...y_r] 911 917 is finite over K[f_1..f_n]. If J contains furthermore polynomials 912 918 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)] 913 922 EXAMPLE: example finitenessTest; shows an example 914 923 " … … 916 925 intvec v,w; 917 926 int j,z,ii; 927 v[n]=0; //v should have size n 918 928 intvec V = 1..n; 929 list nze; //the non-zero entries of a leadexp 919 930 if (size(#) != 0 ) 920 931 { … … 929 940 ideal relation,zero,nonzero; 930 941 // ---------------------- check leading exponents ------------------------- 942 931 943 for(j=1;j<=ncols(i);j++) 932 944 { 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 935 948 { //pure power of some variable 936 949 if( W*w != 0 ) //case: variable has index appearing in V … … 944 957 //the nonzero entries of v correspond to variables which occur as 945 958 //pure power in the leading term of some polynomial in i 959 946 960 for(j=1; j<=size(v); j++) 947 961 { … … 973 987 974 988 proc 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 976 991 J an ideal in the basering, J = 0 if not given 977 992 RETURN: 1 if R ---> basering/J is finite and 0 else 993 NOTE: 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). 995 SEE ALSO: finitenessTest 978 996 EXAMPLE: example mapIsFinite; shows an example 979 997 " … … 1023 1041 ////////////////////////////////////////////////////////////////////////////// 1024 1042 1043 proc 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,...) 1047 RETURN: @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 1054 NOTE: 1055 EXAMPLE: 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 } 1087 example 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.