Free numerical semigroup
Definition
The definition of free numerical semigroup comes from the following result.
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
https://gap-packages.github.io/
numericalsgps
.