Changeset 07f26d9 in git


Ignore:
Timestamp:
Mar 14, 2015, 2:02:40 PM (9 years ago)
Author:
Oleksandr Motsak <motsak@…>
Branches:
(u'spielwiese', '17f1d200f27c5bd38f5dfc6e8a0879242279d1d8')
Children:
7ac345d70f100052b380e98c709e64d80552d9ea
Parents:
2a413dd9aa8d8ec395a5eaebe7c9991725f19aa0
git-author:
Oleksandr Motsak <motsak@mathematik.uni-kl.de>2015-03-14 14:02:40+01:00
git-committer:
Oleksandr Motsak <motsak@mathematik.uni-kl.de>2015-03-14 18:05:19+01:00
Message:
Preliminary versions of grlift/grlifting/mappingcone  (nothing works as of now)
File:
1 edited

Legend:

Unmodified
Added
Removed
  • Singular/LIB/gradedModules.lib

    r2a413d r07f26d9  
    3838    grtranspose1(M)  reordered graded transpose of map M
    3939    TestGRRes(n,I)  compute/order/transpose a graded resolution of ideal I
     40    grsyz(M)        syzygy. gens!
     41    grres(M)        resolution. gens!
     42    grlift(A,B)     graded lift, gens!
     43    grgroebner(M)   groebner. gens!
     44    grconcat(M,N)   sum of maps into the same target module
    4045";
    4146
    42 
    4347// TODOs:
    44 //    grrndmat(s,d[,p,b]) generate random matrix compatible with src and dst gradings
    45 //    grrndmap(S,D[,p,b]) generate random 0-deg homomorphism S -> D
    46 
    47 //    grsyz(M)        gens? vs coker?
    48 //    grres(M)        gens? vs coker?
    49 //    grgroebner(M)   gens? vs coker?
    50    
     48/*
     49KeneshlouMatrixPresentation(v)  build some presentation with intvec v
     50grrndmat0(s,d[,p,b]) generate random matrix compatible with src and dst gradings
     51grrndmap0(S,D[,p,b]) generate random 0-deg homomorphism S -> D
     52grrndmap(S,D[,p,b]) generate random 0-deg homomorphism S -> D
     53grrndmap2(S,D[,p,b]) generate random 0-deg homomorphism S -> D
     54grlifting(A,B)  RANDOM! chain lifting
     55grlifting2(A,B)  RANDOM! chain lifting
     56mappingcone(M,N) mapping cone?
     57mappingcone2(M,N) mapping cone?
     58*/
    5159
    5260//////////////////////////////////////////////////////////////////////////////////////////////////////////
     
    935943}
    936944
     945proc grgroebner(A)
     946"USAGE:  grgroebner(M), graded object M
     947RETURN:  graded object
     948PURPOSE: compute graded groebner basis of M
     949EXAMPLE: example grgroebner; shows an example
     950"
     951{
     952  ASSUME(1, grtest(A));
     953
     954  return ( grobj( groebner(A), attrib(A, "isHomog") ) );
     955}
     956example
     957{ "EXAMPLE:"; echo = 2;
     958
     959  ring r=32003,(x,y,z),dp;
     960
     961  module A = grobj( module([x+y, x, 0, 0], [0, x+y, y, 0]), intvec(0,0,0,1) );
     962  grview(A);
     963 
     964  module B = grgroebner(A);
     965  grview(B);
     966}
     967
     968
     969proc grtwists(intvec v)
     970"USAGE:  grtwists(v), intvec v
     971RETURN:  graded object representing S(v[1]) + ... + S(v[size(v)])
     972PURPOSE: compute presentation of S(v[1]) + ... + S(v[size(v)])
     973EXAMPLE: example grtwists; shows an example
     974"
     975{
     976  int l = size(v);
     977  module Z; Z[l] = [0];
     978  Z = grobj(Z, v, v); // will set the rank as well
     979  return(Z);
     980}
     981example
     982{ "EXAMPLE:"; echo = 2;
     983
     984  ring r=32003,(x,y,z),dp;
     985 
     986  grview( grtwists ( intvec(-4, 1, 6 )) );
     987}
     988
     989
     990proc grsyz(A)
     991"USAGE:  grsyz(M), graded object M
     992RETURN:  graded object
     993PURPOSE: compute graded syzygy of M
     994EXAMPLE: example grsyz; shows an example
     995"
     996{
     997  ASSUME(1, grtest(A));
     998  intvec v = grdeg(A);
     999
     1000//  attrib(A, "isHomog");
     1001 
     1002  module M = syz(A);
     1003//  print(M);
     1004 
     1005  if( size(M) > 0 ) { return( grobj( M, v ) ); }
     1006
     1007  // zero syzygy?
     1008  return( grtwists(v) ); // ???
     1009}
     1010example
     1011{ "EXAMPLE:"; echo = 2;
     1012
     1013  ring r=32003,(x,y,z),dp;
     1014
     1015  module A = grobj( module([x+y, x, 0, 3], [0, x+y, y, 2], [y, y, z, 1]), intvec(0,0,0,1) );
     1016  grview(A);
     1017 
     1018  module B = grgroebner(A);
     1019  grview(B);
     1020
     1021  module C = grsyz(B); 
     1022  grview(C);
     1023}
     1024
     1025
     1026proc grprod(A, B)
     1027"USAGE:  grprod(M, N), graded objects M and N
     1028RETURN:  graded object
     1029PURPOSE: compute graded product M * N (as composition of maps)
     1030EXAMPLE: example grprod; shows an example
     1031"
     1032{
     1033  ASSUME(1, grtest(A));
     1034  ASSUME(1, grtest(B));
     1035
     1036  return ( grobj( A*B, attrib(A, "isHomog"), grdeg(B) ) );
     1037}
     1038example
     1039{ "EXAMPLE:"; echo = 2;
     1040
     1041  ring r=32003,(x,y,z),dp;
     1042
     1043  module A = grobj( module([x+y, x, 0, 3], [0, x+y, y, 2], [y, y, z, 1]), intvec(0,0,0,1) );
     1044  grview(A);
     1045 
     1046  A = grgroebner(A);
     1047  grview(A);
     1048 
     1049  module B = grsyz(A);
     1050  grview(B);
     1051  print(B);
     1052 
     1053  module D = grprod( A, B );
     1054  grview(D);
     1055  print(D); // must be all zeroes due to syzygy property!
     1056  ASSUME(0, size(D) == 0);
     1057}
     1058
     1059
     1060
     1061
     1062proc grres(def A, int l, list #)
     1063"USAGE:  grres(M, l[, b]), graded object M, int l, int b
     1064RETURN:  graded resolution = list of graded objects
     1065PURPOSE: compute graded resolution of M (of length l) and minimise it if b was given                             
     1066EXAMPLE: example grres; shows an example
     1067"
     1068{
     1069  ASSUME(0, l >= 0);
     1070  ASSUME(1, grtest(A));
     1071
     1072  intvec v = attrib(A, "isHomog");
     1073 
     1074  int b = (size(#) > 0);
     1075  if(b) { list r = res(A, l, #[1]); } else { list r = res(A, l); }
     1076
     1077//  r;  v;
     1078
     1079  l = size(r);
     1080 
     1081  int i; module m;
     1082 
     1083  for ( i = 1; i <= l; i++ )
     1084  {
     1085    if( size(r[i]) == 0 ){ r[i] = grtwists(v); i++; break;   }
     1086
     1087    r[i] = grobj(r[i], v); v = grdeg(r[i]);
     1088  }
     1089  i = i-1;
     1090
     1091  return( list(r[1..i]) );
     1092}
     1093example
     1094{ "EXAMPLE:"; echo = 2;
     1095
     1096  ring r=32003,(x,y,z),dp;
     1097
     1098  module A = grobj( module([x+y, x, 0, 3], [0, x+y, y, 2], [y, y, z, 1]), intvec(0,0,0,1) );
     1099  grview(A);
     1100 
     1101  module B = grgroebner(A);
     1102  grview(B);
     1103
     1104  "graded resolution of B: "; def C = grres(B, 0); grview(C);
     1105
     1106  int i; int l = size(C);
     1107
     1108  "D^2 == 0: "; for (i = 1; i < l; i++ ) { i; grview( grprod(C[i], C[i+1]) ); }
     1109}
     1110
     1111proc grtranspose(def M)
     1112"
     1113USAGE:   grtranspose(M), graded object M
     1114RETURN:  graded object
     1115PURPOSE: graded transpose of M
     1116NOTE:    no reordering is performend by this procedure   
     1117EXAMPLE: example grtranspose; shows an example
     1118"
     1119{
     1120  ASSUME(1, grtest(M) );
     1121  return (  grobj(transpose(M), -grdeg(M), -attrib(M, "isHomog"))  );
     1122}
     1123example
     1124{ "EXAMPLE:"; echo = 2;
     1125
     1126  ring r=32003,(x,y,z),dp;
     1127
     1128  module M = grtwists( intvec(-2, 0, 4, 4) ); grview(M);
     1129
     1130  module N = grsyz( grtranspose( M ) ); grview(N);
     1131
     1132  module L = grtranspose(N); grview( L );
     1133
     1134  module K = grsyz( L ); grview(K);
     1135 
     1136
     1137  module A = grobj( module([x+y, x, 0, 3], [0, x+y, y, 2], [y, y, z, 1]), intvec(0,0,0,1) ); A = grgroebner(A); grview(A);
     1138
     1139  "graded transpose: "; module B = grtranspose(A); grview( B ); print(B);
     1140
     1141  "... syzygy: "; module C = grsyz(B); grview(C);
     1142
     1143  "... transposed: "; module D = grtranspose(C); grview( D ); print (D);
     1144
     1145  "... and back to presentation: "; module E = grsyz( D ); grview(E); print(E);
     1146
     1147  module F = grgens( E ); grview(F); print(F);
     1148 
     1149  module G = grpres( F ); grview(G); print(G);
     1150}
     1151
     1152
     1153proc grgens(def M)
     1154"
     1155USAGE:   grgens(M), graded object M (map)
     1156RETURN:  graded object 
     1157PURPOSE: try compute graded generators of coker(M) and return them as columns
     1158         of a graded map.
     1159NOTE:    presentation of resulting generated submodule may be different to M!
     1160EXAMPLE: example grgens; shows an example
     1161"
     1162{
     1163  ASSUME(1, grtest(M) );
     1164
     1165  module N = grtranspose( grsyz( grtranspose(M) ) );
     1166 
     1167//  ASSUME(3, grisequal( grgroebner(M), grgroebner( grpres( N ) ) ) ); // FIXME: not always true!?
     1168 
     1169  return ( N );
     1170}
     1171example
     1172{ "EXAMPLE:"; echo = 2;
     1173
     1174  ring r=32003,(x,y,z),dp;
     1175
     1176  module M = grtwists( intvec(-2, 0, 4, 4) ); grview(M);
     1177
     1178  module N = grgens(M);
     1179 
     1180  grview( N ); print(N); // fine == M
     1181
     1182
     1183  module A = grobj( module([x+y, x, 0, 3], [0, x+y, y, 2], [y, y, z, 1]), intvec(0,0,0,1) );
     1184
     1185  A = grgroebner(A); grview(A);
     1186
     1187  module B = grgens(A);
     1188
     1189  grview( B ); print(B); // Ups :( != A
     1190 
     1191}
     1192
     1193
     1194proc grpres(def M)
     1195"
     1196USAGE:   grpres(M), graded object M (submodule gens)
     1197RETURN:  graded module (via coker)
     1198PURPOSE: compute graded presentation matrix of submodule generated by columns of M
     1199EXAMPLE: example grpres; shows an example
     1200"
     1201{
     1202  ASSUME(1, grtest(M) );
     1203
     1204  module N = grsyz(M);
     1205
     1206//  ASSUME(3, grisequal( M, grgens( N ) ) );
     1207 
     1208  return ( N );
     1209}
     1210example
     1211{ "EXAMPLE:"; echo = 2;
     1212
     1213  ring r=32003,(x,y,z),dp;
     1214
     1215  module M = grtwists( intvec(-2, 0, 4, 4) ); grview(M);
     1216
     1217  module N = grgens(M); grview( N ); print(N);
     1218
     1219  module L = grpres( N ); grview( L ); print(L);
     1220
     1221
     1222  module A = grobj( module([x+y, x, 0, 3], [0, x+y, y, 2], [y, y, z, 1]), intvec(0,0,0,1) );
     1223
     1224  A = grgroebner(A); grview(A);
     1225
     1226  module B = grgens(A); grview( B ); print(B);
     1227
     1228  module C = grpres( B ); grview( C ); print(C);
     1229}
     1230
     1231
    9371232
    9381233LIB "random.lib"; // for sparsepoly
    9391234
    940 proc grrndmat(intvec w, intvec v, list #)
    941 "USAGE:  grrndmat(src,dst[,p,b]), intvec src, dst[, int p, b]
     1235proc grrndmat0(intvec w, intvec v, list #)
     1236"USAGE:  grrndmat0(src,dst[,p,b]), intvec src, dst[, int p, b]
    9421237RETURN:  matrix of polynomials
    9431238PURPOSE: generate random matrix compatible with src and dst gradings
    9441239NOTE:    optional arguments p, b are for 'sparsepoly' (by default: 75%, 30000).
    9451240TODO:    this is experimental at the moment!
    946 EXAMPLE: example grrndmat; shows an example
     1241EXAMPLE: example grrndmat0; shows an example
    9471242"
    9481243{
     
    9901285  ring r=32003,(x,y,z),dp;
    9911286
    992   print( grrndmat( intvec(0, 1), intvec(1, 2, 3) ) );
     1287  print( grrndmat0( intvec(0, 1), intvec(1, 2, 3) ) );
    9931288}
    9941289
    9951290//
    996 proc grrndmap(def S, def D, list #)
    997 "USAGE:  grrndmap(S,D[,p,b]), graded modules S, D[, int p, b]
     1291proc grrndmap0(def S, def D, list #)
     1292"USAGE:  grrndmap0(S,D[,p,b]), graded modules S, D[, int p, b]
    9981293RETURN:  graded map
    9991294PURPOSE: generate random 0-deg graded homomorphism S -> D
    10001295NOTE:    optional arguments p, b are for 'sparsepoly' (by default: 75%, 30000).
    10011296TODO:    this is experimental at the moment!
    1002 EXAMPLE: example grrndmap; shows an example
     1297EXAMPLE: example grrndmap0; shows an example
    10031298"
    10041299{
     
    10091304  intvec w = grdeg(D); // destination
    10101305 
    1011   return ( grobj( transpose(grrndmat(v, w, #)), v, w ) );
     1306  return ( grobj( transpose(grrndmat0(v, w, #)), v, w ) );
    10121307}
    10131308example
     
    10231318  grdeg(S);
    10241319
    1025   module M = grrndmap( S, D );
     1320  module M = grrndmap0( S, D );
    10261321  print(M);
    10271322  grview(M);
    10281323}
    10291324
    1030 
    1031 proc grgroebner(A)
    1032 "USAGE:  grgroebner(M), graded object M
    1033 RETURN:  graded object
    1034 PURPOSE: compute graded groebner basis of M
    1035 EXAMPLE: example grgroebner; shows an example
    1036 "
    1037 {
    1038   ASSUME(1, grtest(A));
    1039 
    1040   return ( grobj( groebner(A), attrib(A, "isHomog") ) );
    1041 }
    1042 example
    1043 { "EXAMPLE:"; echo = 2;
    1044 
    1045   ring r=32003,(x,y,z),dp;
    1046 
    1047   module A = grobj( module([x+y, x, 0, 0], [0, x+y, y, 0]), intvec(0,0,0,1) );
    1048   grview(A);
    1049  
    1050   module B = grgroebner(A);
    1051   grview(B);
    1052 }
    1053 
    1054 
    1055 proc grtwists(intvec v)
    1056 "USAGE:  grtwists(v), intvec v
    1057 RETURN:  graded object representing S(v[1]) + ... + S(v[size(v)])
    1058 PURPOSE: compute presentation of S(v[1]) + ... + S(v[size(v)])
    1059 EXAMPLE: example grtwists; shows an example
    1060 "
    1061 {
    1062   int l = size(v);
    1063   module Z; Z[l] = [0];
    1064   Z = grobj(Z, v, v); // will set the rank as well
    1065   return(Z);
    1066 }
    1067 example
    1068 { "EXAMPLE:"; echo = 2;
    1069 
    1070   ring r=32003,(x,y,z),dp;
    1071  
    1072   grview( grtwists ( intvec(-4, 1, 6 )) );
    1073 }
    1074 
    1075 
    1076 proc grsyz(A)
    1077 "USAGE:  grsyz(M), graded object M
    1078 RETURN:  graded object
    1079 PURPOSE: compute graded syzygy of M
    1080 EXAMPLE: example grsyz; shows an example
    1081 "
    1082 {
    1083   ASSUME(1, grtest(A));
    1084   intvec v = grdeg(A);
    1085 
    1086 //  attrib(A, "isHomog");
    1087  
    1088   module M = syz(A);
    1089 //  print(M);
    1090  
    1091   if( size(M) > 0 ) { return( grobj( M, v ) ); }
    1092 
    1093   // zero syzygy?
    1094   return( grtwists(v) ); // ???
    1095 }
    1096 example
    1097 { "EXAMPLE:"; echo = 2;
    1098 
    1099   ring r=32003,(x,y,z),dp;
    1100 
    1101   module A = grobj( module([x+y, x, 0, 3], [0, x+y, y, 2], [y, y, z, 1]), intvec(0,0,0,1) );
    1102   grview(A);
    1103  
    1104   module B = grgroebner(A);
    1105   grview(B);
    1106 
    1107   module C = grsyz(B); 
    1108   grview(C);
    1109 }
    1110 
    1111 
    1112 proc grprod(A, B)
    1113 "USAGE:  grprod(M, N), graded objects M and N
    1114 RETURN:  graded object
    1115 PURPOSE: compute graded product M * N (as composition of maps)
    1116 EXAMPLE: example grprod; shows an example
    1117 "
    1118 {
    1119   ASSUME(1, grtest(A));
    1120   ASSUME(1, grtest(B));
    1121 
    1122   return ( grobj( A*B, attrib(A, "isHomog"), grdeg(B) ) );
    1123 }
    1124 example
    1125 { "EXAMPLE:"; echo = 2;
    1126 
    1127   ring r=32003,(x,y,z),dp;
    1128 
    1129   module A = grobj( module([x+y, x, 0, 3], [0, x+y, y, 2], [y, y, z, 1]), intvec(0,0,0,1) );
    1130   grview(A);
    1131  
    1132   A = grgroebner(A);
    1133   grview(A);
    1134  
    1135   module B = grsyz(A);
    1136   grview(B);
    1137   print(B);
    1138  
    1139   module D = grprod( A, B );
    1140   grview(D);
    1141   print(D); // must be all zeroes due to syzygy property!
    1142   ASSUME(0, size(D) == 0);
    1143 }
    1144 
    1145 
    1146 
    1147 
    1148 proc grres(def A, int l, list #)
    1149 "USAGE:  grres(M, l[, b]), graded object M, int l, int b
    1150 RETURN:  graded resolution = list of graded objects
    1151 PURPOSE: compute graded resolution of M (of length l) and minimise it if b was given                             
    1152 EXAMPLE: example grres; shows an example
    1153 "
    1154 {
    1155   ASSUME(0, l >= 0);
    1156   ASSUME(1, grtest(A));
    1157 
    1158   intvec v = attrib(A, "isHomog");
    1159  
    1160   int b = (size(#) > 0);
    1161   if(b) { list r = res(A, l, #[1]); } else { list r = res(A, l); }
    1162 
    1163 //  r;  v;
    1164 
    1165   l = size(r);
    1166  
    1167   int i; module m;
    1168  
    1169   for ( i = 1; i <= l; i++ )
    1170   {
    1171     if( size(r[i]) == 0 ){ r[i] = grtwists(v); i++; break;   }
    1172 
    1173     r[i] = grobj(r[i], v); v = grdeg(r[i]);
    1174   }
    1175   i = i-1;
    1176 
    1177   return( list(r[1..i]) );
    1178 }
    1179 example
    1180 { "EXAMPLE:"; echo = 2;
    1181 
    1182   ring r=32003,(x,y,z),dp;
    1183 
    1184   module A = grobj( module([x+y, x, 0, 3], [0, x+y, y, 2], [y, y, z, 1]), intvec(0,0,0,1) );
    1185   grview(A);
    1186  
    1187   module B = grgroebner(A);
    1188   grview(B);
    1189 
    1190   "graded resolution of B: "; def C = grres(B, 0); grview(C);
    1191 
    1192   int i; int l = size(C);
    1193 
    1194   "D^2 == 0: "; for (i = 1; i < l; i++ ) { i; grview( grprod(C[i], C[i+1]) ); }
    1195 }
    1196 
    1197 proc grtranspose(def M)
    1198 "
    1199 USAGE:   grtranspose(M), graded object M
    1200 RETURN:  graded object
    1201 PURPOSE: graded transpose of M
    1202 NOTE:    no reordering is performend by this procedure   
    1203 EXAMPLE: example grtranspose; shows an example
    1204 "
    1205 {
    1206   ASSUME(1, grtest(M) );
    1207   return (  grobj(transpose(M), -grdeg(M), -attrib(M, "isHomog"))  );
    1208 }
    1209 example
    1210 { "EXAMPLE:"; echo = 2;
    1211 
    1212   ring r=32003,(x,y,z),dp;
    1213 
    1214   module M = grtwists( intvec(-2, 0, 4, 4) ); grview(M);
    1215 
    1216   module N = grsyz( grtranspose( M ) ); grview(N);
    1217 
    1218   module L = grtranspose(N); grview( L );
    1219 
    1220   module K = grsyz( L ); grview(K);
    1221  
    1222 
    1223   module A = grobj( module([x+y, x, 0, 3], [0, x+y, y, 2], [y, y, z, 1]), intvec(0,0,0,1) ); A = grgroebner(A); grview(A);
    1224 
    1225   "graded transpose: "; module B = grtranspose(A); grview( B ); print(B);
    1226 
    1227   "... syzygy: "; module C = grsyz(B); grview(C);
    1228 
    1229   "... transposed: "; module D = grtranspose(C); grview( D ); print (D);
    1230 
    1231   "... and back to presentation: "; module E = grsyz( D ); grview(E); print(E);
    1232 
    1233   module F = grgens( E ); grview(F); print(F);
    1234  
    1235   module G = grpres( F ); grview(G); print(G);
    1236 }
    1237 
    1238 
    1239 proc grgens(def M)
    1240 "
    1241 USAGE:   grgens(M), graded object M (map)
    1242 RETURN:  graded object 
    1243 PURPOSE: try compute graded generators of coker(M) and return them as columns
    1244          of a graded map.
    1245 NOTE:    presentation of resulting generated submodule may be different to M!
    1246 EXAMPLE: example grgens; shows an example
    1247 "
    1248 {
    1249   ASSUME(1, grtest(M) );
    1250 
    1251   module N = grtranspose( grsyz( grtranspose(M) ) );
    1252  
    1253 //  ASSUME(3, grisequal( grgroebner(M), grgroebner( grpres( N ) ) ) ); // FIXME: not always true!?
    1254  
    1255   return ( N );
    1256 }
    1257 example
    1258 { "EXAMPLE:"; echo = 2;
    1259 
    1260   ring r=32003,(x,y,z),dp;
    1261 
    1262   module M = grtwists( intvec(-2, 0, 4, 4) ); grview(M);
    1263 
    1264   module N = grgens(M);
    1265  
    1266   grview( N ); print(N); // fine == M
    1267 
    1268 
    1269   module A = grobj( module([x+y, x, 0, 3], [0, x+y, y, 2], [y, y, z, 1]), intvec(0,0,0,1) );
    1270 
    1271   A = grgroebner(A); grview(A);
    1272 
    1273   module B = grgens(A);
    1274 
    1275   grview( B ); print(B); // Ups :( != A
    1276  
    1277 }
    1278 
    1279 
    1280 proc grpres(def M)
    1281 "
    1282 USAGE:   grpres(M), graded object M (submodule gens)
    1283 RETURN:  graded module (via coker)
    1284 PURPOSE: compute graded presentation matrix of submodule generated by columns of M
    1285 EXAMPLE: example grpres; shows an example
    1286 "
    1287 {
    1288   ASSUME(1, grtest(M) );
    1289 
    1290   module N = grsyz(M);
    1291 
    1292 //  ASSUME(3, grisequal( M, grgens( N ) ) );
    1293  
    1294   return ( N );
    1295 }
    1296 example
    1297 { "EXAMPLE:"; echo = 2;
    1298 
    1299   ring r=32003,(x,y,z),dp;
    1300 
    1301   module M = grtwists( intvec(-2, 0, 4, 4) ); grview(M);
    1302 
    1303   module N = grgens(M); grview( N ); print(N);
    1304 
    1305   module L = grpres( N ); grview( L ); print(L);
    1306 
    1307 
    1308   module A = grobj( module([x+y, x, 0, 3], [0, x+y, y, 2], [y, y, z, 1]), intvec(0,0,0,1) );
    1309 
    1310   A = grgroebner(A); grview(A);
    1311 
    1312   module B = grgens(A); grview( B ); print(B);
    1313 
    1314   module C = grpres( B ); grview( C ); print(C);
    1315 }
    1316 
    1317 
     1325/*
    13181326proc grconcat(A, B)
    13191327"
     
    13271335{ "EXAMPLE:"; echo = 2;
    13281336}
    1329 
    1330 
     1337*/
     1338
     1339
     1340
     1341proc KeneshlouMatrixPresentation(intvec a)
     1342"
     1343PURPOSE: Direct sum of all omegas_i(i) with powers a[i]
     1344NOTE: Please document/name this proc properly
     1345"
     1346{
     1347  int n = size(a)-1;
     1348  //  ring r = 32003,(x(0..n)),dp;
     1349  ASSUME(0, nvars(basering)==(n+1));
     1350  int i,j;
     1351
     1352  // find first nonzero exponent a_i
     1353  for(i=1;i<=size(a);i++)
     1354    {
     1355      if(a[i]!=0) {break; };
     1356    }
     1357
     1358  // all zeroes?
     1359  if(i>size(a)) {return (grzero()); };
     1360
     1361  for(i=2;i<=n;i++)
     1362    {
     1363      if(a[i]!=0) {break; };
     1364    }
     1365
     1366  module N;
     1367
     1368  if(i>n)
     1369    { // no middle part
     1370      if(a[1]>0)
     1371        {
     1372          N=grtwist(a[1],0);
     1373
     1374          if(a[n+1]>0)
     1375            { N=grsum(N,grtwist(a[n+1],-1));}       
     1376        } 
     1377      else
     1378        { N=grtwist(a[n+1],-1);}
     1379     
     1380      return (N); // grorder(N));
     1381    }
     1382  else // i <= n: middle part is present, a_i != 0
     1383    { // a = a1  ... |  i:2, a_2 ..... i: n, a_n | .... i: n+1a_(n+1)
     1384      j = i - 1;
     1385      module I = maxideal(1);
     1386      attrib(I,"isHomog", intvec(0));
     1387      list L = mres(I, 0);
     1388      list kos = grorder(L);
     1389      // make sure that graded maps  are represented by blocks corresponding to the betti diagram?
     1390
     1391      def S = grpower(grshift(grobj( kos[j+2], attrib(kos[j+2], "isHomog")), j), a[i]);
     1392
     1393      i++;
     1394
     1395      for(; i <= n; i++)
     1396        {
     1397          if(a[i]==0) { i++; continue; }
     1398          j = i - 1;
     1399          S = grsum( S, grpower(grshift( grobj( kos[j+2], attrib(kos[j+2], "isHomog")), j), a[i])  );
     1400        }
     1401
     1402      // S is the middle (non-zero) part
     1403
     1404      if(a[1] > 0 )
     1405        {
     1406          N=grsum(grtwist(a[1],0), S);
     1407        }
     1408      else
     1409        { N = S;}
     1410
     1411      if(a[n+1] > 0 )
     1412        { N=grsum(N, grtwist(a[n+1],-1)); }
     1413
     1414
     1415      return ((N)); //      return (grorder(N));
     1416    }
     1417}
     1418example
     1419{ "EXAMPLE:"; echo = 2;
     1420  ring r = 32003,(x(0..4)),dp;
     1421
     1422  def N1 = KeneshlouMatrixPresentation(intvec(2,0,0,0,0));
     1423  grview(N1);
     1424
     1425  def N2 = KeneshlouMatrixPresentation(intvec(0,0,0,0,3));
     1426  grview(N2);
     1427
     1428  def N = KeneshlouMatrixPresentation(intvec(2,0,0,0,3));
     1429  grview(N);
     1430
     1431
     1432  def M1 = KeneshlouMatrixPresentation(intvec(0,1,0,0,0));
     1433  grview(M1);
     1434
     1435  def M2 = KeneshlouMatrixPresentation(intvec(0,1,1,0,0));
     1436  grview(M2);
     1437
     1438  def M3 = KeneshlouMatrixPresentation(intvec(0,0,0,1,0));
     1439  grview(M3);
     1440
     1441  def M = KeneshlouMatrixPresentation(intvec(1,1,1,0,0));
     1442  grview(M);
     1443
     1444
     1445}
     1446
     1447
     1448
     1449 
     1450proc grrndmat(intvec v, intvec w, list #)
     1451{
     1452  int p=75; int b=30000; // defaults for sparsepoly
     1453 
     1454  if ( size(#) > 0 )
     1455  {
     1456     ASSUME( 0, (typeof(#[1]) == "int") || (typeof(#[1]) == "bigint") );
     1457     p = #[1];
     1458
     1459     if ( size(#) > 1 )
     1460     {
     1461       ASSUME( 0, (typeof(#[2]) == "int") || (typeof(#[2]) == "bigint") );
     1462       b = #[2];
     1463     }
     1464  }
     1465 
     1466
     1467  matrix M[size(w)][size(v)];
     1468  int i,j,c;
     1469 
     1470  for(j=1;i<=size(v);j++)
     1471    {
     1472      for(i=1;i<=size(w);i++)
     1473      {
     1474       c=(w[i]-v[j]);
     1475       if( c >= 0)
     1476       {M[i,j]=sparsepoly(c, c, p, b);}
     1477       //       else        { M[i,j]=0;}
     1478     
     1479     }
     1480    }
     1481
     1482  return(M);
     1483}
     1484
     1485proc grhomog0(M,N)
     1486{
     1487  intvec v = grdeg(M); // src
     1488  intvec w = grdeg(N); // dest
     1489  return ( grobj( grrndmat(v, w), v, w ) );
     1490}
     1491
     1492
     1493proc grconcat(A,B)
     1494"USAGE: grconcat(A, B), graded objects A and B, dst(A) == dst(B) =: dst
     1495RETURN: graded object
     1496PURPOSE: construct src(A) + src(B) -----> dst  given by (A|B)
     1497EXAMPLE: example grconcat; shows an example
     1498"
     1499{
     1500
     1501  ASSUME(0, attrib(A,"isHomog")==attrib(B,"isHomog"));
     1502  ASSUME(1, grtest(A));
     1503  ASSUME(1, grtest(B));
     1504 
     1505
     1506  intvec v=attrib(A,"isHomog");
     1507  intvec w=grdeg(A),grdeg(B);
     1508  return(grobj(concat(A,B),v,w));
     1509}
     1510example
     1511{ "EXAMPLE:"; echo = 2;
     1512  ring r;
     1513 
     1514  module R=grobj(module([x,y,z]),intvec(0:3));
     1515  grview(R);
     1516
     1517  module S=grobj(module([x,0,y],[xy,zy+x2,0]),intvec(0:3));
     1518  grview(S);
     1519
     1520  def Q=grconcat(R,S);
     1521  grview(Q);
     1522}
     1523
     1524
     1525proc grlift(A, B)
     1526"USAGE: grlift(M, N), graded objects M and N
     1527RETURN: graded object
     1528PURPOSE: compute graded matrix which the generators of submodule N in terms of the generators of M.
     1529EXAMPLE: example grlift; shows an example
     1530"
     1531{
     1532  ASSUME(0, attrib(A,"isHomog")==attrib(B,"isHomog"));
     1533  ASSUME(1, grtest(A));
     1534  ASSUME(1, grtest(B));
     1535
     1536  return(grobj(lift(A,B),grdeg(A), grdeg(B)));
     1537}
     1538example
     1539{ "EXAMPLE:"; echo = 2;
     1540
     1541  ring r=32003,(x,y,z),dp;
     1542  module P=grobj(module([xy,0,xz]),intvec(0,1,0));  P = grgroebner(P);
     1543  grview(P);
     1544
     1545
     1546  module D=grobj(module([y,0,z],[x2+y2,z,0]),intvec(0,1,0));  D = grgroebner(D);
     1547  grview(D);
     1548
     1549  def G=grlift(D,P);
     1550  grview(G);
     1551}
     1552
     1553
     1554proc grlifting(M,N)
     1555"??"
     1556{  ASSUME(1, grtest(A));
     1557   ASSUME(1, grtest(B));
     1558
     1559   list rM=grres(M,1); // only syzygy?
     1560   list rN=grres(N,1); // only syzygy???
     1561   int i,j,k;
     1562   list P;
     1563
     1564  for(i=1;i<=size(rM);i++)
     1565  {
     1566    if(size(rM[i])==0){break;}
     1567  }
     1568
     1569  for(j=1;j<=size(rN);j++)
     1570  {
     1571    if(size(rN[j])==0){break;}
     1572  }
     1573
     1574  int t=min(i,j); // always 2!??
     1575
     1576  if(t>=2)
     1577  {
     1578    P[1]=grrndmap1(M,N);
     1579    if(t==2){return(P[1])};
     1580 
     1581    for(k=2;k<t;k++)
     1582    {
     1583      A=grprod(P[k-1],rM[k]);
     1584      p[k]=grlift(rN[k],A); // BUG: rN[k] may not be a GB! Therefore it is wrong to try to compute whole resolutions in advance!!!
     1585    }
     1586    return(P);
     1587  } 
     1588  else //t=1 // FIXME: this case can never happen!
     1589  {return(0);}
     1590
     1591}
     1592example
     1593{ "EXAMPLE:"; echo = 2;
     1594
     1595  ring r=32003,(x,y,z),dp;
     1596  module P=grobj(module([xy,0,xz]),intvec(0,1,0)); P = grgroebner(P);
     1597  grview(P);
     1598
     1599
     1600  module D=grobj(module([y,0,z],[x2+y2,z,0]),intvec(0,1,0)); D = grgroebner(D);
     1601  grview(D);
     1602
     1603  def G=grlifting(D,P);
     1604  grview(G);
     1605}
     1606
     1607// LIB"matrix.lib"; // ?
     1608
     1609proc mappingcone(M,N)
     1610"??"
     1611{
     1612  ASSUME(1, grtest(M));
     1613  ASSUME(1, grtest(N));
     1614
     1615  list P=grlifting(M,N);
     1616  list rM=grres(M,1);
     1617  list rN=grres(N,1);
     1618
     1619  int i;
     1620  list T;
     1621
     1622  T[1]=grconcat(P[1],rN[2]);
     1623
     1624  for(i=2;i<=size(P);i++)
     1625  {
     1626    intvec v=attrib(rM[i],"isHomog");
     1627    intvec w=grdeg(rN[i+1]);
     1628    int r=size(v);
     1629    int s=size(w);
     1630
     1631    module A=grconcat(P[i],rN[i+1]);
     1632    module B=grobj(module(zero[r][s]),v,w); // BUG ????
     1633    module C=grconcat(-rM[i],B);
     1634    module D=grconcat(grtranspose(C), grtranspose(A));
     1635
     1636    T[i]=grtranspose(D);
     1637  }
     1638   return(T);
     1639}
     1640example
     1641{ "EXAMPLE:"; echo = 2;
     1642
     1643ring r=32003, (x(0..4)),dp;
     1644def I=maxideal(1);
     1645module R=grobj(module(I), intvec(0));
     1646resolution FR=mres(R,0);
     1647print(betti(FR,0),"betti");
     1648module K=grobj(module(FR[1]),intvec(-1),intvec(0,0,0,0,0));
     1649module S=grsyz(K);
     1650S = grgroebner(S);
     1651grview(S)
     1652module B=grobj(module([1,0,0],[0,1,0],[0,0,1]),intvec(1,1,1),intvec(1,1,1));
     1653B = grgroebner(B);
     1654grview(B)
     1655// the following is totally wrong :(
     1656/* 
     1657def Z=grlifting(B,S);
     1658Z;
     1659def G=mappingcone(B,S);
     1660G;
     1661resolution E=grres(G[1],0);
     1662print(betti(E,0),"betti");
     1663module W=grtranspose(G[1]);
     1664resolution U=grres(W,0);
     1665ideal P=groebner(flatten(U[2])); // flatten???
     1666resolution L=mres(P,0);
     1667print(betti(L),"betti");
     1668*/
     1669}
     1670
     1671
     1672proc grrndmap1(defD, def S, list #)
     1673"USAGE: (D,S), graded objects S and D
     1674RETURN: graded object
     1675PURPOSE: construct a random 0-deg graded homomorphism between source of D and S.
     1676EXAMPLE: example grrndmap1; shows an example
     1677"
     1678{
     1679ASSUME(1, grtest(D) );
     1680ASSUME(1, grtest(S) );
     1681intvec v = -grdeg(S); // source
     1682intvec w = -grdeg(D); // destination
     1683return (grobj(grrndmat(v, w, #), -w, -v ) );
     1684}
     1685example
     1686{ "EXAMPLE:"; echo = 2;
     1687
     1688  ring r=32003,(x,y,z),dp;
     1689
     1690  module D=grobj(module([y,0,z],[x2+y2,z,0]),intvec(0,1,0));
     1691  grview(D);
     1692
     1693  module S=grobj(module([x,0,y],[xy,zy+x2,0]),intvec(0,0,0));
     1694  grview(S);
     1695
     1696def H=grrndmap1(D,S);
     1697grview(H);
     1698
     1699}
     1700
     1701
     1702proc grrndmap2(def D, def S, list #)
     1703"USAGE: (D,S), graded objects S and D
     1704RETURN: graded object
     1705PURPOSE: construct a random 0-deg graded homomorphism between target of D and S.
     1706EXAMPLE: example grrndmap2; shows an example
     1707"
     1708{
     1709  ASSUME(1, grtest(D) );
     1710  ASSUME(1, grtest(S) );
     1711  intvec v = -attrib(D, "isHomog"); // source
     1712  intvec w = -attrib(S, "isHomog"); // target
     1713  return (grobj(grrndmat(v, w, #), -w, -v ) );
     1714}
     1715example
     1716{ "EXAMPLE:"; echo = 2;
     1717
     1718  ring r=32003,(x,y,z),dp;
     1719
     1720  module D=grobj(module([y,0,z],[x2+y2,z,0]),intvec(0,1,0));
     1721  grview(D);
     1722
     1723  module S=grobj(module([x,0,y],[xy,zy+x2,0]),intvec(0,0,0));
     1724  grview(S);
     1725
     1726  def G=grrndmap2(D,S);
     1727  grview(G);
     1728
     1729}
     1730
     1731proc grlifting2(A,B)
     1732"USAGE: (A,B), graded objects A and B (matrices defining maps)
     1733RETURN: map of chain complexes (as a list)
     1734PURPOSE: construct a map of chain complexes between free resolution of
     1735M=coker(A) and N=coker(B).
     1736NOTE:
     1737               A     f2     f3
     17380<---M<----F0<----F1<----F2<----F3<----
     1739             |p1   |p2
     1740
     17410<---N<----G0<----G1<----G2<----G3<----
     1742               B(g1)      g2     g3
     1743
     1744EXAMPLE: example grlifting2; shows an example
     1745"
     1746{  ASSUME(1, grtest(A));
     1747   ASSUME(1, grtest(B));
     1748
     1749   list rM=grres(A,0);
     1750   list rN=grres(B,0);
     1751   int i,j,k;
     1752   list P;
     1753
     1754  // find first zero matrix in rM
     1755  for(i=1;i<=size(rM);i++)
     1756  {
     1757    if(size(rM[i])==0){break;}
     1758  }
     1759
     1760  // find first zero matrix in rN
     1761  for(j=1;j<=size(rN);j++)
     1762  {
     1763    if(size(rN[j])==0){break;}
     1764  }
     1765
     1766  int t=min(i,j);
     1767
     1768  P[1]=grrndmap2(A,B);
     1769
     1770  // A(or B)=0
     1771  if(t==1){return(P[1])};
     1772 
     1773  for(k=2;k<=t;k++)
     1774  {
     1775   def E=grprod(P[k-1],rM[k-1]);
     1776   P[k]=grlift(rN[k-1],E); // ---------->
     1777   // BUG: rN[k-1] may not be a GB! // see same thing above
     1778   /* let yi=(pi)o(fi); to take grlift(gi,yi)
     1779                                      we should have img(yi) is contained in
     1780                                      img(gi)=ker(gi-1),i.e (gi-1)oyi=0. we have
     1781                                  (gi-1)oyi=(gi-1)o(pi)o(fi)=(pi-1)o(fi-1)ofi=0
     1782  */
     1783  }
     1784  return(P);
     1785}
     1786example
     1787{"EXAMPLE:"; echo = 2;
     1788
     1789ring r;
     1790module P=grobj(module([xy,0,xz]),intvec(0,1,0)); P = grgroebner(P);
     1791grview(P);
     1792
     1793module D=grobj(module([y,0,z],[x2+y2,z,0]),intvec(0,1,0)); D = grgroebner(D);
     1794grview(D);
     1795
     1796def T=grlifting2(D,P); T;
     1797
     1798// def Z=grlifting2(P,D); Z; // WRONG!!! 
     1799             
     1800}
     1801
     1802
     1803
     1804proc mappingcone2(A,B)
     1805"USAGE: (A,B), graded objects A and B (matrices defining maps)
     1806RETURN: chain complex (as a list)
     1807PURPOSE: construct the free resolution of a cokernel of a random map between
     1808M=coker(A), and N=coker(B)
     1809NOTE:
     1810             -f1 0       -f2 0
     1811  (p1 g1)     p2 g2       p3 g3
     1812G0<-----F0+G1<------F1+G2<-------F2+G3<-----
     1813
     1814EXAMPLE: example mappingcone2;
     1815"
     1816
     1817{
     1818  ASSUME(1, grtest(A));
     1819  ASSUME(1, grtest(B));
     1820
     1821  list P=grlifting2(A,B);
     1822  list rM=grres(A,1);
     1823  list rN=grres(B,1);
     1824
     1825  int i;
     1826  list T;
     1827
     1828  T[1]=grconcat(P[1],rN[1]);
     1829
     1830  for(i=2;i<=size(P);i++)
     1831  {
     1832    intvec v=attrib(rM[i-1],"isHomog");
     1833    intvec w=grdeg(rN[i]);
     1834    int r=size(v);
     1835    int s=size(w);
     1836
     1837    module A=grconcat(P[i],rN[i]);
     1838    module B=grobj(module(zero[r][s]),v,w); // BUG
     1839    module C=grconcat(-rM[i-1],B);
     1840    module D=grconcat(grtranspose(C), grtranspose(A));
     1841
     1842    T[i]=grtranspose(D);
     1843  }
     1844   return(T);
     1845}
     1846example
     1847{ "EXAMPLE:"; echo = 2;
     1848
     1849ring r=32003,(x(0..4)),dp;
     1850def I=maxideal(1);
     1851module R=grobj(module(I), intvec(0));
     1852resolution FR=mres(R,0);
     1853print(betti(FR,0),"betti");
     1854module K=grobj(module(FR[1]),intvec(-1),intvec(0:5));
     1855grview(K);
     1856
     1857module S=grsyz(K);
     1858S = grgroebner(S);
     1859grview(S);
     1860S;
     1861
     1862module B=grobj(module([1],[0,1],[0,0,1],[0,0,0,1], [0,0,0,0,1]),intvec(0:5));
     1863B = grgroebner(B);
     1864grview(B);
     1865B;
     1866
     1867def Z=grlifting2(S,B); // ? 2nd module does not lie in the first
     1868Z;
     1869
     1870// def G=mappingcone2(S,B); G; // BUG due to zero[][]
     1871
     1872/*
     1873resolution E=grres(G[1],0);
     1874print(betti(E,0),"betti");
     1875module W=grtranspose(G[1]);
     1876resolution U=grres(W,0);
     1877ideal P=groebner(flatten(U[2])); // flatten???
     1878resolution L=mres(P,0);
     1879print(betti(L),"betti");
     1880*/
     1881}
     1882
Note: See TracChangeset for help on using the changeset viewer.