Standard representation in a free Numerical semigroup

Definition

Let \(S\) be a numerical semigroup. The definition of standard representation in a free numerical semigroup comes from the following result.

Proposition

Assume that \(S\) is free for the arrangement \((r_0, r_1, \ldots, r_h)\), and let \(x \in \mathbb{Z}\). There exist unique \(\lambda_0, \lambda_1, \ldots, \lambda_h \in \mathbb{Z}\) such that the following holds.

  1. \(\displaystyle x = \sum_{k = 0}^h \lambda_k r_k\).

  2. For all \(k \in \{1, 2, \ldots, h\}\), \(0 \le \lambda_k < \overline{c_i}\).

It is defined the standard representation of an integer \(x \in \mathbb{Z}\) as the expression of \(x\) which satisfies the conditions of the above proposition.

Examples

\(\circ\) Consider the free numerical semigroup \(S = \langle 4, 6, 9 \rangle\) and the integer \(x = 27\). The unique ways to generate \(x\) from the set \(B = \{4, 6, 7\}\) are with the coefficients \(a_1 = (3, 1, 1), a_2 = (0, 3, 1)\) and \(a_3 = (0, 0, 3)\). We have, \(d_1 = r_0 = 4\), \(d_2 = gcd(d_1, r_1) = gcd(4, 6) = 2\), \(d_3 = gcd(d_2, r_2) = gcd(2, 9) = 1\), \(e_1 = \frac{d_1}{d_2} = 2, e_2 = \frac{d_2}{d_3} = 2\). Checking the second condition on each \(a_i\) with \(i = 1,2,3\), it holds that the standard representation of \(x = 27\) with respect to \(S\) is \((3, 1, 1)\), since the representation is unique and satisfies the conditions.

Examples with GAP

Nowadays, there are no functions in NumericalSgps related to standard representations in a free numerical semigroup. However, given a list \(I = \{r_0, \ldots, r_h\}\) such that \(S = \langle I \rangle\) is free for the arrangement \((r_0, \ldots, r_h)\) and an integer \(z \in \mathbb{Z}\), the following function returns a list with the coefficients of the standard representation of \(z\) in \(S\).

gap> StandardRepresentationNS := function(S, I, z)
>       local Min_gen, p, list_c, list_mu, list_lambda, i, mu_i, c_i, q, r, j, d_i, s, list_subrep;
>       if not IsNumericalSemigroup(S) then
>           Error("First argument must be a Numerical Semigroup");
>       fi;
>       if not IsListOfIntegersNS(I) then
>           Error("Second argument must be an arrangement of the minimal system of generators of the first argument");
>       fi;
>       Min_gen := MinimalGenerators(S);
>       p := Length(Min_gen);
>       if not Min_gen = SortedList(I) then
>           Error("Second argument must be an arrangement of the minimal system of generators of the first argument");
>       fi;
>       if not IsFreeForArrangement(S,I) then
>           Error("First argument is not free for the considered arrangement");
>       fi;
>       if not IsInt(z) then
>           Error("Third argument must be an integer");
>       fi;
>       list_c := Overlinepivots(S, I);
>       list_mu := z*GcdRepresentation(I);
>       list_lambda := [];
>       for i in Reversed([2..p]) do
>           mu_i := list_mu[i];
>           c_i := list_c[i-1];
>           q := QuoInt(mu_i, c_i);
>           r := RemInt(mu_i, c_i);
>           if r = 0 then
>               Add(list_lambda, 0);
>           else
>               if mu_i >= 0 then
>                   Add(list_lambda, r);
>               else
>                   q := q - 1;
>                   Add(list_lambda, r + c_i);
>               fi;
>           fi;
>           d_i := Gcd(I{[1..(i-1)]});
>           s := c_i*I[i]/d_i;
>           list_subrep := q*s*GcdRepresentation(I{[1..(i-1)]});
>           for j in [1..(i-1)] do
>           list_mu[j] := list_mu[j] + list_subrep[j];
>           od;
>           list_mu[i] := 0;
>       od;
>       Add(list_lambda, list_mu[1]);
>       return Reversed(list_lambda);
> end;
function( S, I, z ) ... end

The functions IsFreeForArrangement and pivots are not implemented in GAP, its code is as follows.

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( s, I... ) ... end
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
gap> Overlinepivots:=function(s, I...)
>    local cs,msg,e,a,c,ap,i,msgi,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 [2..e] do
>        msgi:=msg{[1..(i-1)]};
>        a := msg[i];
>        d:=Gcd(msgi);
>        c:=First([2..Minimum(msgi)], k->(k*a) mod d=0);
>        Add(cs,c);
>    od;
>    return cs;
> end;
function( s ) ... end

\(\diamond\) Let \(S = \langle 13, 25, 40 \rangle\), in GAP:

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

\(S\) is free for the arrangement \(\{25, 40, 13\}\),

gap> I := [25, 40, 13];
[ 25, 40, 13 ]
gap> IsFreeForArrangement(S, I);
true

Let us compute the standard representation for each \(z \in \{-10, -9, \ldots, 9, 10\}\).

gap> SortedList(I) = MinimalGenerators(S);
true
gap> List([-10..10], l -> StandardRepresentationNS(S, I, l));
[ [ -2, 1, 0 ], [ -3, 1, 2 ], [ -4, 1, 4 ], [ -4, 2, 1 ], [ -5, 2, 3 ], [ -5, 3, 0 ],
  [ -6, 3, 2 ], [ -7, 3, 4 ], [ -7, 4, 1 ], [ -8, 4, 3 ], [ 0, 0, 0 ], [ -1, 0, 2 ],
  [ -2, 0, 4 ], [ -2, 1, 1 ], [ -3, 1, 3 ], [ -3, 2, 0 ], [ -4, 2, 2 ], [ -5, 2, 4 ],
  [ -5, 3, 1 ], [ -6, 3, 3 ], [ -6, 4, 0 ] ]
gap> List(last, l -> l[1]*25 + l[2]*40 + l[3]*13);
[ -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
  10 ]

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.