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.
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
https://gap-packages.github.io/
numericalsgps
.