# Singular

#### D.4.5.1 blowup0

Procedure from library `elim.lib` (see elim_lib).

Usage:
blowup0(J,C [,W]); J,C,W ideals
C = ideal of center of blowup, J = ideal to be blown up, W = ideal of ambient space

Assume:
inclusion of ideals : W in J, J in C.
If not, the procedure replaces J by J+W and C by C+J+W

Return:
a ring, say B, containing the ideals C,J,W and the ideals
- bR (ideal defining the blown up basering)
- aS (ideal of blown up ambient space)
- eD (ideal of exceptional divisor)
- tT (ideal of total transform)
- sT (ideal of strict transform)
- bM (ideal of the blowup map from basering to B)
such that B/bR is isomorphic to the blowup ring BC.

Purpose:
compute the projective blowup of the basering in the center C, the exceptional locus, the total and strict tranform of J, and the blowup map.
The projective blowup is a presentation of the blowup ring BC = R[C] = R + t*C + t^2*C^2 + ... (also called Rees ring) of the ideal C in the ring basering R.

Theory:
If basering = K[x1,...,xn] and C = <f1,...,fk> then let B = K[x1,...,xn,y1,...,yk] and aS the preimage in B of W under the map B -> K[x1,...,xn,t], xi -> xi, yi -> t*fi. aS is homogeneous in the variables yi and defines a variety Z=V(aS) in A^n x P^(k-1), the ambient space of the blowup of V(W). The projection Z -> A^n is an isomorphism outside the preimage of the center V(C) in A^n and is called the blowup of the center. The preimage of V(C) is called the exceptional set, the preimage of V(J) is called the total transform of V(J). The strict transform is the closure of (total transform minus the exceptional set).
If C = <x1,...,xn> then aS = <yi*xj - yj*xi | i,j=1,...,n> and Z is the blowup of A^n in 0, the exceptional set is P^(k-1).

Note:
The procedure creates a new ring with variables y(1..k) and x(1..n) where n=nvars(basering) and k=ncols(C). The ordering is a block ordering where the x-block has the ordering of the basering and the y-block has ordering dp if C is not homogeneous
resp. the weighted ordering wp(b1,...bk) if C is homogeneous with deg(C[i])=bi.

Example:
 ```LIB "elim.lib"; ring r = 0,(x,y),dp; poly f = x2+y3; ideal C = x,y; //center of blowup def B1 = blowup0(f,C); setring B1; aS; //ideal of blown up ambient space ==> aS[1]=x(1)*y(2)-x(2)*y(1) tT; //ideal of total transform of f ==> tT[1]=x(1)*y(2)-x(2)*y(1) ==> tT[2]=x(2)^3+x(1)^2 sT; //ideal of strict transform of f ==> sT[1]=x(2)*y(2)^2+y(1)^2 ==> sT[2]=x(1)*y(2)-x(2)*y(1) ==> sT[3]=x(2)^2*y(2)+x(1)*y(1) ==> sT[4]=x(2)^3+x(1)^2 eD; //ideal of exceptional divisor ==> eD[1]=x(2) ==> eD[2]=x(1) bM; //ideal of blowup map r --> B1 ==> bM[1]=x(1) ==> bM[2]=x(2) ring R = 0,(x,y,z),ds; poly f = y2+x3+z5; ideal C = y2,x,z; ideal W = z-x; def B2 = blowup0(f,C,W); setring B2; B2; //weighted ordering ==> // characteristic : 0 ==> // number of vars : 6 ==> // block 1 : ordering ds ==> // : names x(1) x(2) x(3) ==> // block 2 : ordering wp ==> // : names y(1) y(2) y(3) ==> // : weights 2 1 1 ==> // block 3 : ordering C bR; //ideal of blown up R ==> bR[1]=x(1)*y(1)-x(2)^2*y(2) ==> bR[2]=x(3)*y(1)-x(2)^2*y(3) ==> bR[3]=-x(1)*y(3)+x(3)*y(2) aS; //ideal of blown up R/W ==> aS[1]=x(1)*y(1)-x(2)^2*y(2) ==> aS[2]=x(1)*y(3)-x(3)*y(2) ==> aS[3]=x(1)-x(3) ==> aS[4]=x(3)*y(1)-x(2)^2*y(3) sT; //strict transform of f ==> sT[1]=y(1)+x(3)^2*y(3)+x(3)^4*y(3) ==> sT[2]=y(2)-y(3) ==> sT[3]=x(1)-x(3) ==> sT[4]=x(2)^2+x(3)^3+x(3)^5 eD; //ideal of exceptional divisor ==> eD[1]=x(1)*y(1)-x(2)^2*y(2) ==> eD[2]=x(1)*y(3)-x(3)*y(2) ==> eD[3]=x(1) ==> eD[4]=x(3) ==> eD[5]=x(2)^2*y(3) ==> eD[6]=x(2)^2 //Note that the different affine charts are {y(i)=1} ```