Changeset 2cd0ca in git


Ignore:
Timestamp:
Feb 1, 2007, 7:39:17 PM (17 years ago)
Author:
Kai Krüger <krueger@…>
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
07b1cfb3569d892601e457e29b9082efcebeb8fd
Parents:
ec69aa9f2368fd5481b412fc4b4a37844f40d997
Message:
*anne: corrected problem in intersectionDiv which led to incorrect identification of C-components in certain situations (=Ignacio's 2nd Bug)


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

Legend:

Unmodified
Added
Removed
  • Singular/LIB/reszeta.lib

    rec69aa r2cd0ca  
    11//////////////////////////////////////////////////////////////////////////////
    2 version="$Id: reszeta.lib,v 1.9 2006-07-25 17:54:29 Singular Exp $";
     2version="$Id: reszeta.lib,v 1.10 2007-02-01 18:39:17 krueger Exp $";
    33category="Commutative Algebra";
    44info="
     
    17581758RETURN:   list l
    17591759          if a is not present:
    1760           l[1]: string specifying the Denef-Loeser zeta function
     1760          l[1]: string specifying the Denef-Loeser zeta function 
    17611761          l[2]: string specifying characteristic polynomial of monodromy,
    17621762                if "A" was specified
     
    32963296   iden=tmpiden;                      // store the modified divisor list
    32973297   kill tmpiden;                      // and clean up temporary objects
     3298iden;
    32983299//---------------------------------------------------------------------------
    32993300// Now we have decomposed everything into irreducible components over Q,
     
    40624063                if k==0, no divisor corresponding to i,j
    40634064          l[2]: list ll, where each entry of ll is a list of intvecs
    4064                 entry i,j in list ll[k] implies BO[4][j] of chart i is divisor k
     4065                entry i,j in list ll[k] implies BO[4][j] of chart i
     4066                is divisor k
    40654067          l[3]: list L
    40664068EXAMPLE:  example collectDiv;   shows an example
     
    44274429//the curve the total transform is n.c.
    44284430//this occurs here in r[2][5]
    4429    list re=resolve(I,0);
     4431   list re=resolve(I,1);
    44304432   list di=collectDiv(re);
    44314433   di;
     
    48314833   if(size(algext)>0)
    48324834   {
     4835//--- size(algext)>0: case of algebraic extension of base field
    48334836      if(defined(tstr)){kill tstr;}
    48344837      string tstr="ring So1=(0,t),("+varstr(L[2][o1])+"),("+ordstr(L[2][o1])+");";
     
    48684871   else
    48694872   {
     4873//--- size(algext)==0: no algebraic extension of base needed
    48704874      def So1=L[2][o1];
    48714875      setring So1;
     
    48824886      }
    48834887     // id1=radical(id1);
    4884 
    48854888      ideal id2=1;
    48864889      list idlist;
     
    48894892      intvec nE;
    48904893      idlist[1]=list(id1,id2,nE);
    4891    }
     4894   }       
    48924895   if(defined(tli)){kill tli;}
    48934896   list tli;
     
    49004903   for(m=1;m<=size(idlist);m++)
    49014904   {
     4905//!!! Duplicate Block!!! All changes also needed below!!!
     4906//!!! no subprocedure due to large data overhead!!!
     4907//--- run through all ideals to be fetched
    49024908      id1=idlist[m][1];
    49034909      id2=idlist[m][2];
     
    49054911      for(i=branchPos-1;i<=size(BO[4]);i++)
    49064912      {
     4913//--- run through all relevant exceptional divisors
    49074914        if(size(reduce(BO[4][i],std(id1+BO[1])))==0)
    49084915        {
     4916//--- V(id1) is contained in except. div. i in this chart
    49094917           if(size(reduce(id1,std(BO[4][i])))!=0)
    49104918           {
     4919//--- V(id1) does not equal except. div. i of this chart
    49114920             Etemp=BO[4][i];
    49124921             if(npars(basering)>0)
    49134922             {
     4923//--- we are in an algebraic extension of the base field
    49144924                if(defined(prtemp)){kill prtemp;}
    4915                 list prtemp=minAssGTZ(BO[4][i]);
     4925                list prtemp=minAssGTZ(BO[4][i]);  // C-comp. of except. div.
     4926                j=1;                   
    49164927                if(size(prtemp)>1)
    49174928                {
     4929//--- more than 1 component
    49184930                  Etemp=ideal(1);
    49194931                  for(j=1;j<=size(prtemp);j++)
    49204932                  {
     4933//--- find correct component
    49214934                     if(size(reduce(prtemp[j],std(id1)))==0)
    49224935                     {
     
    49304943                  }
    49314944                }
     4945                prtemp=delete(prtemp,j); // remove this comp. from list
     4946                while(size(prtemp)>1)
     4947                {
     4948//--- collect all the others into prtemp[1]
     4949                  prtemp[1]=intersect(prtemp[1],prtemp[size(prtemp)]);
     4950                  prtemp=delete(prtemp,size(prtemp));
     4951                }
    49324952             }
     4953//--- determine tli[1] and tli[2] such that
     4954//--- V(id1) \cap D(id2) = V(tli[1]) \cap D(tli[2]) \cap BO[4][i]
     4955//--- inside V(BO[1]) (and if necessary inside V(BO[1]+BO[2]))
    49334956             if(inJ)
    49344957             {
    4935                 tli=findTrans(id1+BO[2],Etemp,notE,BO[2]);
     4958                tli=findTrans(id1+BO[2]+BO[1],Etemp,notE,BO[2]);
    49364959             }
    49374960             else
    49384961             {
    4939                 tli=findTrans(id1,Etemp,notE);
     4962                tli=findTrans(id1+BO[1],Etemp,notE);
     4963             }
     4964             if(npars(basering)>0)
     4965             {
     4966//--- in algebraic extension: make sure we stay outside the other components
     4967                if(size(prtemp)>0)
     4968                {
     4969                   for(j=1;j<=ncols(prtemp[1]);j++)
     4970                   {
     4971//--- find the (univariate) generator of prtemp[1] which is the remaining
     4972//--- factor from the factorization over the extension field
     4973                      if(size(reduce(prtemp[1][j],std(id1)))>0)
     4974                      {
     4975                         tli[2]=tli[2]*prtemp[1][j];
     4976                      }
     4977                   }
     4978                }
    49404979             }
    49414980           }
    49424981           else
    49434982           {
     4983//--- V(id1) equals except. div. i of this chart
    49444984             tli[1]=ideal(0);
    49454985             tli[2]=ideal(1);
     
    49655005        idlist[m][3]=nE;
    49665006      }
     5007//!!! End of Duplicate Block !!!!
    49675008   }
    49685009   if(o1>1)
     
    50165057         if(defined(phi)) { kill phi; }
    50175058         map phi=T,lastMap;
     5059//--- now do the actual blowing down ...
    50185060         for(m=1;m<=size(idlist);m++)
    50195061         {
     5062//--- ... for each entry of idlist separately
    50205063            if(defined(id1)){kill id1;}
    50215064            if(defined(id2)){kill id2;}
    50225065            ideal id1=idlist[m][1]+BO[1];
    5023             ideal id2=idlist[m][2]+BO[1];
     5066            ideal id2=idlist[m][2];
    50245067            nE=idlist[m][3];
     5068            if(defined(debug_fetchInTree)>0)
     5069            {
     5070               "Blowing down entry",m,"of idlist:";
     5071               setring S;
     5072               "Abbildung:";phi;
     5073               "before preimage";
     5074               id1;
     5075               id2;
     5076            }
    50255077            setring T;
    50265078            ideal id1=preimage(S,phi,id1);
    50275079            ideal id2=preimage(S,phi,id2);
     5080            if(defined(debug_fetchInTree)>0)
     5081            {
     5082               "after preimage";
     5083               id1;
     5084               id2;
     5085            }
     5086            if(size(id2)==0)
     5087            {
     5088//--- preimage of (principal ideal) id2 was zero, i.e.
     5089//--- generator of previous id2 not in image
     5090              setring S;
     5091//--- it might just be one offending factor ==> factorize
     5092              ideal id2factors=factorize(id2[1])[1];
     5093              int zzz=size(id2factors);
     5094              ideal curfactor;
     5095              setring T;
     5096              id2=ideal(1);
     5097              ideal curfactor;
     5098              for(int mm=1;mm<=zzz;mm++)
     5099              {
     5100//--- blow down each factor separately
     5101                 setring S;
     5102                 curfactor=id2factors[mm];
     5103                 setring T;
     5104                 curfactor=preimage(S,phi,curfactor);
     5105                 if(size(curfactor)>0)
     5106                 {
     5107                    id2[1]=id2[1]*curfactor[1];
     5108                 }
     5109              }
     5110              kill curfactor;
     5111              setring S;
     5112              kill curfactor;
     5113              kill id2factors;
     5114              setring T;
     5115              kill mm;
     5116              kill zzz;
     5117              if(defined(debug_fetchInTree)>0)
     5118              {
     5119                 "corrected id2:";
     5120                 id2;
     5121              }
     5122            }
    50285123            idlist[m]=list(id1,id2,nE);
    50295124            kill id1,id2;
     
    50355130         for(m=1;m<=size(idlist);m++)
    50365131         {
     5132//!!! Duplicate Block!!! All changes also needed above!!!
     5133//!!! no subprocedure due to large data overhead!!!
     5134//--- run through all ideals to be fetched
    50375135            if(defined(id1)) {kill id1;}
    50385136            if(defined(id2)) {kill id2;}
     
    50455143            for(i=branchPos-1;i<=size(BO[4]);i++)
    50465144            {
     5145//--- run through all relevant exceptional divisors
    50475146               if(size(reduce(BO[4][i],std(id1)))==0)
    50485147               {
     5148//--- V(id1) is contained in except. div. i in this chart
    50495149                  if(size(reduce(id1,std(BO[4][i])))!=0)
    50505150                  {
     5151//--- V(id1) does not equal except. div. i of this chart
    50515152                     if(defined(Etemp)) {kill Etemp;}
    50525153                     ideal Etemp=BO[4][i];
    50535154                     if(npars(basering)>0)
    50545155                     {
     5156//--- we are in an algebraic extension of the base field
    50555157                        if(defined(prtemp)){kill prtemp;}
    5056                         list prtemp=minAssGTZ(BO[4][i]);
     5158                        list prtemp=minAssGTZ(BO[4][i]); // C-comp.except.div.
    50575159                        if(size(prtemp)>1)
    50585160                        {
     5161//--- more than 1 component
    50595162                           Etemp=ideal(1);
    50605163                           for(j=1;j<=size(prtemp);j++)
    50615164                           {
     5165//--- find correct component
    50625166                               if(size(reduce(prtemp[j],std(id1)))==0)
    50635167                               {
     
    50715175                           }
    50725176                        }
     5177                        prtemp=delete(prtemp,j); // remove this comp. from list
     5178                        while(size(prtemp)>1)
     5179                        {
     5180//--- collect all the others into prtemp[1]
     5181                           prtemp[1]=intersect(prtemp[1],prtemp[size(prtemp)]);
     5182                           prtemp=delete(prtemp,size(prtemp));
     5183                        }
    50735184                     }
    50745185                     if(defined(tli)) {kill tli;}
     5186//--- determine tli[1] and tli[2] such that
     5187//--- V(id1) \cap D(id2) = V(tli[1]) \cap D(tli[2]) \cap BO[4][i]
     5188//--- inside V(BO[1]) (and if necessary inside V(BO[1]+BO[2]))
    50755189                     if(inJ)
    50765190                     {
    5077                         def tli=findTrans(id1+BO[2],Etemp,notE,BO[2]);
     5191                        def tli=findTrans(id1+BO[2]+BO[1],Etemp,notE,BO[2]);
    50785192                     }
    50795193                     else
    50805194                     {
    5081                         def tli=findTrans(id1,Etemp,notE);
     5195                        def tli=findTrans(id1+BO[1],Etemp,notE);
    50825196                     }
     5197                    if(npars(basering)>0)
     5198                    {
     5199//--- in algebraic extension: make sure we stay outside the other components
     5200                      if(size(prtemp)>0)
     5201                      {
     5202                         for(j=1;j<=ncols(prtemp[1]);j++)
     5203                         {
     5204//--- find the (univariate) generator of prtemp[1] which is the remaining
     5205//--- factor from the factorization over the extension field
     5206                           if(size(reduce(prtemp[1][j],std(id1)))>0)
     5207                           {
     5208                              tli[2]=tli[2]*prtemp[1][j];
     5209                           }
     5210                         }
     5211                      }
     5212                    }
    50835213                  }
    50845214                  else
     
    51075237               idlist[m][3]=nE;
    51085238            }
     5239//!!! End of Duplicate Block !!!!
    51095240         }
    51105241         kill S;
     
    51155246         }
    51165247      }
     5248      if(defined(debug_fetchInTree)>0)
     5249      {
     5250        "idlist after current blow down step:";
     5251        idlist;
     5252      }
     5253   }
     5254   if(defined(debug_fetchInTree)>0)
     5255   {
     5256      "Blowing down ended";
    51175257   }
    51185258//----------------------------------------------------------------------------
     
    51225262   if(m1==comPa)
    51235263   {
     5264//--- no further blow ups needed
    51245265      if(size(algext)==0)
    51255266      {
     5267//--- no field extension ==> we are done
    51265268        return(idlist[1][1]);
    51275269      }
    51285270      else
    51295271      {
     5272//--- field extension ==> we need to encode the result
    51305273        list retlist;
    51315274        for(m=1;m<=size(idlist);m++)
     
    51365279      }
    51375280   }
     5281//--- we need to blow up
    51385282   if(defined(path_m1)) { kill path_m1; }
    51395283   matrix path_m1=imap(Sm1,path);
     
    51505294   while(i<size(path_togo))
    51515295   {
     5296//--- we need to blow up following the path path_togo through the tree
    51525297      def S=basering;
    51535298      if(defined(T)){kill T;}
    51545299      if(size(algext)>0)
    51555300      {
     5301//--- in an algebraic extension of the base field
    51565302         if(defined(T0)){kill T0;}
    51575303         def T0=L[2][path_togo[i+1]];
     
    51695315         map phi=S,lastMap;
    51705316         list idlist=phi(idlist);
     5317         if(defined(debug_fetchInTree)>0)
     5318         {
     5319           "in blowing up (algebraic extension case):";
     5320           phi;
     5321           idlist;
     5322         }
    51715323      }
    51725324      else
     
    51805332         idlist[1][1]=radical(idlist[1][1]);
    51815333         idlist[1][2]=radical(idlist[1][2]);
     5334         if(defined(debug_fetchInTree)>0)
     5335         {
     5336           "in blowing up (case without field extension):";
     5337           phi;
     5338           idlist;
     5339         }
    51825340      }
    51835341      for(m=1;m<=size(idlist);m++)
    51845342      {
     5343//--- get rid of new exceptional divisor
    51855344         idlist[m][1]=sat(idlist[m][1]+BO[1],BO[4][size(BO[4])])[1];
    51865345         idlist[m][2]=sat(idlist[m][2],BO[4][size(BO[4])])[1];
     5346      }
     5347      if(defined(debug_fetchInTree)>0)
     5348      {
     5349        "after saturation:";
     5350        idlist;
    51875351      }
    51885352      if((size(algext)==0)&&(deg(std(idlist[1][1])[1])==0))
     
    51955359      i++;
    51965360   }
     5361   if(defined(debug_fetchInTree)>0)
     5362   {
     5363      "End of blowing up steps";
     5364   }
     5365//---------------------------------------------------------------------------
     5366// prepare results for returning them
     5367//---------------------------------------------------------------------------
    51975368   ideal E,bla;
    51985369   intvec kv;
Note: See TracChangeset for help on using the changeset viewer.