 LIB "normal.lib";
ring s = 0,(x,y),dp;
ideal I = y5y4x+4y2x2x4;
ideal U1 = normal(I)[2][1];
==>
==> // 'normal' created a list, say nor, of two elements.
==> // To see the list type
==> nor;
==>
==> // * nor[1] is a list of 1 ring(s).
==> // To access the ith ring nor[1][i], give it a name, say Ri, and type
==> def R1 = nor[1][1]; setring R1; norid; normap;
==> // For the other rings type first (if R is the name of your base ring)
==> setring R;
==> // and then continue as for R1.
==> // Ri/norid is the affine algebra of the normalization of R/P_i where
==> // P_i is the ith component of a decomposition of the input ideal id
==> // and normap the normalization map from R to Ri/norid.
==>
==> // * nor[2] is a list of 1 ideal(s). Let ci be the last generator
==> // of the ideal nor[2][i]. Then the integral closure of R/P_i is
==> // generated as Rsubmodule of the total ring of fractions by
==> // 1/ci * nor[2][i].
poly c1 = U1[4];
U1;c1;
==> U1[1]=xy2
==> U1[2]=x2y
==> U1[3]=x3
==> U1[4]=y3
==> y3
// 1/c1 * U1 is the normalization of I.
ideal U2 = changeDenominator(U1, c1, x3, I);
U2;
==> U2[1]=xy3+y4+4x2y
==> U2[2]=x2y2+xy3+4x3
==> U2[3]=x3y+x2y24xy3+4y4+16x2y
==> U2[4]=x3
// 1/x3 * U2 is also the normalization of I, but with a different denominator.
