Free numerical semigroup

Definition

The definition of free numerical semigroup comes from the following result.

Proposition

Let \(S\) be a numerical semigroup and let \(P(S) = \{n_1, \ldots, n_e\}\) be the set of minimal generators of \(S\). For every \(i \in \{2, \ldots, e\}\), it is defined:

  1. \(d_i = \gcd(n_1, \ldots, n_{i-1})\).

  2. \(\overline{c}_i = \min \{k \in \mathbb{N} \setminus \{0\} ~ | ~ kn_i ~~ is ~ a ~ multiple ~ of ~ d_i\}\).

  3. \(c_i^* = \min \{k \in \mathbb{N} \setminus \{0\} ~ | ~ kn_i \in \langle n_1, \ldots, n_{i-1} \rangle\}\).

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

Then, the following are equivalent:

  1. \(n_1 = c_2^* \cdots c_e^*\).

  2. \(Ap(S, n_1) = \{\lambda_2n_2 + \cdots + \lambda_e n_e ~ | ~ \lambda_i \in \{0, \ldots, c_i^* - 1 \} ~~ for ~ all i \in \{2, \ldots, e\}\}\).

  3. \(F(S) + n_1 = (c_2^* - 1)n_2 + \cdots + (c_e^* - 1)n_e\).

  4. \(\overline{c}_i = c_i^*\).

  5. \(c_i = \overline{c}_i\).

  6. \(c_i = \overline{c}_i = c_i^*\).

It is said that \(S\) is free if there is an arrangement of \(P(S)\) fulfilling any of the conditions of the proposition. If \(S\) is free for any arrangement of \(P(S)\), it is said that \(S\) is universally free.

Examples

\(\circ\) Let \(a,b \in \mathbb{N} \setminus \{0, 1\}\) with \(gcd(a,b) = 1\) and \(S = \langle a,b \rangle\). Obviously \(\overline{c}_2 \le c_2^*\) by definition. On the other hand, if \(\overline{c}_2b\) are multiple of \(d_2 = a\), since \(gcd(a,b) = 1\), then \(\overline{c}_2 = qa\) for some \(q \in \mathbb{N} \setminus \{0\}\). It is deduced that \(\overline{c}_2 = a\), and since \(ab \in \langle a \rangle\), by the minimality of \(c_2^*\), it holds \(c_2^* \le \overline{c}_2\), concluding that \(c_2^* = \overline{c}_2\) and \(S\) is free. Therefore, any numerical semigroup with embedding dimension two is free. In fact, they are telescopic numerical semigroups.

\(\circ\) Let \(S = \langle 4, 9, 11 \rangle\). Since \(d_3 = gcd(4, 9) = 1\), we have that \(\overline{c}_3 = 1\). On the other hand, \(c_3^* \ne 1\) because of the definition of minimal system of generators. If we check the other arrangements, it is concluded that \(S\) is not a free numerical semigroup.

Examples with GAP

The following examples are made with the package NumericalSgps in GAP.

\(\diamond\) Let \(S = \langle 10, 15, 18 \rangle\), in GAP:

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

In order to know if \(S\) is free, we can use the function IsFree.

gap> IsFree(S);
true

The condition of free depends on the arrangement, the function IsUniversallyFree checks if the numerical semigroup is free for all arrangements of its minimal generators.

gap> IsUniversallyFree(S);
true

\(\diamond\) If we are interested in know how many free numerical semigroups have a fixed Frobenius number \(f \in \mathbb{N}\), the function FreeNumericalSemigroupsWithFrobeniusNumber returns these numerical semigroups.

gap> Length(FreeNumericalSemigroupsWithFrobeniusNumber(57));
33

\(\diamond\) Let \(S = \langle 6, 9, 13 \rangle\), in GAP:

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

Nowadays, there are no functions in NumericalSgps such that for a given numerical semigroup \(S\) and an arrangement \((r_0, r_1, \ldots, r_h)\) return true or false depending on whether \(S\) is free for the given arrangement. However, the following function computes it.

