Changeset f0df61e in git


Ignore:
Timestamp:
Dec 11, 2000, 3:26:43 PM (23 years ago)
Author:
Mathias Schulze <mschulze@…>
Branches:
(u'spielwiese', '4a9821a93ffdc22a6696668bd4f6b8c9de3e6c5f')
Children:
1ed86cb72e1ab73da24e5b2690e172addcdc93f7
Parents:
bde46a274a10e7a9dd0db93b7814c2ebaae0af74
Message:
*** empty log message ***


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

Legend:

Unmodified
Added
Removed
  • Singular/LIB/reesclos.lib

    rbde46a rf0df61e  
    33///////////////////////////////////////////////////////////////////////////////
    44
    5 version="$id reesclos.lib,v 1.28 2000/10/19 hirsch Exp $";
     5version="$id reesclos.lib,v 1.30 2000/12/5 hirsch Exp $";
    66
    77info="
    88LIBRARY:     reesclos.lib
    9 AUTHOR:      Tobias Hirsch, email: hirsch@mathematik.uni-kl.de
    10 PROCEDURES:  ReesAlgebra  - computes the Rees Algebra of an ideal
    11              NormalI      - computes the integral closure of an ideal using its
    12                             Rees Algebra
     9AUTHOR:      Tobias Hirsch, email: hirsch@math.tu-cottbus.de
     10
     11OVERVIEW:
     12 A library to compute the integral closure of an ideal I in a polynomial ring
     13 R=k[x(1),...,x(n)] using the Rees Algebra R[It] of I. It computes the integral
     14 closure of R[It] (in the same manner as done in the library 'normal.lib');
     15 which is a graded subalgebra of R[t]. The degree-k-component is the integral
     16 closure of the k-th power of I.
     17
     18PROCEDURES: 
     19 ReesAlgebra(I);        computes the Rees Algebra of an ideal I
     20 NormalI(I[,p[,r]]);    computes the integral closure of an ideal I using R[It]
    1321";
    1422
    15 LIB "normal.lib";       // for HomJJ
     23LIB "normal.lib";       // for HomJJ
     24LIB "standard.lib";     // for groebner
    1625
    1726///////////////////////////////////////////////////////////////////////////////
    1827
    1928proc ReesAlgebra (ideal I)
    20 "USAGE:   ReesAlgebra (I); I = ideal
     29"USAGE:    ReesAlgebra (I); I = ideal
    2130COMPUTE:  The Rees algebra R[I*t] as an affine ring, where I is an ideal in R
    2231RETURN:   a list containing two rings:
     
    3645  ideal m = maxideal(1);
    3746
    38 
     47 
    3948  // Create a new ring with variables for each generator of I
    4049
    4150  execute ("ring Rees = "+oldchar+",("+oldvar+",U(1.."+string(n)+")),dp");
    4251
    43 
     52 
    4453  // Kxt is the old ring with additional variable t
    4554  // Here I -> t*I, so the generators of I generate the subalgebra R[It] in Kxt
     
    5160  for (k=1;k<=n;k++)
    5261  {
    53     I[k]=t*I[k];
    54   }
    55 
     62    I[k]=t*I[k]; 
     63  }
     64 
    5665
    5766  // Now we map from Rees to Kxt, identity on the original variables, and
     
    6877  ideal ker = preimage(Kxt,phi,zero);
    6978  export (ker);
    70 
     79 
    7180  list result = Rees,Kxt;
    72 
     81 
    7382  return(result);
    74 
     83 
    7584}
    7685example
    7786{
     87  "EXAMPLE:"; echo=2;
    7888  ring R = 0,(x,y),dp;
    7989  ideal I = x2,xy4,y5;
     
    8494  ker;                   // R[I*t] is isomorphic to Rees/ker
    8595}
    86 
     96 
    8797
    8898////////////////////////////////////////////////////////////////////////////
     
    90100static
    91101proc ClosureRees (list L)
    92 "USAGE:   ClosureRees (L); L a list containing
    93           - a ring L[1], inside L[1] an ideal ker such that L[1]/ker is
     102"USAGE:    ClosureRees (L); L a list containing
     103          - a ring L[1], inside L[1] an ideal ker such that L[1]/ker is 
    94104            isomorphic to the Rees Algebra R[It] of an ideal I in k[x]
    95105          - a ring L[2]=k[x,t], inside L[1] an ideal mapI defining the
    96106            map L[1] --> L[2] with image R[It]
    97107COMPUTE:  quotients of elements of k[x,t] representing generators of the
    98           integral closure of R[It]
     108          integral closure of R[It] 
    99109RETURN:   a list images, the first size(images)-1 entries are the nu-
    100110          merators of the generators, the last one is the universal deno-
     
    102112"
    103113{
    104   int dblvl=printlevel-voice+2;   // toggles how much data is printed
     114  int dblvl=printlevel-voice+2;   // toggles how much data is printed 
    105115                                  // during the procedure
    106116
     
    126136  {
    127137    "// STEP 1: Compute the integral closure of R[It]";
    128   }
     138  } 
    129139
    130140  list RS;
     
    176186        list JM=groebner(sin),sin;
    177187      }
    178 
     188 
    179189      if (dim(JM[1])==0 && homog(SM[2])==1)
    180190      {
    181191        isIsoSing=1;
    182192      }
    183       J=equiRadical(JM[2]);
     193      J=equiRadical(JM[2]); 
    184194    }
    185195    else
     
    194204      }
    195205    }
    196 
     206   
    197207    if (dblvl>0)
    198208    {
     
    204214    JM =J,J;
    205215    poly nzd=SL[1];           // universal denominator for HomJJ
    206 
     216   
    207217    if (dblvl>0)
    208218    {
     
    228238    {                         // ring R(i+1)
    229239      ideal MJ=JM[2];
    230 
    231       def R(i+1)=RS[1];       // the data of and some variable decla-
     240 
     241      def R(i+1)=RS[1];       // the data of and some variable decla- 
    232242      setring R(i+1);         // rations in R(i+1) needed in STEP 2
    233243      ideal ker(i+1)=endid;
     
    237247      if (isIsoSing==0)       // fetch the singular locus if it is not
    238248      {                       // an isolated singularity
    239         list JM=mstd(simplify(phi(MJ)+ker(i+1),4));
     249        list JM=mstd(simplify(phi(MJ)+ker(i+1),4)); 
    240250      }
    241251      i++;
     
    245255  if (i==1)                     // R[It] (and thus I) was integrally
    246256  {                             // closed ==> we're already done
    247     list result="closed";
    248     return(result);
     257        list result="closed";
     258        return(result);
    249259  }
    250260
     
    261271  list preimages;          // here the fractions are stored in the
    262272                           // form var(j)=preimages[j]/preimages[length+1]
    263                            // ('=' means identification via the inclusion)
     273                           // ('=' means identification via the inclusion) 
    264274                           // the last entry corresponds to nzd in R(i)
    265275
     
    291301    for (k=i;k>1;k--)
    292302    {
    293       // clear the fraction in the representation in R(i)
    294 
    295       p=p*phi(nzd);
     303      // clear the fraction in the representation in R(i)   
     304
     305      p=p*phi(nzd);     
    296306
    297307      // compute the preimage of [p mod ker(k)] under phi in R(k-1):
     
    302312         // compute this normal form h...
    303313
    304       if (j==1)    // in the first iteration: construct S(k)=R(k)[Z], fetch
     314      if (j==1)    // in the first iteration: construct S(k)=R(k)[Z], fetch 
    305315                   // endphi (the ideal defining phi) and ker(k) and construct
    306316                   // the ideal from above
    307317      {
    308         execute ("ring S(k) = "+charstr(R(k))+",("+varstr(R(k))+",Z(1.."
    309                  +string(ncols(endphi))+")),(dp("+string(nvars(R(k)))
    310                  +"),dp("+string(ncols(endphi))+"));");
     318        execute ("ring S(k) = "+charstr(R(k))+",("+varstr(R(k))+",Z(1.."+string(ncols(endphi))+")),(dp("+string(nvars(R(k)))+"),dp("+string(ncols(endphi))+"));");
    311319        ideal endphi = imap(R(k),endphi);
    312320        ideal J = imap(R(k),ker(k));
     
    324332      }
    325333
    326       // and compute h(vars(R(k-1)))
     334         // and compute h(vars(R(k-1)))
    327335
    328336      setring R(k-1);
     
    358366
    359367  // at the end: go back to the original basering and construct gene-
    360   // rators of the closure of I
     368  // rators of the closure of I 
    361369
    362370  setring Kxt;
    363371  map psi=R(1),mapI;              // from ReesAlgebra: the map Rees->Kxt
    364372
    365   list images=psi(preimages);
    366 
     373  list images=psi(preimages);   
     374 
    367375  if (dblvl>-1)
    368376  {
     
    395403static
    396404proc ClosurePower(list images, list #)
    397 "USAGE:   ClosurePower (L [,#]);
     405"USAGE:    ClosurePower (L [,#]);
    398406          - L a list containing generators of the closure of R[It] in k[x,t]
    399407            (the first size(L)-1 elements are the numerators, the last one
    400408            is the denominator)
    401           - if # is given: #[1] is an integer, compute generators for the
     409          - if # is given: #[1] is an integer, compute generators for the 
    402410                           closure of I, I^2, ..., I^#[1]
    403411COMPUTE:  the integral closure of I, ... I^#[1]. If # is not given, compute
     
    405413          in the closure of R[It] (so this is the last one that is not just
    406414          the sum/product of the above ones).
    407 RETURN:   a list containing generators of the closure of the desired powers
    408           of I as elements of k[x,t].
     415RETURN:   a list containing generators of the closure of the desired powers 
     416          of I as elements of k[x,t]. 
    409417"
    410418{
    411   int dblvl=printlevel-voice+2;   // toggles how much data is printed
    412                                   // during the procedure
     419  int dblvl=printlevel-voice+2;   // toggles how much data is printed 
     420                                  // during the procedure 
    413421
    414422  int j,k,d,computepow;                    // some counters
     
    431439
    432440  intmat m[nvars(basering)-1][1];  // an intvec used for jet and maxdeg1
    433   intvec tw=m,1;                   // such that t has weight 1 and all
     441  intvec tw=m,1;                   // such that t has weight 1 and all 
    434442                                   // other variables have weight 0
    435443
     
    453461      }
    454462    }
    455   }
     463  } 
    456464
    457465  if (dblvl>0)
     
    485493    {
    486494      image=images[j]-jet(images[j],k-1,tw);
    487       if (image<>0)
    488       {
     495      if (image<>0)                 
     496      {                                       
    489497        image=subst(image/t^k,t,0);
    490498        if (image<>0)
     
    507515
    508516  for (k=2;k<=pow;k++)
    509   {
     517  { 
    510518    for (j=1;j<=(k div 2);j++)
    511     {
     519    { 
    512520      result[k]=result[k]+result[j]*result[k-j];
    513521    }
    514522  }
    515 
     523 
    516524  return(result);
    517525}
     
    520528
    521529proc normalI(ideal I, list #)
    522 "USAGE:   normalI (I [,p[,r]]); I an ideal, p and r optional integers
    523 COMPUTE:  the integral closure of I, ..., I^p. If p is not given, or p==0,
    524           compute the closure of all powers up to the maximum degree in t
    525           occurring in the closure of R[It] (so this is the last one that
     530"USAGE:    normalI (I [,p[,r]]); I an ideal, p and r optional integers
     531COMPUTE:  the integral closure of I, ..., I^p. If p is not given, or p==0, 
     532          compute the closure of all powers up to the maximum degree in t 
     533          occurring in the closure of R[It] (so this is the last one that 
    526534          is not just the sum/product of the above ones).
    527           If r is given and <>1, the check whether the input ideal is
     535          If r is given and <>1, the check whether the input ideal is 
    528536          already a radical ideal is omitted.
    529537RETURN:   a list containing the closure of the desired powers of I as ideals
    530           of the basering.
     538          of the basering.
     539DISPLAY:  The procedure displays more comments for higher printlevel
     540EXAMPLE:  example normalI; shows an example
    531541"
    532542{
    533   int dblvl=printlevel-voice+2;   // toggles how much data is printed
     543  int dblvl=printlevel-voice+2;   // toggles how much data is printed 
    534544                                  // during the procedure
    535545
     
    544554    {
    545555      "// Trivial case: I is a principal ideal";
    546     }
     556    } 
    547557    list result=I;
    548558    if (size(#)>0)
     
    552562        result=insert(result,I*result[k],k);
    553563      }
    554     }
     564    } 
    555565    return(result);
    556566  }
     
    584594          result=insert(result,I*result[k],k);
    585595        }
    586       }
     596      } 
    587597      return(result);
    588598    }
     
    595605    "// We start with the Rees Algebra of I:";
    596606  }
    597 
     607 
    598608  list Rees = ReesAlgebra(I);
    599609  def R(1)=Rees[1];
    600610  def Kxt=Rees[2];
    601611  setring R(1);
    602 
     612 
    603613  if (dblvl>0)
    604614  {
     
    608618    "// Now ClosureRees computes generators for the integral closure";
    609619    "// of R[It] step by step";
    610   }
     620  } 
    611621
    612622  // ClosureRees computes fractions in R[x,t] representing the generators
     
    628638      "//I is integrally closed!";
    629639    }
    630 
     640   
    631641    setring BAS;
    632642    list result=I;
     
    637647        result=insert(result,I*result[k],k);
    638648      }
    639     }
     649    } 
    640650    return(result);
    641651  }
    642 
     652   
    643653  // construct the fractions corresponding to the generators of the
    644   // closure of I and its powers, depending on # (in fact, they will
     654  // closure of I and its powers, depending on # (in fact, they will 
    645655  // not be real fractions, of course). This is done in ClosurePower.
    646656
     
    651661  setring BAS;
    652662  list result=fetch(Kxt,result);
    653   return(result);
     663  return(result); 
    654664}
    655665example
    656666{
     667  "EXAMPLE:"; echo=2;
    657668  ring R=0,(x,y),dp;
    658669  ideal I = x2,xy4,y5;
Note: See TracChangeset for help on using the changeset viewer.