Changeset b1d1e8c in git


Ignore:
Timestamp:
May 16, 2000, 2:19:05 PM (24 years ago)
Author:
Gerhard Pfister <pfister@…>
Branches:
(u'fieker-DuVal', '117eb8c30fc9e991c4decca4832b1d19036c4c65')(u'spielwiese', 'b21a664aa22dc6e196223af8a74ad4885e83547c')
Children:
f9e276dfa9ea5a88fde881128f4a39433bdd9028
Parents:
f70f9335086066082a2d6e460198f2b1eeb2b6f3
Message:
quotMin und equidim schneller gemacht


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

Legend:

Unmodified
Added
Removed
  • Singular/LIB/primdec.lib

    rf70f933 rb1d1e8c  
    1 // $Id: primdec.lib,v 1.65 2000-05-15 14:29:22 Singular Exp $
     1// $Id: primdec.lib,v 1.66 2000-05-16 12:19:05 pfister Exp $
    22///////////////////////////////////////////////////////////////////////////////
    33// primdec.lib                                                               //
     
    1111///////////////////////////////////////////////////////////////////////////////
    1212
    13 version="$Id: primdec.lib,v 1.65 2000-05-15 14:29:22 Singular Exp $";
     13version="$Id: primdec.lib,v 1.66 2000-05-16 12:19:05 pfister Exp $";
    1414info="
    1515LIBRARY: primdec.lib   PROCEDURES FOR PRIMARY DECOMPOSITION
     
    200200
    201201   ideal star=quotient(laedi,f);
     202
     203   if(specialIdealsEqual(star,laedi))
     204   {
     205      l=star,fac,f;
     206      return(l);     
     207   }
     208 
    202209   action=1;
    203210
     
    221228            }
    222229         }
     230
    223231         verg=quotient(laedi,g);
    224232
     
    466474         {
    467475           if ( voice >=15 )
    468            {
     476           { 
    469477              "// WARNING: The characteristic is perhaps too small to use";
    470478              "// the algorithm of Gianni/Trager/Zacharias.";
     
    475483           {
    476484              f=f*char(basering);
    477               e=e/char(basering);
     485              e=e/char(basering); 
    478486           }
    479 
     487       
    480488         }
    481489         t=leadcoef(i[m])*e*var(n)^f+(i[m]-lead(i[m]))/var(n)^((e-1)*f);
     
    486494         }
    487495         if(f>1)
    488          {
     496         {       
    489497            act=factorize(t);
    490498            if(size(act[1])>2)
    491499            {
    492               return(ideal(0));
     500              return(ideal(0));   
    493501            }
    494502            if(deg(act[1][2])>1)
    495503            {
    496               return(ideal(0));
     504              return(ideal(0));   
    497505            }
    498506            t=act[1][2];
     
    11831191   string @id=string(h);
    11841192   execute("ring @r=0,("+@pa+","+varstr(bsr)+"),(C,dp);");
    1185    execute("ideal @i="+@id+";");
     1193   execute ("ideal @i="+@id+";");
    11861194   poly @p=lcmP(@i);
    11871195   string @ps=string(@p);
    11881196   setring bsr;
    1189    execute("poly @p="+@ps+";");
     1197   execute ("poly @p="+@ps+";");
    11901198   return(@p);
    11911199}
     
    15621570   i=qr[1];
    15631571
    1564    execute("ring gnir = ("+charstr(basering)+"),("+varstr(basering)+"),("
     1572   execute ("ring gnir = ("+charstr(basering)+"),("+varstr(basering)+"),("
    15651573             +ordstr(basering)+");");
    15661574
     
    15971605         setring @P;
    15981606        // kill gnir;
    1599          execute("ring gnir1 = ("+charstr(basering)+"),
     1607         execute ("ring gnir1 = ("+charstr(basering)+"),
    16001608                              ("+varstr(basering)+"),(C,lp);");
    16011609         ideal i=fetch(@P,i);
     
    17651773///////////////////////////////////////////////////////////////////////////////
    17661774proc equidim(ideal i,list #)
    1767 "USAGE:  equidim(i) or equidim(i,1) ; i ideal
    1768          equidim(i,1) uses the algorithm of Eisenbud, Hunecke and Vasconcelos
     1775"USAGE:  equidim(i) or equidim(i,1) ; i ideal 
     1776         equidim(i,1) uses the algorithm of Eisenbud, Hunecke and Vasconcelos         
    17691777 RETURN: list = list of equidimensional ideals a1,...,as such that
    17701778         i is the intersection of a1,...,as. as is the equidimensional
     
    17971805     if(a==1)
    17981806     {
    1799        attrib(j,"isSB",1);
     1807       attrib(j,"isSB",1); 
    18001808     }
    18011809     else
     
    18091817     ideal i=imap(P,i);
    18101818     ideal j=groebner(i);
    1811   }
     1819  } 
    18121820  if(homo==1)
    18131821  {
     
    18291837  if(m==0)
    18301838  {
    1831      ideal k=equidimMax(j);
     1839     ideal k=equidimMax(j); 
    18321840  }
    18331841  else
    18341842  {
    1835      ideal k=equidimMaxEHV(j);
     1843     ideal k=equidimMaxEHV(j); 
    18361844  }
    18371845  if(size(reduce(k,j,1))==0)
     
    18431851  }
    18441852
    1845   option(returnSB);
     1853  option(returnSB); 
    18461854  j=quotient(i,k);
    18471855  option(noreturnSB);
    18481856
    1849   list equi=equidim(j);
     1857  list equi=equidim(j); 
    18501858  if(deg(equi[size(equi)][1])<=0)
    18511859  {
     
    18701878///////////////////////////////////////////////////////////////////////////////
    18711879proc equidimMax(ideal i)
    1872 "USAGE:  equidimMax(i); i ideal
     1880"USAGE:  equidimMax(i); i ideal           
    18731881 RETURN:  ideal = ideal of equidimensional locus
    18741882 EXAMPLE: example equidimMax; shows an example
     
    18821890  int a=attrib(i,"isSB");
    18831891  int homo=homog(i);
    1884 
     1892   
    18851893  if(((homo==1)||(a==1))&&(find(ordstr(basering),"l")==0)
    18861894                                &&(find(ordstr(basering),"s")==0))
     
    18921900     if(a==1)
    18931901     {
    1894        attrib(j,"isSB",1);
     1902       attrib(j,"isSB",1); 
    18951903     }
    18961904     else
     
    19281936  if(homo==1)
    19291937  {
    1930      ideal j=std(imap(gnir,i),hil,w);
     1938     ideal j=std(imap(gnir,j),hil,w);
    19311939  }
    19321940  else
    19331941  {
    1934      ideal j=groebner(imap(gnir,i));
     1942     ideal j=groebner(imap(gnir,j));
    19351943  }
    19361944  string quotring=prepareQuotientring(nvars(basering)-indep[1][3]);
     
    19491957
    19501958  list l=minSat(j,h);
    1951   equ=l[1];
    1952   attrib(equ,"isSB",1);
    1953 
    1954   j=std(j,l[2]);
    1955   if(dim(equ)==dim(j))
    1956   {
    1957     equi=equidimMax(j);
    1958     equ=interred(intersect(equ,equi));
    1959   }
     1959 
     1960  if(deg(l[2])>0)
     1961  {
     1962    equ=l[1];
     1963    attrib(equ,"isSB",1);
     1964    j=std(j,l[2]);
     1965
     1966    if(dim(equ)==dim(j))
     1967    {
     1968      equi=equidimMax(j);
     1969      equ=interred(intersect(equ,equi));
     1970    }
     1971  }
     1972  else
     1973  {
     1974    equ=i;
     1975  }
     1976
    19601977  setring P;
    19611978  eq=imap(gnir,equ);
     
    22132230  else
    22142231  {
    2215      execute("ring @Phelp=("+charstr(gnir)+"),("+varstr(gnir)+"),(C,dp);");
     2232     execute( "ring @Phelp=("+charstr(gnir)+"),("+varstr(gnir)+"),(C,dp);");
    22162233  }
    22172234
     
    25522569           //K[var(nnp+1),..,var(nva)]) are collected in the list h,
    25532570           //we need their ggt, gh, because of the following:
    2554            //let (j:gh^n)=(j:gh^infinity) then
     2571           //let (j:gh^n)=(j:gh^infinity) then 
    25552572           //j*K(var(nnp+1),..,var(nva))[..the rest..]
    25562573           //intersected with K[var(1),...,var(nva)] is (j:gh^n)
     
    25982615
    25992616
    2600            //we need the intersection of the ideals in the list quprimary with
     2617           //we need the intersection of the ideals in the list quprimary with 
    26012618           //the polynomialring, i.e. let q=(f1,...,fr) in the quotientring
    26022619           //such an ideal but fi polynomials, then the intersection of q with
    2603            //the polynomialring is the saturation of the ideal generated by
     2620           //the polynomialring is the saturation of the ideal generated by 
    26042621           //f1,...,fr with respect toh which is the lcm of the leading
    26052622           //coefficients of the fi considered in the quotientring:
     
    42544271"USAGE:   primdecGTZ(i); i ideal
    42554272RETURN:  a list, say pr, of primary ideals and their associated primes
    4256          pr[i][1], resp. pr[i][2] is the i-th primary resp. prime component
    4257 NOTE:    Algorithm of Gianni, Traeger, Zacharias
    4258          designed for characteristic 0, works also in char k > 0, if it
     4273         pr[i][1], resp. pr[i][2] is the i-th primary resp. prime component 
     4274NOTE:    Algorithm of Gianni, Traeger, Zacharias 
     4275         designed for characteristic 0, works also in char k > 0, if it 
    42594276         terminates (may result in an infinite loop in small characteristic!)
    42604277EXAMPLE: example primdecGTZ; shows an example
     
    42814298         if c=3, minAssGTZ and facstd is used
    42824299RETURN:  a list, say pr, of primary ideals and their associated primes
    4283          pr[i][1], resp. pr[i][2] is the i-th primary resp. prime component
     4300         pr[i][1], resp. pr[i][2] is the i-th primary resp. prime component 
    42844301NOTE:    Algorithm of Shimoyama-Yokoyama
    42854302         implemented for characteristic 0, works also in char k > 0,
     
    43524369proc equiRadical(ideal i)
    43534370"USAGE:   equiRadical(i); i ideal
    4354 RETURN:  ideal, intersection of associated primes of i of maximal  dimension
    4355 NOTE:    designed for characteristic 0, works also in char k > 0 if it
     4371RETURN:  ideal, intersection of associated primes of i of maximal  dimension 
     4372NOTE:    designed for characteristic 0, works also in char k > 0 if it 
    43564373         terminates, may result in an infinite loop in small characteristic
    43574374EXAMPLE: example equiRadical; shows an example
     
    43734390"USAGE:   radical(i); i ideal
    43744391RETURN:  ideal = the radical of i
    4375 NOTE:    a combination of the algorithms of Krick/Logar and
     4392NOTE:    a combination of the algorithms of Krick/Logar and 
    43764393         Eisenbud/Huneke/Vasconcelos
    4377          designed for characteristic 0, works also in char k > 0 if it
     4394         designed for characteristic 0, works also in char k > 0 if it 
    43784395         terminates, may result in an infinite loop in small characteristic
    43794396EXAMPLE: example radical; shows an example
Note: See TracChangeset for help on using the changeset viewer.