# Singular

#### D.6.11.6 invariants

Procedure from library `hnoether.lib` (see hnoether_lib).

Usage:
invariants(INPUT); INPUT list or poly

Assume:
`INPUT` is the output of `develop(f)`, or of `extdevelop(develop(f),n)`, or one entry of the list of HN data computed by `hnexpansion(f[,"ess"])`.

Return:
list `INV` of the following format:
 ``` INV[1]: intvec (characteristic exponents) INV[2]: intvec (generators of the semigroup) INV[3]: intvec (Puiseux pairs, 1st components) INV[4]: intvec (Puiseux pairs, 2nd components) INV[5]: int (degree of the conductor) INV[6]: intvec (sequence of multiplicities) ```
If `INPUT` contains no valid HN expansion, the empty list is returned.

Assume:
`INPUT` is a bivariate polynomial f, or the output of `hnexpansion(f)`, or the list of HN data computed by `hnexpansion(f [,"ess"])`.

Return:
list `INV`, such that `INV[i]` coincides with the output of `invariants(develop(f[i]))`, where f[i] is the i-th branch of f, and the last entry of `INV` contains further invariants of f in the format:
 ``` INV[last][1] : intmat (contact matrix of the branches) INV[last][2] : intmat (intersection multiplicities of the branches) INV[last][3] : int (delta invariant of f) ```

Note:
In case the Hamburger-Noether expansion of the curve f is needed for other purposes as well it is better to calculate this first with the aid of `hnexpansion` and use it as input instead of the polynomial itself.

Example:
 ```LIB "hnoether.lib"; ring exring=0,(x,y),dp; list Hne=develop(y4+2x3y2+x6+x5y); list INV=invariants(Hne); INV[1]; // the characteristic exponents ==> 4,6,7 INV[2]; // the generators of the semigroup of values ==> 4,6,13 INV[3],INV[4]; // the Puiseux pairs in packed form ==> 3,7 2,2 INV[5] div 2; // the delta-invariant ==> 8 INV[6]; // the sequence of multiplicities ==> 4,2,2,1,1 // To display the invariants more 'nicely': displayInvariants(Hne); ==> 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 ///////////////////////////// INV=invariants((x2-y3)*(x3-y5)); INV[1][1]; // the characteristic exponents of the first branch ==> 2,3 INV[2][6]; // the sequence of multiplicities of the second branch ==> 3,2,1,1 print(INV[size(INV)][1]); // the contact matrix of the branches ==> 0 3 ==> 3 0 print(INV[size(INV)][2]); // the intersection numbers of the branches ==> 0 9 ==> 9 0 INV[size(INV)][3]; // the delta invariant of the curve ==> 14 ```