Changeset 951a63 in git


Ignore:
Timestamp:
Jun 20, 2006, 1:27:36 PM (18 years ago)
Author:
Hans Schönemann <hannes@…>
Branches:
(u'fieker-DuVal', '117eb8c30fc9e991c4decca4832b1d19036c4c65')(u'spielwiese', 'b52fc4b2495505785981d640dcf7eb3e456778ef')
Children:
808a9f36d059cef6d1e3c3a667ee4d5a37a5a4eb
Parents:
2f0b7fe5acd626431b63adefc9f7f2e4b17e287f
Message:
*hannes: GGMs changes, format


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

Legend:

Unmodified
Added
Removed
  • Singular/LIB/dmod.lib

    r2f0b7f r951a63  
    11///////////////////////////////////////////////////////////////////////////////
    2 version="$Id: dmod.lib,v 1.4 2006-06-07 20:21:40 levandov Exp $";
     2version="$Id: dmod.lib,v 1.5 2006-06-20 11:27:36 Singular Exp $";
    33category="Noncommutative";
    44info="
     
    77@*       Jorge Martin Morales,    jorge@unizar.es
    88
    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).
     9THEORY: 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,
     11where 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),
     13such 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).
    1619
    1720PROCEDURES:
    18 annfsOT(F[,eng]);    compute Ann F^s for a poly F with the algorithm of Oaku-Takayama
    19 annfsBM(F[,eng]);    compute Ann F^s for a poly F with the algorithm of Briancon-Maisonobe
    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 ";
     21annfsOT(F[,eng]); compute Ann F^s for a poly F (algorithm of Oaku-Takayama)
     22annfsBM(F[,eng]); compute Ann F^s for a poly F (algorithm of Briancon-Maisonobe)
     23minIntRoot(P,fact); minimal integer root of a maximal ideal P
     24reiffen(p,q);     create a polynomial, describing a Reiffen curve
     25arrange(p);       create a poly, describing a generic hyperplane arrangement
     26isHolonomic(M);   check whether a module is holonomic
     27convloc(L);       replace global orderings with local in the ringlist L
     28
     29EXPERIMENTAL PROCEDURE:
     30annfsgms(F[,eng]); compute Ann F^s for a poly F (modified Oaku-Takayama)
     31
    2532// very experimental:
    26 // annfsgms(F[,eng]); compute Ann F^s for a poly F with the modified Oaku-Takayama
    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
    2834// first (with the help of algorithms by Mathias Schulze, see gmssing.lib) and
    2935// consequent eliminations like in Oaku and Takayama.
     36";
    3037
    3138LIB "nctools.lib";
    3239LIB "elim.lib";
    33 LIB "qhmoduli.lib"; // for Max 
     40LIB "qhmoduli.lib"; // for Max
    3441LIB "gkdim.lib";
    3542
    36 proc engine(ideal I, int i)
     43static proc engine(ideal I, int i)
    3744{
    3845  /* std - slimgb mix */
     
    6168@*       - the ideal BS is the list of roots of a Bernstein polynomial of f.
    6269@*       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.
    6471@*       If printlevel=1, progress debug messages will be printed,
    6572@*       if printlevel>=2, all the debug messages will be printed.
    6673EXAMPLE: example annfsBM; shows examples
    67 " 
     74"
    6875{
    6976  int eng = 0;
    70   if ( size(#)>0 ) 
     77  if ( size(#)>0 )
    7178  {
    7279    if ( typeof(#[1]) == "int" )
    7380    {
    7481      eng = int(#[1]);
    75     }     
    76   }           
     82    }
     83  }
    7784  // returns a list with a ring and an ideal LD in it
    7885  int ppl = printlevel-voice+2;
     
    100107      if (Name[i] == RName[j])
    101108      {
    102         "Variable names should not include t,s";
    103         return(0);
     109        ERROR("Variable names should not include t,s");
    104110      }
    105111    }
     
    124130  // continue with dp 1,1,1,1...
    125131  tmp[1]  = "dp"; // string
    126   s       = "iv="; 
     132  s       = "iv=";
    127133  for(i=1;i<=Nnew;i++)
    128134  {
     
    338344@*       - the ideal BS is the list of roots of a Bernstein polynomial of f.
    339345@*       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.
    341347@*       If printlevel=1, progress debug messages will be printed,
    342348@*       if printlevel>=2, all the debug messages will be printed.
    343349EXAMPLE: example annfsOT; shows examples
    344 " 
     350"
    345351{
    346352  int eng = 0;
    347   if ( size(#)>0 ) 
     353  if ( size(#)>0 )
    348354  {
    349355    if ( typeof(#[1]) == "int" )
    350356    {
    351357      eng = int(#[1]);
    352     }     
    353   }             
     358    }
     359  }
    354360  // returns a list with a ring and an ideal LD in it
    355361  int ppl = printlevel-voice+2;
     
    379385      if (Name[i] == RName[j])
    380386      {
    381         "Variable names should not include u,v,t,Dt";
    382         return(0);
     387        ERROR("Variable names should not include u,v,t,Dt");
    383388      }
    384389    }
     
    395400  tmp    =  0;
    396401  tmp[1] = "t";
    397   tmp[2] = "Dt"; 
     402  tmp[2] = "Dt";
    398403  list NName = UName +  tmp + Name + DName;
    399404  L[2]   = NName;
    400405  tmp    = 0;
    401406  // Name, Dname will be used further
    402   kill UName; 
     407  kill UName;
    403408  kill NName;
    404409  // block ord (a(1,1),dp);
     
    409414  // continue with dp 1,1,1,1...
    410415  tmp[1]  = "dp"; // string
    411   s       = "iv="; 
     416  s       = "iv=";
    412417  for(i=1;i<=Nnew;i++)
    413418  {
     
    483488  Lord[1] = tmp;
    484489  // continue with a(1,1,1,1)...
    485   tmp[1]  = "dp"; s  = "iv="; 
     490  tmp[1]  = "dp"; s  = "iv=";
    486491  for(i=1; i<= Nnew; i++)
    487492  {
     
    549554  tmp    = 0;
    550555  // block ord (a(1,1...),dp);
    551   string  s = "iv="; 
     556  string  s = "iv=";
    552557  for(i=1; i<=Nnew-1; i++)
    553558  {
     
    631636  L[2]   = NName;
    632637  // dp ordering;
    633   string   s       = "iv="; 
     638  string   s       = "iv=";
    634639  for(i=1;i<=Nnew;i++)
    635640  {
     
    674679  ideal LD = K5;
    675680  export LD;
    676   return(@R5); 
     681  return(@R5);
    677682}
    678683example
     
    698703@*       - the ideal BS is the list of roots of a Bernstein polynomial of f.
    699704@*       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.
    701706@*       If printlevel=1, progress debug messages will be printed,
    702707@*       if printlevel>=2, all the debug messages will be printed.
     
    706711  LIB "gmssing.lib";
    707712  int eng = 0;
    708   if ( size(#)>0 ) 
     713  if ( size(#)>0 )
    709714  {
    710715    if ( typeof(#[1]) == "int" )
    711716    {
    712717      eng = int(#[1]);
    713     }     
    714   }   
     718    }
     719  }
    715720  int ppl = printlevel-voice+2;
    716721  // returns a ring with the ideal LD in it
     
    727732  // since B may not contain (s+1) [following gmssing.lib]
    728733  // add it!
    729   B = B,-1; 
     734  B = B,-1;
    730735  B = simplify(B,2+4); // erase zero and repeated entries
    731736  // find the minimal integer value
     
    757762      if (Name[i] == RName[j])
    758763      {
    759         "Variable names should not include u,v,t,Dt";
    760         return(0);
     764        ERROR("Variable names should not include u,v,t,Dt");
    761765      }
    762766    }
     
    774778  tmp        = 0;
    775779  // Name, Dname will be used further
    776   kill UName; 
     780  kill UName;
    777781  kill NName;
    778782  // block ord (a(1,1),dp);
     
    783787  // continue with dp 1,1,1,1...
    784788  tmp[1]  = "dp"; // string
    785   s       = "iv="; 
     789  s       = "iv=";
    786790  for(i=1; i<=Nnew; i++) // need really all vars!
    787791  {
     
    859863  // continue with dp 1,1,1,1...
    860864  tmp[1]  = "dp"; // string
    861   s       = "iv="; 
     865  s       = "iv=";
    862866  for(i=1;i<=Nnew;i++)
    863867  {
     
    895899  // add the relations between t,Dt and s
    896900  //  K2       = K2, t*Dt+1+S;
    897   poly G = t*Dt+S+1; 
     901  poly G = t*Dt+S+1;
    898902  K2 = NF(K2,std(G)),G;
    899903  dbprint(ppl,"// -2-2- starting elimination for t,Dt in @R2");
     
    923927  L[2]   = NName;
    924928  // dp ordering;
    925   string   s       = "iv="; 
     929  string   s       = "iv=";
    926930  for(i=1;i<=2*N;i++)
    927931  {
     
    965969  export BS;
    966970  export LD;
    967   return(@R5); 
     971  return(@R5);
    968972}
    969973example
     
    985989ASSUME: L is a result of a ringlist command
    986990EXAMPLE: example minIntRoot; shows examples
    987 " 
     991"
    988992{
    989993  list NL = @NL;
    990   // given a ringlist, returns a new ringlist, 
     994  // given a ringlist, returns a new ringlist,
    991995  // where all the p-orderings are replaced with s-ord's
    992996  int i,j,k,found;
     
    10051009            NL[3][i][j][k]="s";
    10061010            found = 1;
    1007             //      printf("replaced at %s,%s,%s",i,j,k);
     1011            //    printf("replaced at %s,%s,%s",i,j,k);
    10081012          }
    10091013        }
     
    10331037@*       in both cases without constants and multiplicities
    10341038EXAMPLE: example minIntRoot; shows examples
    1035 " 
    1036 {
    1037   //    ideal P = factorize(p,1); 
     1039"
     1040{
     1041  //    ideal P = factorize(p,1);
    10381042  // or ideal P = bernstein(F)[1];
    10391043  intvec vP;
     
    10531057  }
    10541058  // 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"
    10561060  int sP = size(P);
    10571061  for(i=1; i<=sP; i++)
     
    10681072  }
    10691073  sP = -Max(-vP);
    1070   if (sP == 0) 
     1074  if (sP == 0)
    10711075  {
    10721076    "Warning: zero root!";
     
    11031107ground ring; dim stays for Gelfand-Kirillov dimension
    11041108EXAMPLE: example isHolonomic; shows examples
    1105 " 
     1109"
    11061110{
    11071111  if ( (typeof(M) != "ideal") && (typeof(M) != "module") && (typeof(M) != "matrix") )
     
    11191123}
    11201124example
    1121 { 
     1125{
    11221126  "EXAMPLE:"; echo = 2;
    11231127  ring R = 0,(x,y),dp;
     
    11291133  ideal I = std(LD[1]);
    11301134  I;
    1131   isHolonomic(I); 
     1135  isHolonomic(I);
    11321136}
    11331137
     
    11361140RETURN:  ring
    11371141PURPOSE: 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
     1142NOTE:    activate this ring with the @code{setring} command and find the
     1143         curve as a polynomial RC
    11391144@*   a Reiffen curve is defined as F = x^p + y^q + xy^{q-1}, q >= p+1 >= 5
    11401145ASSUME: q >= p+1 >= 5. Otherwise an error message is returned
    11411146EXAMPLE: example reiffen; shows examples
    1142 " 
    1143 {
    1144 // a Reiffen curve is defined as 
     1147"
     1148{
     1149// a Reiffen curve is defined as
    11451150// F = x^p + y^q +x*y^{q-1}, q \geq p+1 \geq 5
    11461151
    11471152  if ( (p<4) || (q<5) || (q-p<1) )
    11481153  {
    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!");
    11511155  }
    11521156  ring @r = 0,(x,y),dp;
     
    11561160}
    11571161example
    1158 { 
     1162{
    11591163  "EXAMPLE:"; echo = 2;
    11601164  def r = reiffen(4,5);
     
    11701174ASSUME: basering is present
    11711175EXAMPLE: example arrange; shows examples
    1172 " 
     1176"
    11731177{
    11741178  int UseBasering = 0 ;
     
    12221226}
    12231227example
    1224 { 
     1228{
    12251229  "EXAMPLE:"; echo = 2;
    12261230  ring X = 0,(x,y,z,t),dp;
     
    12361240ASSUME: L has a structure of an arrangement
    12371241EXAMPLE: example indAR; shows examples
    1238 " 
     1242"
    12391243{
    12401244  if ( (n<2) || (n>nvars(basering)) )
     
    12661270}
    12671271example
    1268 { 
     1272{
    12691273  "EXAMPLE:"; echo = 2;
    12701274  ring r = 0,(x,y,z,t,v),dp;
Note: See TracChangeset for help on using the changeset viewer.