| #### D.4.24.16 changeDenominator Procedure from library `normal.lib` (see normal_lib). Usage: changeDenominator(U1, c1, c2, I); U1 and I ideals, c1 and c2 polynomials. Return: an ideal U2 such that the A-modules 1/c1 * U1 and 1/c2 * U2 are equal, where A = R/I and R is the basering. Note: It assumes that such U2 exists. It is intended maninly as an auxiliary procedure in the normalization algorithms. Example:
    LIB "normal.lib";
    ring s = 0,(x,y),dp;
    ideal I = y5-y4x+4y2x2-x4;
    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 i-th 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 i-th 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 R-submodule 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+x2y2-4xy3+4y4+16x2y
    ==> U2[4]=x3
    // 1/x3 * U2 is also the normalization of I, but with a different denominator.

User manual for Singular version 4.4.1, 2025, generated by texi2html.