Changeset 951a63 in git
 Timestamp:
 Jun 20, 2006, 1:27:36 PM (18 years ago)
 Branches:
 (u'fiekerDuVal', '117eb8c30fc9e991c4decca4832b1d19036c4c65')(u'spielwiese', 'b52fc4b2495505785981d640dcf7eb3e456778ef')
 Children:
 808a9f36d059cef6d1e3c3a667ee4d5a37a5a4eb
 Parents:
 2f0b7fe5acd626431b63adefc9f7f2e4b17e287f
 File:

 1 edited
Legend:
 Unmodified
 Added
 Removed

Singular/LIB/dmod.lib
r2f0b7f r951a63 1 1 /////////////////////////////////////////////////////////////////////////////// 2 version="$Id: dmod.lib,v 1. 4 20060607 20:21:40 levandovExp $";2 version="$Id: dmod.lib,v 1.5 20060620 11:27:36 Singular Exp $"; 3 3 category="Noncommutative"; 4 4 info=" … … 7 7 @* Jorge Martin Morales, jorge@unizar.es 8 8 9 THEORY: Given a polynomial ring R = K[x_1,...,x_n] and a polynomial F in R, one is interested in the ring R[1/F^s] for a natural number s. 10 @* In fact, the ring R[1/F^s] has a structure of a D(R)module, where D(R) is a Weyl algebra K<x_1,...,x_n,d_1,...,d_n  d_j x_j = x_j d_j +1>. 11 @* Constructively, one needs to find a left ideal I = I(F^s) in D(R), such 12 that K[x_1,...,x_n,1/F^s] is isomorphic to D(R)/I as a D(R)module. 13 @* We provide two implementations: 14 @* 1) the classical Ann F^s algorithm from Oaku and Takayama (J. Pure Applied Math., 1999) and 15 @* 2) the newer Ann F^s algorithm by Briancon and Maisonobe (Remarques sur l ideal de Bernstein associe a des polynomes, preprint, 2002). 9 THEORY: Given a polynomial ring R = K[x_1,...,x_n] and a polynomial F in R, one is interested in the ring R[1/F^s] for a natural number s. 10 @* In fact, the ring R[1/F^s] has a structure of a D(R)module, 11 where D(R) is a Weyl algebra K<x_1,...,x_n,d_1,...,d_n  d_j x_j = x_j d_j +1>. 12 @* Constructively, one needs to find a left ideal I = I(F^s) in D(R), 13 such that K[x_1,...,x_n,1/F^s] is isomorphic to D(R)/I as a D(R)module. 14 @* We provide two implementations: 15 @* 1) the classical Ann F^s algorithm from Oaku and Takayama 16 (J. Pure Applied Math., 1999) and 17 @* 2) the newer Ann F^s algorithm by Briancon and Maisonobe 18 (Remarques sur l ideal de Bernstein associe a des polynomes, preprint, 2002). 16 19 17 20 PROCEDURES: 18 annfsOT(F[,eng]); compute Ann F^s for a poly F with the algorithm of OakuTakayama 19 annfsBM(F[,eng]); compute Ann F^s for a poly F with the algorithm of BrianconMaisonobe 20 reiffen(p,q); create the polynomial, describing a Reiffen curve 21 arrange(p); create the polynomial, describing a generic hyperplane arrangement 22 isHolonomic(M); check whether a module is holonomic 23 convloc(L); replace global orderings with local in the ringlist L 24 "; 21 annfsOT(F[,eng]); compute Ann F^s for a poly F (algorithm of OakuTakayama) 22 annfsBM(F[,eng]); compute Ann F^s for a poly F (algorithm of BrianconMaisonobe) 23 minIntRoot(P,fact); minimal integer root of a maximal ideal P 24 reiffen(p,q); create a polynomial, describing a Reiffen curve 25 arrange(p); create a poly, describing a generic hyperplane arrangement 26 isHolonomic(M); check whether a module is holonomic 27 convloc(L); replace global orderings with local in the ringlist L 28 29 EXPERIMENTAL PROCEDURE: 30 annfsgms(F[,eng]); compute Ann F^s for a poly F (modified OakuTakayama) 31 25 32 // very experimental: 26 // annfsgms(F[,eng]); compute Ann F^s for a poly F with the modified OakuTakayama 27 // a new algorithm, based on the computation of a Bernstein polynomial 33 // a new algorithm (by JMM), based on the computation of a Bernstein polynomial 28 34 // first (with the help of algorithms by Mathias Schulze, see gmssing.lib) and 29 35 // consequent eliminations like in Oaku and Takayama. 36 "; 30 37 31 38 LIB "nctools.lib"; 32 39 LIB "elim.lib"; 33 LIB "qhmoduli.lib"; // for Max 40 LIB "qhmoduli.lib"; // for Max 34 41 LIB "gkdim.lib"; 35 42 36 proc engine(ideal I, int i)43 static proc engine(ideal I, int i) 37 44 { 38 45 /* std  slimgb mix */ … … 61 68 @*  the ideal BS is the list of roots of a Bernstein polynomial of f. 62 69 @* If eng <>0, @code{std} is used for Groebner basis computations, 63 @* otherwise (and by default) @code{slimgb} is used. 70 @* otherwise (and by default) @code{slimgb} is used. 64 71 @* If printlevel=1, progress debug messages will be printed, 65 72 @* if printlevel>=2, all the debug messages will be printed. 66 73 EXAMPLE: example annfsBM; shows examples 67 " 74 " 68 75 { 69 76 int eng = 0; 70 if ( size(#)>0 ) 77 if ( size(#)>0 ) 71 78 { 72 79 if ( typeof(#[1]) == "int" ) 73 80 { 74 81 eng = int(#[1]); 75 } 76 } 82 } 83 } 77 84 // returns a list with a ring and an ideal LD in it 78 85 int ppl = printlevelvoice+2; … … 100 107 if (Name[i] == RName[j]) 101 108 { 102 "Variable names should not include t,s"; 103 return(0); 109 ERROR("Variable names should not include t,s"); 104 110 } 105 111 } … … 124 130 // continue with dp 1,1,1,1... 125 131 tmp[1] = "dp"; // string 126 s = "iv="; 132 s = "iv="; 127 133 for(i=1;i<=Nnew;i++) 128 134 { … … 338 344 @*  the ideal BS is the list of roots of a Bernstein polynomial of f. 339 345 @* If eng <>0, @code{std} is used for Groebner basis computations, 340 @* otherwise (and by default) @code{slimgb} is used. 346 @* otherwise (and by default) @code{slimgb} is used. 341 347 @* If printlevel=1, progress debug messages will be printed, 342 348 @* if printlevel>=2, all the debug messages will be printed. 343 349 EXAMPLE: example annfsOT; shows examples 344 " 350 " 345 351 { 346 352 int eng = 0; 347 if ( size(#)>0 ) 353 if ( size(#)>0 ) 348 354 { 349 355 if ( typeof(#[1]) == "int" ) 350 356 { 351 357 eng = int(#[1]); 352 } 353 } 358 } 359 } 354 360 // returns a list with a ring and an ideal LD in it 355 361 int ppl = printlevelvoice+2; … … 379 385 if (Name[i] == RName[j]) 380 386 { 381 "Variable names should not include u,v,t,Dt"; 382 return(0); 387 ERROR("Variable names should not include u,v,t,Dt"); 383 388 } 384 389 } … … 395 400 tmp = 0; 396 401 tmp[1] = "t"; 397 tmp[2] = "Dt"; 402 tmp[2] = "Dt"; 398 403 list NName = UName + tmp + Name + DName; 399 404 L[2] = NName; 400 405 tmp = 0; 401 406 // Name, Dname will be used further 402 kill UName; 407 kill UName; 403 408 kill NName; 404 409 // block ord (a(1,1),dp); … … 409 414 // continue with dp 1,1,1,1... 410 415 tmp[1] = "dp"; // string 411 s = "iv="; 416 s = "iv="; 412 417 for(i=1;i<=Nnew;i++) 413 418 { … … 483 488 Lord[1] = tmp; 484 489 // continue with a(1,1,1,1)... 485 tmp[1] = "dp"; s = "iv="; 490 tmp[1] = "dp"; s = "iv="; 486 491 for(i=1; i<= Nnew; i++) 487 492 { … … 549 554 tmp = 0; 550 555 // block ord (a(1,1...),dp); 551 string s = "iv="; 556 string s = "iv="; 552 557 for(i=1; i<=Nnew1; i++) 553 558 { … … 631 636 L[2] = NName; 632 637 // dp ordering; 633 string s = "iv="; 638 string s = "iv="; 634 639 for(i=1;i<=Nnew;i++) 635 640 { … … 674 679 ideal LD = K5; 675 680 export LD; 676 return(@R5); 681 return(@R5); 677 682 } 678 683 example … … 698 703 @*  the ideal BS is the list of roots of a Bernstein polynomial of f. 699 704 @* If eng <>0, @code{std} is used for Groebner basis computations, 700 @* otherwise (and by default) @code{slimgb} is used. 705 @* otherwise (and by default) @code{slimgb} is used. 701 706 @* If printlevel=1, progress debug messages will be printed, 702 707 @* if printlevel>=2, all the debug messages will be printed. … … 706 711 LIB "gmssing.lib"; 707 712 int eng = 0; 708 if ( size(#)>0 ) 713 if ( size(#)>0 ) 709 714 { 710 715 if ( typeof(#[1]) == "int" ) 711 716 { 712 717 eng = int(#[1]); 713 } 714 } 718 } 719 } 715 720 int ppl = printlevelvoice+2; 716 721 // returns a ring with the ideal LD in it … … 727 732 // since B may not contain (s+1) [following gmssing.lib] 728 733 // add it! 729 B = B,1; 734 B = B,1; 730 735 B = simplify(B,2+4); // erase zero and repeated entries 731 736 // find the minimal integer value … … 757 762 if (Name[i] == RName[j]) 758 763 { 759 "Variable names should not include u,v,t,Dt"; 760 return(0); 764 ERROR("Variable names should not include u,v,t,Dt"); 761 765 } 762 766 } … … 774 778 tmp = 0; 775 779 // Name, Dname will be used further 776 kill UName; 780 kill UName; 777 781 kill NName; 778 782 // block ord (a(1,1),dp); … … 783 787 // continue with dp 1,1,1,1... 784 788 tmp[1] = "dp"; // string 785 s = "iv="; 789 s = "iv="; 786 790 for(i=1; i<=Nnew; i++) // need really all vars! 787 791 { … … 859 863 // continue with dp 1,1,1,1... 860 864 tmp[1] = "dp"; // string 861 s = "iv="; 865 s = "iv="; 862 866 for(i=1;i<=Nnew;i++) 863 867 { … … 895 899 // add the relations between t,Dt and s 896 900 // K2 = K2, t*Dt+1+S; 897 poly G = t*Dt+S+1; 901 poly G = t*Dt+S+1; 898 902 K2 = NF(K2,std(G)),G; 899 903 dbprint(ppl,"// 22 starting elimination for t,Dt in @R2"); … … 923 927 L[2] = NName; 924 928 // dp ordering; 925 string s = "iv="; 929 string s = "iv="; 926 930 for(i=1;i<=2*N;i++) 927 931 { … … 965 969 export BS; 966 970 export LD; 967 return(@R5); 971 return(@R5); 968 972 } 969 973 example … … 985 989 ASSUME: L is a result of a ringlist command 986 990 EXAMPLE: example minIntRoot; shows examples 987 " 991 " 988 992 { 989 993 list NL = @NL; 990 // given a ringlist, returns a new ringlist, 994 // given a ringlist, returns a new ringlist, 991 995 // where all the porderings are replaced with sord's 992 996 int i,j,k,found; … … 1005 1009 NL[3][i][j][k]="s"; 1006 1010 found = 1; 1007 // printf("replaced at %s,%s,%s",i,j,k);1011 // printf("replaced at %s,%s,%s",i,j,k); 1008 1012 } 1009 1013 } … … 1033 1037 @* in both cases without constants and multiplicities 1034 1038 EXAMPLE: example minIntRoot; shows examples 1035 " 1036 { 1037 // ideal P = factorize(p,1); 1039 " 1040 { 1041 // ideal P = factorize(p,1); 1038 1042 // or ideal P = bernstein(F)[1]; 1039 1043 intvec vP; … … 1053 1057 } 1054 1058 // for both situations: 1055 // now we have an ideal of fractions of type "number" 1059 // now we have an ideal of fractions of type "number" 1056 1060 int sP = size(P); 1057 1061 for(i=1; i<=sP; i++) … … 1068 1072 } 1069 1073 sP = Max(vP); 1070 if (sP == 0) 1074 if (sP == 0) 1071 1075 { 1072 1076 "Warning: zero root!"; … … 1103 1107 ground ring; dim stays for GelfandKirillov dimension 1104 1108 EXAMPLE: example isHolonomic; shows examples 1105 " 1109 " 1106 1110 { 1107 1111 if ( (typeof(M) != "ideal") && (typeof(M) != "module") && (typeof(M) != "matrix") ) … … 1119 1123 } 1120 1124 example 1121 { 1125 { 1122 1126 "EXAMPLE:"; echo = 2; 1123 1127 ring R = 0,(x,y),dp; … … 1129 1133 ideal I = std(LD[1]); 1130 1134 I; 1131 isHolonomic(I); 1135 isHolonomic(I); 1132 1136 } 1133 1137 … … 1136 1140 RETURN: ring 1137 1141 PURPOSE: set up the polynomial, describing a Reiffen curve 1138 NOTE: activate this ring with the @code{setring} command and find the curve as a polynomial RC 1142 NOTE: activate this ring with the @code{setring} command and find the 1143 curve as a polynomial RC 1139 1144 @* a Reiffen curve is defined as F = x^p + y^q + xy^{q1}, q >= p+1 >= 5 1140 1145 ASSUME: q >= p+1 >= 5. Otherwise an error message is returned 1141 1146 EXAMPLE: example reiffen; shows examples 1142 " 1143 { 1144 // a Reiffen curve is defined as 1147 " 1148 { 1149 // a Reiffen curve is defined as 1145 1150 // F = x^p + y^q +x*y^{q1}, q \geq p+1 \geq 5 1146 1151 1147 1152 if ( (p<4)  (q<5)  (qp<1) ) 1148 1153 { 1149 "Some of conditions p>=4, q>=5 or q>=p+1 is not satisfied!"; 1150 return(0); 1154 ERROR("Some of conditions p>=4, q>=5 or q>=p+1 is not satisfied!"); 1151 1155 } 1152 1156 ring @r = 0,(x,y),dp; … … 1156 1160 } 1157 1161 example 1158 { 1162 { 1159 1163 "EXAMPLE:"; echo = 2; 1160 1164 def r = reiffen(4,5); … … 1170 1174 ASSUME: basering is present 1171 1175 EXAMPLE: example arrange; shows examples 1172 " 1176 " 1173 1177 { 1174 1178 int UseBasering = 0 ; … … 1222 1226 } 1223 1227 example 1224 { 1228 { 1225 1229 "EXAMPLE:"; echo = 2; 1226 1230 ring X = 0,(x,y,z,t),dp; … … 1236 1240 ASSUME: L has a structure of an arrangement 1237 1241 EXAMPLE: example indAR; shows examples 1238 " 1242 " 1239 1243 { 1240 1244 if ( (n<2)  (n>nvars(basering)) ) … … 1266 1270 } 1267 1271 example 1268 { 1272 { 1269 1273 "EXAMPLE:"; echo = 2; 1270 1274 ring r = 0,(x,y,z,t,v),dp;
Note: See TracChangeset
for help on using the changeset viewer.