Changeset 0dbfec in git for Singular/LIB/standard.lib


Ignore:
Timestamp:
Sep 27, 2005, 6:52:57 PM (19 years ago)
Author:
Hans Schönemann <hannes@…>
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
4e6fa5fccba2b237de4e290af1b8886d787757dc
Parents:
82d1a72c907e4d9593d13fb4216f23d0e65fad42
Message:
*hannes/lossen: several fixes


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

Legend:

Unmodified
Added
Removed
  • Singular/LIB/standard.lib

    r82d1a7 r0dbfec  
    11//////////////////////////////////////////////////////////////////////////////
    2 version="$Id: standard.lib,v 1.72 2005-07-25 14:46:50 bricken Exp $";
     2version="$Id: standard.lib,v 1.73 2005-09-27 16:52:57 Singular Exp $";
    33category="Miscellaneous";
    44info="
     
    138138//////////////////////////////////////////////////////////////////////////
    139139
     140//////////////////////////////////////////////////////////////////////////
    140141proc groebner(def i, list #)
    141142"SYNTAX: @code{groebner (} ideal_expression @code{)} @*
     
    293294
    294295  // construct ring in which first std computation is done
    295   string varstr_P = varstr(P);
    296   string parstr_P = parstr(P);
    297   int is_homog = (homog(i) && (npars_P <= 1));
     296  // CL: 21/09/05 for Singular 3-0 with ringlists....
     297
     298  list BRlist = ringlist(P);
    298299  int add_vars = 0;
    299   string ri = "ring Phelp =";
     300  int nvarP = nvars(P);
     301  int k;
     302  ideal Qideal = ideal(P); 
     303  string ri;
    300304
    301305  if (npars_P > 0)
    302306  {
    303     for(int k=ncols(i); k>0; k--) { i[k]=cleardenom(i[k]); }
     307    for(k=ncols(i); k>0; k--) { i[k]=cleardenom(i[k]); }
    304308  }
    305309  // more than one parameters are converted to ring variables
    306310  if (npars_P > 1)
    307311  {
    308     ri = ri + string(char(P)) + ",(" + varstr_P + "," + parstr_P;
     312    for (k=1; k<=npars_P; k++)
     313    {
     314      BRlist[2][nvarP+k] = BRlist[1][2][k];
     315    }
     316    BRlist[1]=BRlist[1][1];
    309317    add_vars = npars_P;
    310318  }
    311   else
    312   {
    313     ri = ri + "(" + charstr(P) + "),(" + varstr_P;
    314   }
     319
     320   
     321  // for Hilbert driven approach, Qring structure is removed (defining ideal
     322  // will be added to the ideal under consideration in the process). 
     323  if (size(BRlist[4])>0)
     324  {
     325    int was_qring = 1;
     326    BRlist[4] = ideal(0);
     327  }
    315328
    316329  // a homogenizing variable is added, if necessary
     330  int is_homog = (homog(i) && (npars_P <= 1));
    317331  if (! is_homog)
    318332  {
    319     ri = ri + ",@t";
    320333    add_vars = add_vars + 1;
    321   }
     334    BRlist[2][nvarP+add_vars] = "@t@";
     335  }
     336  // save ordering for later use
     337  list ord_P = BRlist[3];   // should be ring independent
     338
    322339  // ordering is set to (dp, C)
    323   ri = ri + "),(dp,C);";
     340  intvec weight_dp = 1;
     341  for (k=2; k<=nvarP+add_vars; k++) { weight_dp = weight_dp,1; }
     342  BRlist[3] = list();
     343  BRlist[3][1]=list("dp",weight_dp);
     344  BRlist[3][2]=list("C",intvec(0));
    324345
    325346  // change the ring
    326   execute(ri);
     347  def Phelp = ring(BRlist);
     348  kill BRlist;
     349  setring Phelp;
    327350
    328351  // get ideal from previous ring
    329352  if (is_homog)
    330353  {
    331     ideal qh = imap(P, i);
     354    ideal qh = imap(P, i), imap(P,Qideal);
    332355  }
    333356  else
    334357  {
    335358    // and homogenize
    336     ideal qh=homog(imap(P,i),@t);
     359    ideal qh = homog(imap(P,i),@t@), homog(imap(P,Qideal),@t@);
    337360  }
    338361
     
    340363  if (p_opt)
    341364  {
    342     "std in " + ri[13, size(ri) - 13];
     365    ri = string(Phelp);
     366    "std in " + ri;
    343367  }
    344368  intvec hi=hilb(std(qh),1);
     
    359383    // additional variables were introduced
    360384    // need another intermediate ring
    361     ri = "ring Phelp1 = (" + charstr(Phelp)
    362       + "),(" + varstr(Phelp) + "),(" + ordstr_P;
    363 
    364     // for lp wit at most one parameter, we do not need a block ordering
    365     if ( ! (IsSimple_P && (add_vars <2) && find(ordstr_P, "l")))
    366     {
    367       // need block ordering
    368       ri = ri + ", dp(" + string(add_vars) + ")";
    369     }
    370     ri = ri + ");";
     385    list BRlist = ringlist(Phelp);
     386    BRlist[3] = list();
     387    for (k=1; k<=size(ord_P); k++)
     388    {
     389      BRlist[3][k] = ord_P[k];
     390    }
     391
     392    if ( IsSimple_P && (add_vars==1) && (size(ord_P)==2) && (ord_P[1][1]=="lp") )
     393    {
     394      // for lp with at most one parameter, we do not need a block ordering
     395      intvec OW = BRlist[3][1][2];
     396      OW = OW,1;
     397      BRlist[3][1][2] = OW;
     398    }
     399    else
     400    {
     401      if ( IsSimple_P && (add_vars==1) && (size(ord_P)==2) && (ord_P[2][1]=="lp") )
     402      {
     403        // for lp with at most one parameter, we do not need a block ordering
     404        intvec OW = BRlist[3][2][2];
     405        OW = OW,1;
     406        BRlist[3][2][2] = OW;
     407      }
     408      else
     409      {
     410        intvec OW = 1;
     411        for (k=2; k<=add_vars; k++) { OW = OW,1; }
     412        BRlist[3][size(ord_P)+1] = list("dp",OW);
     413      }
     414    }
    371415
    372416    // change to intermediate ring
    373     execute(ri);
     417    def Phelp1 = ring(BRlist);
     418    setring Phelp1;
     419
    374420    ideal qh = imap(Phelp, qh);
    375421    kill Phelp;
    376422    if (p_opt)
    377423    {
    378       "std with hilb in " + ri[14,size(ri)-14];
     424      ri = string(Phelp1);
     425      "std with hilb in " + ri;
    379426    }
    380427    // compute std with Hilbert series
     
    387434        "dehomogenization";
    388435      }
    389       qh = subst(qh, @t, 1);
     436      qh = subst(qh, @t@, 1);
    390437    }
    391438
     
    433480  defined(groebner_error);
    434481}
    435 //////////////////////////////////////////////////////////////////////////
    436482
    437483proc res(list #)
Note: See TracChangeset for help on using the changeset viewer.