# Singular          #### D.6.1.4 semigroup

Procedure from library `alexpoly.lib` (see alexpoly_lib).

Usage:
semigroup(INPUT); INPUT poly or list

Assume:
INPUT is either a REDUCED bivariate polynomial defining a plane curve singularity, or the output of `hnexpansion(f[,"ess"])`, or the list `hne` in the ring created by `hnexpansion(f[,"ess"])`, or the output of `develop(f)` resp. of `extdevelop(f,n)`, or a list containing the contact matrix and a list of integer vectors with the characteristic exponents of the branches of a plane curve singularity, or an integer vector containing the characteristic exponents of an irreducible plane curve singularity.

Return:
a list with three entries. The first and the second are lists `v_1,...,v_s` and `w_1,...,w_r` respectively of integer vectors such that the semigroup of the plane curve defined by the INPUT is generated by the vectors `v_1,...,v_s,w_1+k*e_1,...,w_r+k*e_r`, where e_i denotes the i-th standard basis vector and k runs through all non-negative integers. The thrid entry is the conductor of the plane curve singularity. Note that r is the number of branches of the plane curve singularity and integer vectors thus have size r.

Note:
If the output is zero this means that the curve has one branch and is regular. In the reducible case the set of generators may not be minimal.
If you are not sure whether the INPUT polynomial is reduced or not, use `squarefree(INPUT)` as input instead.

Example:
 ```LIB "alexpoly.lib"; ring r=0,(x,y),ls; // Irreducible Case semigroup((x2-y3)^2-4x5y-x7); ==> : ==> : ==> 4 ==> : ==> 6 ==> : ==> 17 ==> : ==> empty list ==> : ==> 20 // In the irreducible case, invariants() also calculates a minimal set of // generators of the semigroup. invariants((x2-y3)^2-4x5y-x7); ==> 4,6,17 // Reducible Case poly f=(y2-x3)*(y2+x3)*(y4-2x3y2-4x5y+x6-x7); semigroup(f); ==> : ==> : ==> 2,4,2 ==> : ==> 3,6,3 ==> : ==> : ==> 7,13,6 ==> : ==> 13,26,12 ==> : ==> 6,12,6 ==> : ==> 21,41,20 ``` 