
2.3.4 Change of rings
To calculate the local Milnor number we have to do the calculation with the
same commands in a ring with local ordering.
We can define the localization of the polynomial ring at the origin
(see Polynomial data, and Mathematical background).
The ordering directly affects the standard basis which will be calculated.
Fetching the polynomial defined in the ring r into this new ring,
helps us to avoid retyping previous input.
 poly f = fetch(r,f);
f;
==> z2+x3+y3+x3y2x2y3

Instead of fetch we can use the function imap
which is more general but less efficient.
The most general way to fetch data from one ring to another is to use maps,
this will be explained in map.
In this ring the terms are ordered by increasing exponents. The local Milnor
number is now
This shows that f has outside the origin in affine 3space
singularities with local Milnor number adding up to
.Using global and local orderings as above is a convenient way to check
whether a variety has singularities outside the origin.
The command jacob applied twice gives the Hessian of f , in our example
a 3x3  matrix.
 matrix H = jacob(jacob(f));
H;
==> H[1,1]=6x+6xy22y3
==> H[1,2]=6x2y6xy2
==> H[1,3]=0
==> H[2,1]=6x2y6xy2
==> H[2,2]=6y+2x36x2y
==> H[2,3]=0
==> H[3,1]=0
==> H[3,2]=0
==> H[3,3]=2

The print command displays the matrix in a nicer format.
 print(H);
==> 6x+6xy22y3,6x2y6xy2, 0,
==> 6x2y6xy2, 6y+2x36x2y,0,
==> 0, 0, 2

We may calculate the determinant and (the ideal generated by all) minors of
a given size.
 det(H);
==> 72xy+24x472x3y+72xy324y448x4y2+64x3y348x2y4
minor(H,1); // the 1x1  minors
==> _[1]=2
==> _[2]=6y+2x36x2y
==> _[3]=6x2y6xy2
==> _[4]=6x2y6xy2
==> _[5]=6x+6xy22y3

The algorithm of the standard basis computation may be
affected by the command option . For example, a reduced standard
basis of the ideal generated by the
minorsof H is obtained in the following way:
 option(redSB);
groebner(minor(H,1));
==> _[1]=1

This shows that 1 is contained in the ideal of the
minors,hence the corresponding variety is empty.
