Changeset 4bd42d3 in git


Ignore:
Timestamp:
Aug 3, 2006, 9:31:21 AM (17 years ago)
Author:
Hans Schönemann <hannes@…>
Branches:
(u'spielwiese', 'd1b01e9d51ade4b46b745d3bada5c5f3696be3a8')
Children:
275c99362939acb50d5416fda2cd3dc44e87bf36
Parents:
f6f1dbfc1e8487ccbf1ca0d7a3d2600069315a9f
Message:
*gmg: blowup0


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

Legend:

Unmodified
Added
Removed
  • Singular/LIB/elim.lib

    rf6f1db r4bd42d3  
    1 // $Id: elim.lib,v 1.19 2006-07-25 17:54:26 Singular Exp $
     1// $Id: elim.lib,v 1.20 2006-08-03 07:31:21 Singular Exp $
    22// (GMG, last modified 22.06.96)
    33///////////////////////////////////////////////////////////////////////////////
    4 version="$Id: elim.lib,v 1.19 2006-07-25 17:54:26 Singular Exp $";
     4version="$Id: elim.lib,v 1.20 2006-08-03 07:31:21 Singular Exp $";
    55category="Commutative Algebra";
    66info="
     
    2424///////////////////////////////////////////////////////////////////////////////
    2525
    26 proc blowup0 (ideal j,list #)
    27 "USAGE:   blowup0(j[,s1,s2]); j ideal, s1,s2 nonempty strings
    28 CREATE:  Create a presentation of the blowup ring of j
    29 RETURN:  no return value
    30 NOTE:    s1 and s2 are used to give names to the blownup ring and the blownup
    31          ideal (default: s1=\"j\", s2=\"A\")
    32          Assume R = char,x(1..n),ord is the basering of j, and s1=\"j\", s2=\"A\"
    33          then the procedure creates a new ring with name Bl_jR
    34          (equal to R[A,B,...])
    35                Bl_jR = char,(A,B,...,x(1..n)),(dp(k),ord)
    36          with k=ncols(j) new variables A,B,... and ordering wp(d1..dk) if j is
    37          homogeneous with deg(j[i])=di resp. dp otherwise for these vars.
    38          If k>26 or size(s2)>1, say s2=\"A()\", the new vars are A(1),...,A(k).
    39          Let j_ be the kernel of the ring map Bl_jR -> R defined by A(i)->j[i],
    40          x(i)->x(i), then the quotient ring Bl_jR/j_ is the blowup ring of j
    41          in R (being isomorphic to R+j+j^2+...). Moreover the procedure creates
    42          a std basis of j_ with name j_ in Bl_jR.
    43          This proc uses 'execute' or calls a procedure using 'execute'.
    44 DISPLAY: printlevel >=0: explain created objects (default)
     26proc blowup0 (ideal J,ideal C, list #)
     27"USAGE:   blowup0(J,C [,W]); J,C,W ideals
     28@*       C = ideal of center of blowup, J = ideal to be blown up,
     29         W = ideal of ambient space
     30ASSUME:  inclusion of ideals : W in J, J in C.
     31         If not, the procedure replaces J by J+W and C by C+J+W
     32RETURN:  a ring, say B, containing the ideals C,J,W and the ideals
     33@*         - bR (ideal defining the blown up basering)
     34@*         - aS (ideal of blown up ambient space)
     35@*         - eD (ideal of exceptional divisor)
     36@*         - tT (ideal of total transform)
     37@*         - sT (ideal of strict transform)
     38@*         - bM (ideal of the blowup map from basering to B)
     39@*       such that B/bR is isomorphic to the blowup ring BC.
     40PURPOSE: compute the projective blowup of the basering in the center C, the
     41         exceptional locus, the total and strict tranform of J,
     42         and the blowup map.
     43         The projective blowup is a presentation of the blowup ring
     44         BC = R[C] = R + t*C + t^2*C^2 + ... (also called Rees ring) of the
     45         ideal C in the ring basering R.
     46THEORY:  If basering = K[x1,...,xn] and C = <f1,...,fk> then let
     47         B = K[x1,...,xn,y1,...,yk] and aS the preimage in B of W
     48         under the map B -> K[x1,...,xn,t], xi -> xi, yi -> t*fi.
     49         aS is homogeneous in the variables yi and defines a variety
     50         Z=V(aS) in  A^n x P^(k-1), the ambient space of the blowup of V(W).
     51         The projection Z -> A^n is an isomorphism outside the preimage
     52         of the center V(C) in A^n and is called the blowup of the center.
     53         The preimage of V(C) is called the exceptional set, the preimage of
     54         V(J) is called the total transform of V(J). The strict transform
     55         is the closure of (total transform - exceptional set).
     56@*       If C = <x1,...,xn> then aS = <yi*xj - yj*xi | i,j=1,...,n>
     57         and Z is the blowup of A^n in 0, the exceptional set is P^(k-1).
     58NOTE:    The procedure creates a new ring with variables y(1..k) and x(1..n)
     59         where n=nvars(basering) and k=ncols(C). The ordering is a block
     60         ordering where the x-block has the ordering of the basering and
     61         the y-block has ordering dp if C is not homogeneous
     62         resp. the weighted ordering wp(b1,...bk) if C is homogeneous
     63         with deg(C[i])=bi.
     64SEE ALSO:blowUp from resolve.lib
    4565EXAMPLE: example blowup0; shows examples
    4666"{
    47    string bsr = nameof(basering);
    4867   def br = basering;
    49    string cr,vr,o = charstr(br),varstr(br),ordstr(br);
    50    int n,k,i = nvars(br),ncols(j),0;
    51    int p = printlevel-voice+3;  // p=printlevel+1 (default: p=1)
    52 //---------------- create coordinate ring of blown up space -------------------
    53    if( size(#)==0 ) { #[1] = "j"; #[2] = "A"; }
    54    if( size(#)==1 ) { #[2] = "A"; }
    55    if( k<=26 and size(#[2])==1 ) { string nv = A_Z(#[2],k)+","; }
    56    else { string nv = (#[2])[1]+"(1.."+string(k)+"),"; }
    57    intvec v;
    58    if( homog(j) )
    59    {
    60       v=1;
    61       for( i=1; i<=k; i=i+1) { v[i+1]=deg(j[i]); }
    62       string nor = "),(wp(v),";
    63    }
    64    else { string nor = "),(dp(1+k),";}
    65    execute("ring Bl=("+cr+"),(t,"+nv+vr+nor+o+");");
    66 //---------- map to new ring, eliminate and create blown up ideal -------------
    67    ideal j=imap(br,j);
    68    for( i=1; i<=k; i=i+1) { j[i]=var(1+i)-t*j[i]; }
    69    j=eliminate(j,t);
    70    v=v[2..size(v)];
    71    execute("ring Bl_"+#[1]+bsr+"=("+cr+"),("+nv+vr+nor+o+");");
    72    ideal `#[1]+"_"`=imap(Bl,j);
    73    exportto(Top,basering);
    74    export `#[1]+"_"`;
    75    setring br;
    76 //------------------- some comments about usage and names  --------------------
    77 dbprint(p,"",
    78 "// The proc created the ring Bl_"+#[1]+bsr+" (equal to "+bsr+"["+nv[1,size(nv)-1]+"])",
    79 "// it contains the ideal "+#[1]+"_ , such that",
    80 "//             Bl_"+#[1]+bsr+"/"+#[1]+"_ is the blowup ring",
    81 "// show(Bl_"+#[1]+bsr+"); shows this ring.",
    82 "// Make Bl_"+#[1]+bsr+" the basering and see "+#[1]+"_ by typing:",
    83 "   setring Bl_"+#[1]+bsr+";","   "+#[1]+"_;");
    84    return();
    85 }
    86 example
    87 { "EXAMPLE:"; echo = 2;
    88    ring R=0,(x,y),dp;
    89    poly f=y2+x3; ideal j=jacob(f);
    90    blowup0(j);
    91    show(Bl_jR);
    92    setring Bl_jR;
    93    j_;"";
    94    ring r=32003,(x,y,z),ds;
    95    blowup0(maxideal(1),"m","T()");
    96    show(Bl_mr);
    97    setring Bl_mr;
    98    m_;
    99    kill Bl_jR, Bl_mr;
    100 }
     68   list l = ringlist(br);
     69   int n,k,i = nvars(br),ncols(C),0;
     70   ideal W;
     71   if (size(#) !=0)
     72   { W = #[1];}
     73   J = J,W;
     74   //J = interred(J+W);
     75//------------------------- create rings for blowup ------------------------
     76//Create rings tr = K[x(1),...,x(n),t] and nr = K[x(1),...,x(n),y(1),...,y(k)]
     77//and map Bl: nr --> tr, x(i)->x(i), y(i)->t*fi.
     78//Let ord be the ordering of the basering.
     79//We change the ringlist l by changing l[2] and l[3]
     80//For K[t,x(1),...,x(n),t]
     81// - l[2]: the variables to x(1),...,x(n),t
     82// - l[3]: the ordering to a block ordering (ord,dp(1))
     83//For K[x(1),...,x(n),y(1),...,y(k)]
     84// - l[2]: the variables to x(1),...,x(n),y(1),...,y(k),
     85// - l[3]: the ordering to a block ordering (ord,dp) if C is
     86//         not homogeneous or to (ord,wp(b1,...bk),ord) if C is
     87//         homogeneous with deg(C[i])=bi;
     88
     89//--------------- create tr = K[x(1),...,x(n),t] ---------------------------
     90   int s = size(l[3]);
     91   for ( i=1; i<=n; i++)
     92   {
     93      l[2][i]="x("+string(i)+")";
     94   }
     95   l[2]=insert(l[2],"t",n);
     96   l[3]=insert(l[3],list("dp",1),s-1);
     97   def tr = ring(l);
     98
     99//--------------- create nr = K[x(1),...,x(n),y(1),...,y(k)] ---------------
     100   l[2]=delete(l[2],n+1);
     101   l[3]=delete(l[3],s);
     102   for ( i=1; i<=k; i++)
     103   {
     104      l[2][n+i]="y("+string(i)+")";
     105   }
     106
     107   //---- change l[3]:
     108   l[3][s+1] = l[3][s];         // save the module ordering of the basering
     109   intvec w;
     110   w[k]=0; w=w+1;
     111   intvec v;                    // containing the weights for the varibale
     112   if( homog(C) )
     113   {
     114      for( i=1; i<=k; i++)
     115      {
     116         v[i]=deg(C[i]);
     117      }
     118      if (v != w)
     119      {
     120         l[3][s]=list("wp",v);
     121      }
     122      else
     123      {
     124         l[3][s]=list("dp",v);
     125      }
     126   }
     127   else
     128   {
     129      for( i=1; i<=k; i++)
     130      {
     131         v[i]=1;
     132      }
     133      l[3][s]=list("dp",v);
     134   }
     135   def nr = ring(l);
     136
     137//-------- create blowup map Bl: nr --> tr, x(i)->x(i), y(i)->t*fi ---------
     138   setring tr;
     139   ideal C = fetch(br,C);
     140   ideal bl = x(1..n);
     141   for( i=1; i<=k; i++) { bl = bl,t*C[i]; }
     142   map Bl = nr,bl;
     143   ideal Z;
     144//------------------ compute blown up objects and return  -------------------
     145   setring nr;
     146   ideal bR = preimage(tr,Bl,Z);   //ideal of blown up affine space A^n
     147   ideal C = fetch(br,C);
     148   ideal J = fetch(br,J);
     149   ideal W = fetch(br,W);
     150   ideal aS = interred(bR+W);                //ideal of ambient space
     151   ideal tT = interred(J+bR+W);              //ideal of total transform
     152   ideal eD = interred(C+J+bR+W);            //ideal of exceptional divisor
     153   ideal sT = sat(tT,C)[1];       //ideal of strict transform
     154   ideal bM = x(1..n);            //ideal of blowup map br --> nr
     155
     156   export(bR,C,J,W,aS,tT,eD,sT,bM);
     157   return(nr);
     158}
     159example
     160{ "EXAMPLE:"; echo = 2;
     161   ring r  = 0,(x,y),dp;
     162   poly f  = x2+y3;
     163   ideal C = x,y;           //center of blowup
     164   def B1 = blowup0(f,C);
     165   setring B1;
     166   aS;                      //ideal of blown up ambient space
     167   tT;                      //ideal of total transform of f
     168   sT;                      //ideal of strict transform of f
     169   eD;                      //ideal of exceptional divisor
     170   bM;                      //ideal of blowup map r --> B1
     171
     172   ring R  = 0,(x,y,z),ds;
     173   poly f  = y2+x3+z5;
     174   ideal C = y2,x,z;
     175   ideal W = z-x;
     176   def B2 = blowup0(f,C,W);
     177   setring B2;
     178   B2;                       //weighted ordering
     179   bR;                       //ideal of blown up R
     180   aS;                       //ideal of blown up R/W
     181   sT;                       //strict transform of f
     182   eD;                       //ideal of exceptional divisor
     183   //Note that the different affine charts are {y(i)=1}
     184 }
     185///////////////////////////////////////////////////////////////////////////////
     186
     187
    101188///////////////////////////////////////////////////////////////////////////////
    102189
Note: See TracChangeset for help on using the changeset viewer.