
D.6.4.1 BlowingUp
Procedure from library curvepar.lib (see curvepar_lib).
 Usage:
 BlowingUp(f,I,l);
f=poly
b=ideal
l=list
 Assume:
 The basering is r=0,(x(1..n),a),dp
f is an irrreducible polynomial in k[a],
I is an ideal of a curve(if we consider a as a parameter)
 Compute:
 Blowingup of the curve at point 0.
 Return:
 list C of charts.
Each chart C[i] is a list of size 5 (reps. 6 in case of plane curves)
C[i][1] is an integer j. It shows, which standard chart do we consider.
C[i][2] is an irreducible poly g in k[a]. It is a minimal polynomial
for the new parameter.
C[i][3] is an ideal H in k[a].
c_i=F_i(a_new) for i=1..n,
a_old=H[n+1](a_new).
C[i][4] is a map teta:k[x(1)..x(n),a]>k[x(1)..x(n),a] from the new
curve to the old one.
x(1)>x(j)*x(1)
. . .
x(j)>x(j)
. . .
x(n)>x(j)*(c_n+x(n))
C[i][5] is an ideal J of a new curve. J=teta(I).
C[i][6] is the list of exceptional divisors in the chart
Example:
 LIB "curvepar.lib";
ring r=0,(x(1..3),a),dp;
poly f=a2+1;
ideal i=x(1)^2+a*x(2)^3,x(3)^2x(2);
list l=1,3,2;
list B=BlowingUp(f,i,l);
B;
==> [1]:
==> [1]:
==> 3
==> [2]:
==> a^2+1
==> [3]:
==> _[1]=0
==> _[2]=0
==> _[3]=1
==> [4]:
==> _[1]=x(1)*x(3)
==> _[2]=x(2)*x(3)
==> _[3]=x(3)
==> _[4]=a
==> [5]:
==> _[1]=x(2)x(3)
==> _[2]=x(2)^3*x(3)*a+x(1)^2

