Changeset b5cc09 in git


Ignore:
Timestamp:
Oct 5, 2015, 7:26:34 PM (9 years ago)
Author:
Adi Popescu <adi_popescum@…>
Branches:
(u'spielwiese', '4a9821a93ffdc22a6696668bd4f6b8c9de3e6c5f')
Children:
7544b6110f6c5a9a1708916223da2c76ca5f8b4d
Parents:
4ce1b50655a7e6cda593952e66da5382178e6f14
Message:
fix: GND.lib
File:
1 edited

Legend:

Unmodified
Added
Removed
  • Singular/LIB/GND.lib

    r4ce1b5 rb5cc09  
    22version="version desingularization.lib 4.0.0.0 Mai_2015";
    33category="Commutative Algebra";
     4
    45info="
    56LIBRARY   :  GND.lib
    67AUTHOR    :  Adrian Popescu, popescu@mathematik.uni-kl.de
    7 OVERVIEW  : 
     8
     9OVERVIEW  :
    810A method to compute the General Neron Desingularization in the frame of
    911one dimensional local domains
    1012
    11 SEE ALSO  : A. Popescu and D. Popescu, "A method to compute the General Neron Desingularization in the frame of one dimensional local domains",  http://arxiv.org/abs/1508.05511
     13REFERENCES:
     14@* [1] A. Popescu, D. Popescu, \"A method to compute the General Neron Desingularization in the frame of one dimensional local domains\",  arxiv.org/abs/1508.05511
     15
     16KEYWORDS: desingularization; general neron.
    1217
    1318PROCEDURES:
     
    109114///////////////////////////////////////////////////////////////////////////////////////////
    110115
    111 static proc finde(ideal i,poly d)
    112 "USAGE: Finds smallest e>0 s.t. (0):(d^e) will become stationary"
    113 {
    114   ring BASE = basering;
    115   qring r = i;
    116   int e = 2;
    117   poly d = imap(BASE,d);
    118   ideal i1 = std(quotient(ideal(0),ideal(d^(e-1))));
    119   ideal i2 = std(quotient(ideal(0),ideal(d^(e))));
    120   while(reduce(i2,i1)!= 0)
    121   {
    122     e = e+1;
    123     i1 = i2;
    124     i2 = std(quotient(ideal(0),ideal(d^(e))));
    125   }
    126   setring(BASE);
    127   return(e-1);
    128 }
    129 
    130 ///////////////////////////////////////////////////////////////////////////////////////////
    131116
    132117static proc extractP(list wP, ideal I)
     
    294279
    295280static proc inY(poly p,int nrx,int nry)
    296 "USAGE: tests if poly is just in the Y variables"
     281"USAGE: tests if poly p contains just the variables var(nrx+1),...,var(nry)"
    297282{
    298283  int i;
     
    313298
    314299static proc myjet(ideal p, int bound,string param,string variab)
    315 "USAGE: computes the jet in the right ring (instead of switching on and on)"
     300"USAGE: computes the jet in the right ring (instead of switching it on and on)"
    316301{
    317302    def r = basering;
    318     if(param != "")
    319     {
    320       execute("ring R2 = (0,"+param+"),("+variab+"),ds;");
    321     }
    322     else
    323     {
    324       execute("ring R2 = 0,("+variab+"),ds;");
    325     }
     303    list l;
     304    l[1] = list(0,param,list(list("lp",1)),ideal(0));
     305    l[2] = variab;
     306    l[3] = ringlist(r)[3];
     307    l[3][1][1] = "ds";
     308    l[4] = ideal(0);
     309    def R2 = ring(l);
     310    setring(R2);
    326311    ideal p = imap(r,p);
    327312    for(int i=1;i<=ncols(p);i++)
     
    335320///////////////////////////////////////////////////////////////////////////////////////////
    336321
    337 proc invp(poly p, int bound,string param,string variab)
     322proc invp(poly p, int bound,list param,list variab)
    338323"USAGE: computes the inverse in Q(param)[variab]"
    339324{
    340325    def r = basering;
    341     if(param != "")
    342     {
    343       execute("ring R2 = (0,"+param+"),("+variab+"),ds;");
    344     }
    345     else
    346     {
    347       execute("ring R2 = 0,("+variab+"),ds;");
    348     }
     326    list l;
     327    l[1] = list(0,param,list(list("lp",1)),ideal(0));
     328    l[2] = variab;
     329    l[3] = ringlist(r)[3];
     330    l[3][1][1] = "ds";
     331    l[4] = ideal(0);
     332    def R2 = ring(l);
     333    setring(R2);
    349334    poly p = imap(r,p);
    350335    if(bound<=0)
     
    356341                ERROR("My inverse : p is 0");
    357342            }
    358         poly original;
     343          poly original,res;
    359344    original = p;
    360     if(leadcoef(p) == 0)
     345    if(ord(p) != 0)
    361346        {
    362347            ERROR("My inverse : the power series is not a unit.");
    363348        }
    364349    poly q = 1/p[1];
    365     poly res = q;
     350    res = q;
    366351    p = q * (p[1] - jet(p,bound));
    367352    poly s = p;
     
    371356        p = jet(p*s,bound);
    372357    }
     358    //res = division(poly(1),p,bound);
     359   
    373360    //TEST
    374361    if(jet(original*res,bound) != poly(1))
     
    414401    if(total2[i][n] <= n)
    415402    {
    416       execute("resf[size(resf)+1] = intvec("+string(total2[i])+");");
     403      def dummy = total2[i];
     404      resf[size(resf)+1] = intvec(dummy[1..size(total2[i])]);
     405      kill dummy;
    417406    }
    418407    if(total2[i][n] <= y)
    419408    {
    420       execute("resy[size(resy)+1] = intvec("+string(total2[i])+");");
     409      def dummy = total2[i];
     410      resy[size(resy)+1] = intvec(dummy[1..size(total2[i])]);
     411      kill dummy;
    421412    }
    422413    i = i+1;
     
    439430///////////////////////////////////////////////////////////////////////////////////////////
    440431
    441 static proc mymin(a,b)
    442 "USAGE: finds minimium between a and b"
    443 {
    444   if(a<b)
    445   {
    446     return(a);
    447   }
    448   else
    449   {
    450     return(b);
    451   }
    452 }
    453 
    454 ///////////////////////////////////////////////////////////////////////////////////////////
    455 
    456 static proc findnewvar(string Z)
     432
     433proc findnewvar(string Z)
    457434"USAGE: Finds new unused variable Z,Z1,Z2,..."
    458435{
    459   int i,j;
    460   int exists = 0;
    461   for(i=1;i<=nvars(basering) && exists==0;i++)
    462   {
    463     if(string(var(i)) == Z)
    464     {
    465       exists=1;
    466     }
    467   }
    468   if(exists==0)
    469   {
    470     return(Z);
    471   }
    472   string newvar;
    473   while(1)
    474   {
    475     j = j+1;
    476     newvar = Z+"("+string(j)+")";
    477     exists=0;
    478     for(i=1;i<=nvars(basering) && exists==0;i++)
    479     {
    480       if(string(var(i)) == newvar)
    481       {
    482         exists=1;
    483       }
    484     }
    485     if(exists==0)
    486     {
    487       return(newvar);
    488     }   
    489   }
    490 }
    491 
    492 ///////////////////////////////////////////////////////////////////////////////////////////
    493 
    494 static proc mylcm(ideal id,string as)
     436  string S = "," + charstr(basering) + "," + varstr(basering) + ",";
     437  Z = "," + Z + ",";
     438  if(find(S,Z) == 0)
     439  {
     440    return(Z[2..size(Z)-1]);
     441  }
     442  int i=1;
     443  while(find(S,Z+"("+string(i)+")") == 1)
     444  {
     445    i++;
     446  }
     447  Z = string(Z[2..size(Z)-1])+"("+string(i)+")";
     448  return(Z);
     449}
     450
     451///////////////////////////////////////////////////////////////////////////////////////////
     452
     453static proc mylcm(ideal id,list asl)
    495454"USAGE: computes the lcm of these numbers"
    496455{
    497456  int i;
    498457  def r1 = basering;
    499   execute("ring r2 = 0,("+as+"),dp;");
     458  list l;
     459  l[1] = 0;
     460  l[2] = asl;
     461  l[3] = list(list("dp",1),list("C",0));
     462  l[4] = ideal(0);
     463  def r2 = ring(l);
     464  setring(r2);
    500465  ideal id = imap(r1,id);
    501466  poly lcmi=1;
     
    559524///////////////////////////////////////////////////////////////////////////////////////////
    560525
     526static proc crl(list param, list variab, string order)
     527"USAGE: construct the desired ringlist"
     528{
     529  list l;
     530  if(size(param)==0)
     531  {
     532    l[1] = 0;
     533  }
     534  else
     535  { 
     536    l[1] = list(0,param,list(list("lp",1)),ideal(0));
     537  }
     538  l[2] = variab;
     539  l[3] = list(list(order,1),list("C",0));
     540  l[4] = ideal(0);
     541  return(l);
     542}
     543
     544///////////////////////////////////////////////////////////////////////////////////////////
     545
    561546proc desingularization(all, int nra, int nrx, int nry, ideal xid, ideal yid, ideal aid, ideal f,
    562547                        list #)
     
    586571  }
    587572  string as,xs,ys;
     573  list asl,xsl,ysl;
    588574  ideal a,x,y;
    589575  int i,j,k;
     
    591577  {
    592578    as = string(var(1));
     579    asl[1] = string(var(1));
    593580    a[1] = var(1);
    594581    for(i=2;i<=nra;i++)
     
    596583      as = as+","+string(var(i));
    597584      a[ncols(a)+1] = var(i);
     585      asl[size(asl)+1] = string(var(i));
    598586    }
    599587  }
     
    603591    xs = string(var(nra+1));
    604592    x[1] = var(nra+1);
     593    xsl[1] = string(var(nra+1));
    605594    for(i=nra+2;i<=nra+nrx;i++)
    606595    {
    607596      xs = xs+","+string(var(i));
    608597      x[ncols(x)+1] = var(i);
     598      xsl[size(xsl)+1] = string(var(i));
    609599    }
    610600  }
     
    614604    ys = string(var(nra+nrx+1));
    615605    y[1] = var(nra+nrx+1);
     606    ysl[1] = string(var(nra+nrx+1));
    616607    for(i=nra+nrx+2;i<=nra+nrx+nry;i++)
    617608    {
    618609      ys = ys+","+string(var(i));
    619610      y[ncols(y)+1] = var(i);
     611      ysl[size(ysl)+1] = string(var(i));
    620612    }
    621613  }
    622614  //ys;
    623   execute("ring Abase = 0,("+xs+"),dp;");
     615  def Abase = ring(crl(list(),xsl,"dp"));
     616  setring Abase;
    624617  qring A = std(imap(all,xid));
    625   execute("ring Bbase = (0,"+xs+"),("+ys+"),dp;");
     618  def Bbase = ring(crl(xsl,ysl,"dp"));
     619  setring Bbase;
    626620  ideal yid = imap(all, yid);
    627621  i = ncols(yid);
     
    637631  }
    638632  qring B = yid;
    639   execute("ring Bfalsebase = 0,("+xs+","+ys+"),dp;");
     633  def Bfalsebase = ring(crl(list(),xsl+ysl,"dp"));
     634  setring(Bfalsebase);
    640635  qring Bfalse = std(imap(all,yid));
    641636  if(nra!=0)
    642637  {
    643     execute("ring Apreal = (0,"+as+"),("+xs+"),dp;");
    644     execute("ring Apbase = 0,("+as+","+xs+"),dp;");
     638    def Apreal = ring(crl(asl,xsl,"dp"));
     639    def Apbase = ring(crl(list(),asl+xsl,"dp"));
     640    setring Apbase;
    645641    qring Ap = std(imap(all,xid)+imap(all,aid));
    646642  }
    647643  else
    648644  {
    649     execute("ring Apbase = 0,("+xs+"),dp;");
     645    def Apbase = ring(crl(list(),xsl,"dp"));
     646    setring Apbase;
    650647    qring Ap = std(imap(all,xid));
    651648  }
     
    734731    // It should be enough to consider the minor I have found.
    735732    int found = 0;
    736     //ideal mino = minor(jacob(yid),mymin(nrows(jacob(yid)),ncols(jacob(yid))));
     733    //ideal mino = minor(jacob(yid),min(nrows(jacob(yid)),ncols(jacob(yid))));
    737734    //mino;~;
    738735    //for(k = 1;size(mino);i++)
     
    749746            dz[2] = v(M) /dz[1];
    750747            //z is actually 1/z so we have to construct it's invers
    751             dz[2] = 1/leadcoef(dz[2])*invp(dz[2]/leadcoef(dz[2]),3*i,as,xs);
     748            dz[2] = 1/leadcoef(dz[2])*invp(dz[2]/leadcoef(dz[2]),3*i,asl,xsl);
    752749            found = 1;
    753750          }
     
    781778    denz[size(denz)+1] = denominator(leadcoef(z[i]));
    782779  }
    783   def den = mylcm(denz,as);
     780  def den = mylcm(denz,asl);
    784781  z = z * den;
    785782  int newAptest = 0;
     
    788785    newAptest = 1;
    789786    string aa = "a";
    790     def newpar = findnewvar(aa);
    791     as = as + "," + newpar;
     787    list newpar;
     788    newpar[1] = string(findnewvar(aa));
     789    as = as + "," + findnewvar(aa);
    792790    nra = nra + 1;
    793     execute("ring newApbase = 0,("+as+","+xs+"),dp;");
     791    def newApbase = ring(crl(list(),asl+xsl,"dp"));
     792    setring newApbase;
    794793    poly p = var(nra)*imap(Apreal,den)-1;
    795794    qring newAp = std(imap(all,xid)+imap(all,aid)+p);
     
    803802    Apbase = newApbase;
    804803    Ap = newAp;
    805     execute("ring newApreal = (0,"+as+"),("+xs+"),dp;");
     804    def newApreal = ring(crl(asl,xsl,"dp"));
     805    setring newApreal;
    806806    def z = imap(Ap,z);
    807807    def d = imap(Apreal,d);
    808808    def den = imap(Apreal,den);
    809809    Apreal = newApreal;
    810     execute("ring newaring = 0,"+newpar+",dp;");
     810    def newaring = ring(crl(list(),newpar,"dp"));
     811    setring newaring;
    811812  }
    812813  else
     
    821822
    822823  string Z = "Z";
    823   def newvar = findnewvar(Z);
    824   execute("ring newvarring = 0,"+newvar+",dp;");
     824  list newvar;
     825  newvar[1] = string(findnewvar(Z));
     826  def newvarring = ring(crl(list(),newvar,"dp"));
    825827  def B1base = Bbase+newvarring;
    826828  def B1 = B+newvarring;
     
    836838  setring B1false;
    837839  //If P is constant (i.e. no Y), than I can work with d = d' = P = P'
    838   execute("poly Pconst = reduce(imap(Bfalse,Pprim),ideal("+ys+"));");
     840  poly Pconst = reduce(imap(Bfalse,Pprim),imap(all,y));
     841 
    839842  if(Pconst == imap(Bfalse,Pprim))
    840843  {
     
    907910  setring Ap;
    908911  def lam = imap(Apreal,lam);
    909   string newas;
     912  list newas;
    910913  int howmanyfinala;
    911914  if(size(lam) == 0)
    912915  {
    913     newas = "";
    914     execute("ring Cbase = 0,("+xs+"),dp;");
     916    def Cbase = ring(crl(list(),xsl,"dp"));
     917    setring Cbase;
    915918  }
    916919  else
     
    918921    ideal varlam = variables(lam);
    919922    howmanyfinala = ncols(varlam);
    920     newas = string(varlam[1]);
    921     for(i=2;i<=ncols(varlam);i++)
    922     {
    923       newas = newas + "," + string(varlam[i]);
    924     }
    925     execute("ring Cbase = 0,("+newas+","+xs+"),dp;");
     923    for(i=1;i<=ncols(varlam);i++)
     924    {
     925      newas[size(newas)+1] = string(varlam[i]);
     926    }
     927    def Cbase = ring(crl(list(),newas+xsl,"dp"));
     928    setring Cbase;
    926929  }
    927930  setring Ap;
     
    983986  matrix adj = adjoint(PM);
    984987  matrix G = imap(Bfalse,Plist)[2]*var(nvars(B1))^2*adj;
    985   execute("ring seeGring = 0,"+string(ys[1])+string(nvars(B1))+",dp;");
     988  def seeGring = ring(crl(list(),list(string(ys[1])+string(nvars(B1))),"dp"));
    986989  def seeG = B1 + seeGring;
    987990  setring seeG;
     
    10321035//            Start constructing E
    10331036 
    1034   string ts,yz;
    1035   yz = ys + "," + string(ys[1]) + string(nry+1);
     1037  list ts,yz;
     1038  yz = ysl + list(string(ys[1]) + string(nry+1));
    10361039  string t = "T";
    10371040  def newvart = findnewvar(t);
    10381041  for(i=1;i<=nry+1;i++)
    10391042  {
    1040     ts = ts + newvart + string(i) + ",";
    1041   }
    1042   ts = ts[1..size(ts)-1];
    1043   execute("ring Efalsebase = 0,("+varstr(D)+","+yz+","+ts+"),dp;");
     1043    ts[size(ts)+1] = newvart + string(i);
     1044  }
     1045  def Efalsebase = ring(crl(list(),newas+xsl+yz+ts,"dp"));
     1046  setring Efalsebase;
    10441047  qring Efalse = std(imap(D,dquot));
    10451048  def f = imap(Bfalse,Plist)[4];
     
    10671070      "This is cc";cc;
    10681071  }
    1069   execute("ring E = (0,"+varstr(D)+"),("+yz+","+ts+"),dp;");
     1072  def E = ring(crl(newas+xsl,yz+ts,"dp"));
     1073  setring E;
    10701074  def d = imap(D,d);
    10711075  number ss = leadcoef(imap(D,ss));
     
    10751079  map mapvidjet = E,vidjet[nrx+1..ncols(vidjet)];
    10761080  G = mapvidjet(G);
    1077   execute("matrix T["+string(nry+1)+"][1] = "+ts+";");
    1078   execute("ideal tid = "+ts+";");
     1081  execute("matrix T[nry+1][1] = "+string(ts)+";");
     1082  execute("ideal tid = "+string(ts)+";");
    10791083  matrix ymy[nry+1][1];
    10801084  for(i=1;i<=nry+1;i++)
     
    13031307      "And this is the map:";
    13041308    }
    1305     execute("ideal themap = vidjet[nrx+1..size(vidjet)],"+t+",invssp;");
     1309    //execute("ideal themap = vidjet[nrx+1..size(vidjet)],"+t+",invssp;");
    13061310    invssp = 1/invssp;
    13071311    if(debug)
     
    13111315    string zz = "Z";
    13121316    def newvar2 = findnewvar(zz);
    1313     execute("ring Efinalbase = (0,"+parstr(E)+"),("+varstr(E)+","+newvar2+"),dp;");
     1317    //execute("ring Efinalbase = (0,"+parstr(E)+"),("+varstr(E)+","+newvar2+"),dp;");
    13141318    def q = imap(E,e2);
    13151319    poly teta = var(nvars(Efinalbase)) * imap(E,ss)*imap(E,ssp) - 1;
     
    13601364  y4 = 1+a4*x2+(a2^2+a3)*x2^10+(a1+a2+a3+a4)*x1*x2^11;
    13611365 
    1362   string as,xs;
     1366  list as,xs;
    13631367  if(nra != 0)
    13641368  {
    1365     as = string(var(1));
    1366     for( int i=2;i<=nra;i++)
    1367     {
    1368       as = as+","+string(var(i));
     1369    for(int i=1;i<=nra;i++)
     1370    {
     1371      as[size(as)+1] = string(var(i));
    13691372    }
    13701373  }
    13711374  if(nrx!=0)
    13721375  {
    1373     xs = string(var(nra+1));
    1374     for(int i=nra+2;i<=nra+nrx;i++)
    1375     {
    1376       xs = xs+","+string(var(i));
     1376    for(int i=nra+1;i<=nra+nrx;i++)
     1377    {
     1378      xs[size(xs)+1] = string(var(i));
    13771379    }
    13781380  }
Note: See TracChangeset for help on using the changeset viewer.