# Singular          #### D.6.11.2 develop

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

Usage:
develop(f [,n]); f poly, n int

Assume:
f is a bivariate polynomial (in the first 2 ring variables) and irreducible as power series (for reducible f use `hnexpansion`).

Return:
list `L` with:

`L`; matrix:
Each row contains the coefficients of the corresponding line of the Hamburger-Noether expansion (HNE). The end of the line is marked in the matrix by the first ring variable (usually x).
`L`; intvec:
indicating the length of lines of the HNE
`L`; int:
0 if the 1st ring variable was transversal (with respect to f),
1 if the variables were changed at the beginning of the computation,
-1 if an error has occurred.
`L`; poly:
the transformed polynomial of f to make it possible to extend the Hamburger-Noether development a posteriori without having to do all the previous calculation once again (0 if not needed)
`L`; int:
1 if the curve has exactly one branch (i.e., is irreducible),
0 else (i.e., the curve has more than one HNE, or f is not valid).

Display:
The (non zero) elements of the HNE (if not called by another proc).

Note:
The optional parameter `n` affects only the computation of the LAST line of the HNE. If it is given, the HN-matrix `L` will have at least `n` columns.
Otherwise, the number of columns will be chosen minimal such that the matrix contains all necessary information (i.e., all lines of the HNE but the last (which is in general infinite) have place).
If `n` is negative, the algorithm is stopped as soon as the computed information is sufficient for `invariants(L)`, but the HN-matrix `L` may still contain undetermined elements, which are marked with the 2nd variable (of the basering).
For time critical computations it is recommended to use `ring ...,(x,y),ls` as basering - it increases the algorithm's speed.
If `printlevel>=0` comments are displayed (default is `printlevel=0`).

Example:
 ```LIB "hnoether.lib"; ring exring = 7,(x,y),ds; list Hne=develop(4x98+2x49y7+x11y14+2y14); print(Hne); ==> 0,0, 0,0,0,0,3,x, ==> 0,x, 0,0,0,0,0,0, ==> 0,0, 0,x,0,0,0,0, ==> 0,x, 0,0,0,0,0,0, ==> 0,-1,0,0,0,0,0,0 // therefore the HNE is: // z(-1)= 3*z(0)^7 + z(0)^7*z(1), // z(0) = z(1)*z(2), (there is 1 zero in the 2nd row before x) // z(1) = z(2)^3*z(3), (there are 3 zeroes in the 3rd row) // z(2) = z(3)*z(4), // z(3) = -z(4)^2 + 0*z(4)^3 +...+ 0*z(4)^8 + ?*z(4)^9 + ... // (the missing x in the last line indicates that it is not complete.) Hne; ==> 7,1,3,1,-1 param(Hne); ==> // ** Warning: result is exact up to order 20 in x and 104 in y ! ==> _=-x14 ==> _=-3x98-x109 // parametrization: x(t)= -t^14+O(t^21), y(t)= -3t^98+O(t^105) // (the term -t^109 in y may have a wrong coefficient) displayHNE(Hne); ==> y = 3*x^7+z(1)*x^7 ==> x = z(1)*z(2) ==> z(1) = z(2)^3*z(3) ==> z(2) = z(3)*z(4) ==> z(3) = -z(4)^2 + ..... (terms of degree >=9) ``` 