Simple numerical semigroup

Definition

Let \(S\) be a numerical semigroup minimally generated by \(P = \{n_1, \ldots, n_e\}\) with \(n_1 < n_2 < \cdots < n_e\). For each \(i \in \{2, \ldots, e\}\), set

\[ c_i = \min \{k \in \mathbb{N} \setminus \{0\} ~ | ~ kn_i \in \langle P \setminus \{n_i\} \rangle\}. \]

It is said that \(S\) is simple if \(n_1 = (c_2 - 1) + \cdots + (c_e - 1)+1\).

Examples

\(\circ\) Let \(S = \langle 4, 5, 7 \rangle\). Then, \(5, 10 \not \in \langle 4, 7 \rangle\) and \(15 = 2 \cdot 4 + 7 \in \langle 4, 7 \rangle\), so \(c_2 = 3\). On the other hand, \(7 \not \in \langle 4, 5 \rangle\) but \(14 = 4 + 2 \cdot 5 \in \langle 4, 5 \rangle\), therefore \(c_3 = 2\). Finally, \((c_2-1) + (c_3 - 1)+1 = 4\) and \(S\) is simple.

Examples with GAP

Nowadays, there are no functions in package NumericalSgps related to simple numerical semigroup. However, given a numerical semigroup \(S\), the following function returns true if \(S\) is simple and false otherwise.

gap> IsSimpleNumericalSemigroup := function(S)
>       local Min_gen, p, list_c;
>       if not IsNumericalSemigroup(S) then
>           Error("The argument must be a Numerical Semigroup");
>       fi;
>       Min_gen := MinimalGenerators(S);
>       p := Length(Min_gen);
>       if p = 1 then 
>           return false; 
>       fi;
>       list_c := pivots(S);
>       return Min_gen[1] - 1 = Sum(list_c{[2..p]} - 1);
> end;
function( S ) ... end

The function pivots is not implemented in GAP yet, it computes the constants \(c_i\) defined above.

gap> pivots:=function(s, I...)
>    local cs,msg,e,a,c,ap,i,rmsg,rs,d;
>    if Length(I) = 0 then
>       msg:=MinimalGenerators(s);
>    elif Length(I) = 1 then
>       msg:=I[1];
>    else
>       Error("The number of arguments must be one or two");
>    fi;
>    if not IsList(msg) or msg = [] then
>       Error("Second argument must be an arrangement of the minimal system of generators of the first argument");
>    fi;
>    if not SortedList(msg) = MinimalGenerators(s) then
>       Error("Second argument must be an arrangement of the minimal system of generators of the first argument");
>    fi;   
>    e:=EmbeddingDimension(s);
>    cs:=[]; 
>    for i in [1..e] do
>        a:=msg[i];
>        rmsg:=Difference(msg,[a]);
>        d:=Gcd(rmsg);
>        rs:=NumericalSemigroup(rmsg/d);
>        c:=First([2..Minimum(rmsg)], k->((k*a) mod d=0) and (k*a/d in rs));
>        Add(cs,c);
>    od;
>    return cs;
> end;
function( s ) ... end

\(\diamond\) Let \(S = \langle 17, 21, 32 \rangle\), in GAP:

gap> S := NumericalSemigroup(17, 21, 32);
<Numerical semigroup with 3 generators>

If we use the function defined above,

gap> IsSimpleNumericalSemigroup(S);
false

Then, \(S\) is not simple.

\(\diamond\) Let \(S = \langle 13, 14, 15 \rangle\), in GAP:

gap> S := NumericalSemigroup(13, 14, 15);
<Numerical semigroup with 3 generators>

It can be proven that if \(S\) is simple, then is a numerical semigroup with Apéry set of unique expression, but the reciprocal is false.

gap> IsAperySetOfUniqueExpression(S);
true
gap> IsSimpleNumericalSemigroup(S);
false

The function IsAperySetOfUniqueExpression is not implemented in GAP, its code is as follows.

gap> IsAperySetOfUniqueExpression := function(S)
>       local w;
>       if not IsNumericalSemigroup(S) then
>               Error("The argument must be a Numerical Semigroup");
>       fi;
>       for w in AperyList(S) do
>               if Length(Factorizations(w,S)) > 1 then
>                       return false;
>               fi;
>       od;
>       return true;
> end;
function( S ) ... end

References

Delgado, M., P. A. Garcia-Sanchez, and J. Morais. 2024. NumericalSgps, a Package for Numerical Semigroups, Version 1.4.0.” https://gap-packages.github.io/ numericalsgps.
Rosales, J. C., and P. A. Garcı́a-Sánchez. 2009. Numerical Semigroups. Springer.