# Singular

### A.4.6 Invariants of plane curve singularities

The Puiseux pairs of an irreducible and reduced plane curve singularity are probably its most important invariants. They can be computed from its Hamburger-Noether expansion (which is the analogue of the Puiseux expansion in characteristic 0 for fields of arbitrary characteristic).

The library `hnoether.lib` (see hnoether_lib) uses the algorithm of Antonio Campillo in "Algebroid curves in positive characteristic" SLN 813, 1980. This algorithm has the advantage that it needs least possible field extensions and, moreover, works in any characteristic. This fact can be used to compute the invariants over a field of finite characteristic, say 32003, which will most probably be the same as in characteristic 0.

We compute the Hamburger-Noether expansion of a plane curve singularity given by a polynomial `f` in two variables. This expansion is given by a matrix, and it allows us to compute a primitive parametrization (up to a given order) for the curve singularity defined by `f` and numerical invariants such as the

• characteristic exponents,
• Puiseux pairs (of a complex model),
• degree of the conductor,
• delta invariant,
• generators of the semigroup.
Besides commands for computing a parametrization and the invariants mentioned above, the library `hnoether.lib` provides commands for the computation of the Newton polygon of `f`, the square-free part of `f` and a procedure to convert one set of invariants to another.

 ``` LIB "hnoether.lib"; // ======== The irreducible case ======== ring s = 0,(x,y),ds; poly f = y4-2x3y2-4x5y+x6-x7; list hn = develop(f); show(hn[1]); // Hamburger-Noether matrix ==> // matrix, 3x3 ==> 0,x, 0, ==> 0,1, x, ==> 0,1/4,-1/2 displayHNE(hn); // Hamburger-Noether development ==> y = z(1)*x ==> x = z(1)^2+z(1)^2*z(2) ==> z(1) = 1/4*z(2)^2-1/2*z(2)^3 + ..... (terms of degree >=4) setring s; displayInvariants(hn); ==> characteristic exponents : 4,6,7 ==> generators of semigroup : 4,6,13 ==> Puiseux pairs : (3,2)(7,2) ==> degree of the conductor : 16 ==> delta invariant : 8 ==> sequence of multiplicities: 4,2,2,1,1 // invariants(hn); returns the invariants as list // partial parametrization of f: param takes the first variable // as infinite except the ring has more than 2 variables. Then // the 3rd variable is chosen. param(hn); ==> // ** Warning: result is exact up to order 5 in x and 7 in y ! ==> _[1]=1/16x4-3/16x5+1/4x7 ==> _[2]=1/64x6-5/64x7+3/32x8+1/16x9-1/8x10 ring extring=0,(x,y,t),ds; poly f=x3+2xy2+y2; list hn=develop(f,-1); param(hn); // partial parametrization of f ==> // ** Warning: result is exact up to order 2 in x and 3 in y ! ==> _[1]=-t2 ==> _[2]=-t3 list hn1=develop(f,6); param(hn1); // a better parametrization ==> // ** Warning: result is exact up to order 6 in x and 7 in y ! ==> _[1]=-t2+2t4-4t6 ==> _[2]=-t3+2t5-4t7 // instead of recomputing you may extend the development: list hn2=extdevelop(hn,12); param(hn2); // a still better parametrization ==> // ** Warning: result is exact up to order 12 in x and 13 in y ! ==> _[1]=-t2+2t4-4t6+8t8-16t10+32t12 ==> _[2]=-t3+2t5-4t7+8t9-16t11+32t13 // // ======== The reducible case ======== ring r = 0,(x,y),dp; poly f=x11-2y2x8-y3x7-y2x6+y4x5+2y4x3+y5x2-y6; // = (x5-1y2) * (x6-2x3y2-1x2y3+y4) list L=hnexpansion(f); ==> // No change of ring necessary, return value is HN expansion. show(L[1][1]); // Hamburger-Noether matrix of 1st branch ==> // matrix, 3x3 ==> 0,x,0, ==> 0,1,x, ==> 0,1,-1 displayInvariants(L); ==> --- invariants of branch number 1 : --- ==> characteristic exponents : 4,6,7 ==> generators of semigroup : 4,6,13 ==> Puiseux pairs : (3,2)(7,2) ==> degree of the conductor : 16 ==> delta invariant : 8 ==> sequence of multiplicities: 4,2,2,1,1 ==> ==> --- invariants of branch number 2 : --- ==> characteristic exponents : 2,5 ==> generators of semigroup : 2,5 ==> Puiseux pairs : (5,2) ==> degree of the conductor : 4 ==> delta invariant : 2 ==> sequence of multiplicities: 2,2,1,1 ==> ==> -------------- contact numbers : -------------- ==> ==> branch | 2 ==> -------+----- ==> 1 | 2 ==> ==> -------------- intersection multiplicities : -------------- ==> ==> branch | 2 ==> -------+----- ==> 1 | 12 ==> ==> -------------- delta invariant of the curve : 22 param(L[2]); // parametrization of 2nd branch ==> _[1]=x2 ==> _[2]=x5 ```