# Singular          #### D.6.11.8 multsequence

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

Usage:
multsequence(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:
intvec corresponding to the multiplicity sequence of the irreducible plane curve singularity described by the HN data (return value coincides with `invariants(INPUT)`).

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 of two integer matrices:

`multsequence(INPUT)[i,*]`
contains the multiplicities of the branches at their infinitely near point of 0 in its (i-1) order neighbourhood (i.e., i=1: multiplicity of the branches themselves, i=2: multiplicity of their 1st quadratic transform, etc.,
Hence, `multsequence(INPUT)[*,j]` is the multiplicity sequence of branch j.
`multsequence(INPUT)[i,*]`:
contains the information which of these infinitely near points coincide.

Note:
The order of the elements of the list of HN data obtained from `hnexpansion(f [,"ess"])` must not be changed (because otherwise the coincident infinitely near points couldn't be grouped together, see the meaning of the 2nd intmat in the example).
Hence, it is not wise to compute the HN expansion of polynomial factors separately, put them into a list INPUT and call `multsequence(INPUT)`.
Use `displayMultsequence` to produce a better readable output for reducible curves on the screen.
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 r=0,(x,y),dp; list Hne=hnexpansion((x6-y10)*(x+y2-y3)*(x+y2+y3)); ==> // No change of ring necessary, return value is HN expansion. multsequence(Hne)," | ",multsequence(Hne)," | ", multsequence(Hne)," | ",multsequence(Hne); ==> 3,2,1,1 | 3,2,1,1 | 1 | 1 multsequence(Hne); ==> : ==> 3,3,1,1, ==> 2,2,1,1, ==> 1,1,1,1, ==> 1,1,1,1, ==> 1,1,1,1 ==> : ==> 4,0,0,0, ==> 4,0,0,0, ==> 2,2,0,0, ==> 2,1,1,0, ==> 1,1,1,1 // The meaning of the entries of the 2nd matrix is as follows: displayMultsequence(Hne); ==> [(3,3,1,1)], ==> [(2,2,1,1)], ==> [(1,1),(1,1)], ==> [(1,1),(1),(1)], ==> [(1),(1),(1),(1)] ``` 