gap> IsFreeForArrangement := function(S, I)
>       local p, Min_gen, n_p;
>       if not IsNumericalSemigroup(S) then
>           Error("First argument must be a Numerical Semigroup");
>       fi;
>       Min_gen := MinimalGenerators(S);
>       if not (IsList(I) and Min_gen = SortedList(I)) then
>           Error("Second argument must be an arrangement of the minimal system of generators of the first argument");
>       fi;
>       p := Length(I);
>       if p = 1 then 
>           return false; 
>       fi;
>       n_p := I[p];
>       return gluing([n_p],Difference(I,[n_p])) and IsFreeNumericalSemigroup(NumericalSemigroup(Difference(I,[n_p])/Gcd(Difference(I,[n_p]))));
> end;
function( S, I ) ... end

Where gluing is the following function,

gap> gluing:=function(l1,l2)
>        local d1, d2, t1, t2, s1, s2;
>        d1:=Gcd(l1);
>        d2:=Gcd(l2);
>       if (not(Gcd(d1,d2)=1)) then
>            return false;
>        fi;
>        s1:=NumericalSemigroup(l1/d1);
>        s2:=NumericalSemigroup(l2/d2);
>       return (not(d1 in l2) and not(d2 in l1)) and ((d1 in s2) and (d2 in s1));
> end;
function( l1, l2 ) ... end

Then,

gap> IsFreeForArrangement(S, [6,9,13]);
true
gap> IsFreeForArrangement(S, [9,6,13]);
true
gap> IsFreeForArrangement(S, [9,13,6]);
false

\(\diamond\) Let \(S = \langle 17, 22, 31, 40 \rangle\), in GAP:

gap> S := NumericalSemigroup(17, 22, 31, 40);
<Numerical semigroup with 4 generators>

Given a numerical semigroup \(S\) minimally generated by \(P = \{n_1, \ldots, n_e\}\), the following function computes the constants \(c_i^*\) with respect to the arrangement \((r_1, \ldots, r_e)\) so that \(r_1 < r_2 < \ldots < r_e\). If it is also given a list \(I\) defining an arrangement of \(P\), then the function computes the constants \(c_i^*\) considering the order defined by \(I\).

gap> Asteriskpivots := function(S, I...)
>       local Min_gen, p, list_c, i, Sub_min_gen, d_i, S_i, n_i, c;
>       if not IsNumericalSemigroup(S) then
>           Error("The argument must be a Numerical Semigroup");
>       fi;
>       if Length(I) = 0 then
>           Min_gen := MinimalGenerators(S);
>       elif Length(I) = 1 then
>           Min_gen := I[1];
>       else
>           Error("The number of arguments must be one or two");
>       fi;
>       if not SortedList(Min_gen) = MinimalGenerators(S) then
>           Error("Second argument must be an arrangement of the minimal system of generators of the first argument");
>       fi;
>       if 1 in S then 
>           Error("The argument must be a Numerical semigroup other than N"); 
>       fi;
>       p := Length(Min_gen);
>       list_c := [];
>       for i in [2..p] do
>           Sub_min_gen := Min_gen{[1..i-1]};
>           d_i := Gcd(Sub_min_gen);
>           S_i := NumericalSemigroup(Sub_min_gen/d_i);
>           n_i := Min_gen[i];
>           c := First([2..Minimum(Sub_min_gen)], k->((k*n_i) mod d_i=0) and (k*n_i/d_i in S_i));
>           Add(list_c, c);
>       od;
>       return list_c;
> end;
function( S, I... ) ... end
gap> Asteriskpivots(S, [22, 17, 31, 40]);
[ 22, 4, 4 ]
gap> Asteriskpivots(S);
[ 17, 4, 4 ]

References

Assi, Abdallah, Marco D’Anna, and Pedro A. Garcı́a-Sánchez. 2020. Numerical Semigroups and Applications. Vol. 3. RSME Springer Series. Springer, [Cham]. https://doi.org/10.1007/978-3-030-54943-5.
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.