Let S be a numerical semigroup minimally generated by {m_1,...,m_n}. A factorization of an element s∈ S is an n-tuple a=(a_1,...,a_n) of nonnegative integers such that n=a_1 n_1+⋯+a_n m_n. The length of a is |a|=a_1+⋯+a_n. Given two factorizations a and b of n, the distance between a and b is d(a,b)=max { |a-gcd(a,b)|,|b-gcd(a,b)|}, where gcd((a_1,...,a_n),(b_1,...,b_n))=(min(a_1,b_1),...,min(a_n,b_n)). In the literature, factorizations are sometimes called representations or expressions of the element in terms of the generators.
If l_1>⋯ > l_k are the lengths of all the factorizations of s ∈ S, the delta set associated to s is ∆(s)={l_1-l_2,...,l_k-l_k-1}.
The catenary degree of an element in S is the least positive integer c such that for any two of its factorizations a and b, there exists a chain of factorizations starting in a and ending in b and so that the distance between two consecutive links is at most c. The catenary degree of S is the supremum of the catenary degrees of the elements in S.
The tame degree of S is the least positive integer t such that for any factorization a of an element s in S, and any i such that s-m_i∈ S, there exists another factorization b of s so that the distance to a is at most t and b_inot = 0.
The ω-primality of an element s in S is the least positive integer k such that if (∑_i∈ I s_i)-s∈ S, s_i∈ S, then there exists Ω⊆ I with cardinality k such that (∑_i∈ Ω s_i)-s∈ S. The ω-primality of S is the maximum of the ω-primality of its minimal generators.
The basic properties of these constants can be found in [GH06]. The algorithm used to compute the catenary and tame degree is an adaptation of the algorithms appearing in [CGL+06] for numerical semigroups (see [CGD07]). The computation of the elasticity of a numerical semigroup reduces to m/n with m the multiplicity of the semigroup and n its largest minimal generator (see [CHM06] or [GH06]).
Denumerants, sets of factorizations, R-classes, and L-shapes are described in this section.
‣ FactorizationsIntegerWRTList ( n, ls ) | ( function ) |
ls is a list of integers and n an integer. The output is the set of factorizations of n in terms of the elements in the list ls. This function uses RestrictedPartitions
(Reference: RestrictedPartitions).
gap> FactorizationsIntegerWRTList(100,[11,13,15,19]); [ [ 2, 6, 0, 0 ], [ 3, 4, 1, 0 ], [ 4, 2, 2, 0 ], [ 5, 0, 3, 0 ], [ 5, 2, 0, 1 ], [ 6, 0, 1, 1 ], [ 0, 1, 2, 3 ], [ 1, 1, 0, 4 ] ]
‣ Factorizations ( n, S ) | ( operation ) |
‣ Factorizations ( S, n ) | ( operation ) |
‣ FactorizationsElementWRTNumericalSemigroup ( n, S ) | ( function ) |
S is a numerical semigroup and n an element of S. The output is the set of factorizations of n in terms of the minimal generating set of S.
gap> s:=NumericalSemigroup(101,113,196,272,278,286);; gap> Factorizations(1100,s); [ [ 0, 8, 1, 0, 0, 0 ], [ 0, 0, 0, 2, 2, 0 ], [ 5, 1, 1, 0, 0, 1 ], [ 0, 2, 3, 0, 0, 1 ] ] gap> Factorizations(s,1100)=Factorizations(1100,s); true gap> FactorizationsElementWRTNumericalSemigroup(1100,s)=Factorizations(1100,s); true
‣ FactorizationsElementListWRTNumericalSemigroup ( l, S ) | ( function ) |
S is a numerical semigroup and l a list of elements of S.
Computes the factorizations of all the elements in l.
gap> s:=NumericalSemigroup(10,11,13); <Numerical semigroup with 3 generators> gap> FactorizationsElementListWRTNumericalSemigroup([100,101,103],s); [ [ [ 0, 2, 6 ], [ 1, 7, 1 ], [ 3, 4, 2 ], [ 5, 1, 3 ], [ 10, 0, 0 ] ], [ [ 0, 8, 1 ], [ 1, 0, 7 ], [ 2, 5, 2 ], [ 4, 2, 3 ], [ 9, 1, 0 ] ], [ [ 0, 7, 2 ], [ 2, 4, 3 ], [ 4, 1, 4 ], [ 7, 3, 0 ], [ 9, 0, 1 ] ] ]
‣ RClassesOfSetOfFactorizations ( ls ) | ( function ) |
ls is a set of factorizations (a list of lists of nonnegative integers with the same length). The output is the set of mathcal R-classes of this set of factorizations as defined in Chapter 7 of [RG09].
gap> s:=NumericalSemigroup(10,11,19,23);; gap> BettiElements(s); [ 30, 33, 42, 57, 69 ] gap> Factorizations(69,s); [ [ 5, 0, 1, 0 ], [ 2, 1, 2, 0 ], [ 0, 0, 0, 3 ] ] gap> RClassesOfSetOfFactorizations(last); [ [ [ 2, 1, 2, 0 ], [ 5, 0, 1, 0 ] ], [ [ 0, 0, 0, 3 ] ] ]
‣ LShapes ( S ) | ( operation ) |
‣ LShapesOfNumericalSemigroup ( S ) | ( function ) |
S is a numerical semigroup. The output is the number of LShapes associated to S. These are ways of arranging the set of factorizations of the elements in the Apéry set of the largest generator, so that if one factorization x is chosen for w and w-w'∈ S, then only the factorization of x' of w' with x'≤ x can be in the LShape (and if there is no such a factorization, then we have no LShape with x in it), see [AG10].
gap> s:=NumericalSemigroup(4,6,9);; gap> LShapes(s); [ [ [ 0, 0 ], [ 1, 0 ], [ 0, 1 ], [ 2, 0 ], [ 1, 1 ], [ 0, 2 ], [ 2, 1 ], [ 1, 2 ], [ 2, 2 ] ], [ [ 0, 0 ], [ 1, 0 ], [ 0, 1 ], [ 2, 0 ], [ 1, 1 ], [ 3, 0 ], [ 2, 1 ], [ 4, 0 ], [ 5, 0 ] ] ] gap> LShapesOfNumericalSemigroup(s) = LShapes(s); true
‣ RFMatrices ( f, S ) | ( function ) |
S is a numerical semigroup, and f is a pseudo-Frobenius number of S.
The output is the list of RF-matrices associated to f. The ith row of each matrix contains the coefficients of a combination of f in terms of the minimal generators of the semigroup, obtained by substraction the ith generator to the factorizations of f plus the ith generator of S, see [Mos16].
gap> s:=NumericalSemigroup(6, 7, 9, 10);; gap> RFMatrices(8,s); [ [ [ -1, 2, 0, 0 ], [ 1, -1, 1, 0 ], [ 0, 1, -1, 1 ], [ 3, 0, 0, -1 ] ], [ [ -1, 2, 0, 0 ], [ 1, -1, 1, 0 ], [ 0, 1, -1, 1 ], [ 0, 0, 2, -1 ] ] ]
‣ DenumerantOfElementInNumericalSemigroup ( n, S ) | ( function ) |
S is a numerical semigroup and n a positive integer. The output is the number of factorizations of n in terms of the minimal generating set of S.
gap> s:=NumericalSemigroup(101,113,195,272,278,286);; gap> DenumerantOfElementInNumericalSemigroup(1311,s); 6
‣ DenumerantFunction ( S ) | ( operation ) |
S is a numerical semigroup. The output is a function that for a given n computes the number of factorizations of n in terms of the minimal generating set of S.
gap> s:=NumericalSemigroup(101,113,195,272,278,286);; gap> DenumerantFunction(s)(1311); 6
‣ DenumerantIdeal ( n, S ) | ( operation ) |
‣ DenumerantIdeal ( S, n ) | ( operation ) |
S is a numerical semigroup and n a nonnegative integer. The output is the ideal of elements in S with more than n factorizations. If we add zero to this set, we obtain what is is called in [Kom24] an n-semigroup.
gap> s:=NumericalSemigroup(101,113,195,272,278,286);; gap> 1311 in DenumerantIdeal(6,s); false gap> 1311 in DenumerantIdeal(5,s); true
This section is devoted to nonunique factorization invariants based on lengths of factorizations. There are some families of numerical semigroups related to maximal denumerantes; membership tests for these families are provede here.
‣ LengthsOfFactorizationsIntegerWRTList ( n, ls ) | ( function ) |
ls is a list of integers and n an integer. The output is the set of lengths of the factorizations of n in terms of the elements in ls.
gap> LengthsOfFactorizationsIntegerWRTList(100,[11,13,15,19]); [ 6, 8 ]
‣ LengthsOfFactorizationsElementWRTNumericalSemigroup ( n, S ) | ( function ) |
S is a numerical semigroup and n an element of S. The output is the set of lengths of the factorizations of n in terms of the minimal generating set of S.
gap> s:=NumericalSemigroup(101,113,196,272,278,286); <Numerical semigroup with 6 generators> gap> LengthsOfFactorizationsElementWRTNumericalSemigroup(1100,s); [ 4, 6, 8, 9 ]
‣ Elasticity ( n, S ) | ( operation ) |
‣ Elasticity ( S, n ) | ( operation ) |
‣ ElasticityOfFactorizationsElementWRTNumericalSemigroup ( n, S ) | ( function ) |
S is a numerical semigroup and n an element of S. The output is the maximum length divided by the minimum length of the factorizations of n in terms of the minimal generating set of S.
gap> s:=NumericalSemigroup(101,113,196,272,278,286);; gap> e := Elasticity(1100,s); 9/4 gap> Elasticity(1100,s) = Elasticity(s,1100); true gap> ElasticityOfFactorizationsElementWRTNumericalSemigroup(1100,s)= e; true
‣ Elasticity ( S ) | ( operation ) |
‣ ElasticityOfNumericalSemigroup ( S ) | ( function ) |
S is a numerical semigroup. The output is the elasticity of S.
gap> s:=NumericalSemigroup(101,113,196,272,278,286);; gap> Elasticity(s); 286/101 gap> ElasticityOfNumericalSemigroup(s); 286/101
‣ DeltaSet ( ls ) | ( operation ) |
‣ DeltaSetOfSetOfIntegers ( ls ) | ( function ) |
ls is list of integers. The output is the Delta set of the elements in ls, that is, the set of differences of consecutive elements in the list.
gap> LengthsOfFactorizationsIntegerWRTList(100,[11,13,15,19]); [ 6, 8 ] gap> DeltaSet(last); [ 2 ] gap> DeltaSetOfSetOfIntegers(last2); [ 2 ]
‣ DeltaSet ( n, S ) | ( operation ) |
‣ DeltaSet ( S, n ) | ( operation ) |
‣ DeltaSetOfFactorizationsElementWRTNumericalSemigroup ( n, S ) | ( function ) |
S is a numerical semigroup and n an element of S. The output is the Delta set of the factorizations of n in terms of the minimal generating set of S.
gap> s:=NumericalSemigroup(101,113,196,272,278,286);; gap> d := DeltaSet(1100,s); [ 1, 2 ] gap> DeltaSet(s,1100) = d; true gap> DeltaSetOfFactorizationsElementWRTNumericalSemigroup(1100,s) = d; true
‣ DeltaSetPeriodicityBoundForNumericalSemigroup ( S ) | ( function ) |
S is a numerical semigroup. Computes the bound were the periodicity starts for Delta sets of the elements in S; see [GMV15].
gap> s:=NumericalSemigroup(5,7,11);; gap> DeltaSetPeriodicityBoundForNumericalSemigroup(s); 60
‣ DeltaSetPeriodicityStartForNumericalSemigroup ( S ) | ( function ) |
S is a numerical semigroup.
Computes the element were the periodicity starts for Delta sets of the elements in S.
gap> s:=NumericalSemigroup(5,7,11);; gap> DeltaSetPeriodicityStartForNumericalSemigroup(s); 21
‣ DeltaSetListUpToElementWRTNumericalSemigroup ( n, S ) | ( function ) |
S is a numerical semigroup, n an integer.
Computes the Delta sets of the integers up to (and including) n, if an integer is not in S, the corresponding Delta set is empty.
gap> s:=NumericalSemigroup(5,7,11);; gap> DeltaSetListUpToElementWRTNumericalSemigroup(31,s); [ [ ], [ ], [ ], [ ], [ ], [ ], [ ], [ ], [ ], [ ], [ ], [ ], [ ], [ ], [ ], [ ], [ ], [ ], [ ], [ ], [ ], [ 2 ], [ ], [ ], [ 2 ], [ ], [ 2 ], [ ], [ 2 ], [ 2 ], [ ] ]
‣ DeltaSetUnionUpToElementWRTNumericalSemigroup ( n, S ) | ( function ) |
S is a numerical semigroup, n a nonnegative integer.
Computes the union of the delta sets of the elements of S up to and including n, using a ring buffer to conserve memory.
gap> s:=NumericalSemigroup(5,7,11);; gap> DeltaSetUnionUpToElementWRTNumericalSemigroup(60,s); [ 2 ]
‣ DeltaSet ( S ) | ( operation ) |
‣ DeltaSetOfNumericalSemigroup ( S ) | ( function ) |
S is a numerical semigroup.
Computes the Delta set of S.
gap> s:=NumericalSemigroup(5,7,11);; gap> DeltaSet(s); [ 2 ] gap> DeltaSetOfNumericalSemigroup(s); [ 2 ]
‣ MaximumDegree ( S, n ) | ( operation ) |
‣ MaximumDegreeOfElementWRTNumericalSemigroup ( n, S ) | ( function ) |
S is a numerical semigroup and n a nonnegative integer. The output is the maximum length of the factorizations of n in terms of the minimal generating set of S.
gap> s:=NumericalSemigroup(101,113,196,272,278,286); <Numerical semigroup with 6 generators> gap> MaximumDegree(1100,s); 9 gap> MaximumDegreeOfElementWRTNumericalSemigroup(1100,s); 9
‣ IsAdditiveNumericalSemigroup ( S ) | ( function ) |
S is a numerical semigroup. Detects if S is additive, that is, ord(m+x)=ord(x)+1 for all x in S, where m is the multiplicity of S (ord corresponds to MaximumDegreeOfElementWRTNumericalSemigroup
(9.2-12); see Section 9.8 for an alternate definition). For these semigroups gr_mathfrakm(K[[S]]) is Cohen-Macaulay (see [BH13]).
gap> l:=IrreducibleNumericalSemigroupsWithFrobeniusNumber(31);; gap> Length(l); 109 gap> Length(Filtered(l,IsAdditiveNumericalSemigroup)); 20
‣ MaximalDenumerant ( n, S ) | ( operation ) |
‣ MaximalDenumerant ( S, n ) | ( operation ) |
‣ MaximalDenumerantOfElementInNumericalSemigroup ( n, S ) | ( function ) |
S is a numerical semigroup and n an element of S. The output is the number of factorizations of n in terms of the minimal generating set of S with maximal length.
gap> s:=NumericalSemigroup(101,113,196,272,278,286);; gap> MaximalDenumerant(1100,s); 1 gap> MaximalDenumerant(s,1311); 2 gap> MaximalDenumerantOfElementInNumericalSemigroup(1311,s); 2
‣ MaximalDenumerantOfSetOfFactorizations ( ls ) | ( function ) |
ls is list of factorizations (a list of lists of nonnegative integers with the same length). The output is number of elements in ls with maximal length.
gap> FactorizationsIntegerWRTList(100,[11,13,15,19]); [ [ 2, 6, 0, 0 ], [ 3, 4, 1, 0 ], [ 4, 2, 2, 0 ], [ 5, 0, 3, 0 ], [ 5, 2, 0, 1 ], [ 6, 0, 1, 1 ], [ 0, 1, 2, 3 ], [ 1, 1, 0, 4 ] ] gap> MaximalDenumerantOfSetOfFactorizations(last); 6
‣ MaximalDenumerant ( S ) | ( operation ) |
‣ MaximalDenumerantOfNumericalSemigroup ( S ) | ( function ) |
S is a numerical semigroup. The output is the maximal denumerant of S, that is, the maximum of the maximal denumerants of the elements in S (see [BH13]).
gap> s:=NumericalSemigroup(101,113,196,272,278,286);; gap> MaximalDenumerant(s); 4 gap> MaximalDenumerantOfNumericalSemigroup(s); 4
‣ Adjustment ( S ) | ( operation ) |
‣ AdjustmentOfNumericalSemigroup ( S ) | ( function ) |
S is a numerical semigroup. The output is the adjustment of S as defined in [BH13].
gap> s:=NumericalSemigroup(101,113,196,272,278,286);; gap> a := Adjustment(s); [ 0, 12, 24, 36, 48, 60, 72, 84, 95, 96, 107, 108, 119, 120, 131, 132, 143, 144, 155, 156, 167, 168, 171, 177, 179, 180, 183, 185, 189, 190, 191, 192, 195, 197, 201, 203, 204, 207, 209, 213, 215, 216, 219, 221, 225, 227, 228, 231, 233, 237, 239, 240, 243, 245, 249, 251, 252, 255, 257, 261, 263, 264, 266, 267, 269, 273, 275, 276, 279, 280, 281, 285, 287, 288, 292, 293, 299, 300, 304, 305, 311, 312, 316, 317, 323, 324, 328, 329, 335, 336, 340, 341, 342, 347, 348, 352, 353, 354, 356, 359, 360, 361, 362, 364, 365, 366, 368, 370, 371, 372, 374, 376, 377, 378, 380, 382, 383, 384, 388, 389, 390, 394, 395, 396, 400, 401, 402, 406, 407, 408, 412, 413, 414, 418, 419, 420, 424, 425, 426, 430, 431, 432, 436, 437, 438, 442, 444, 448, 450, 451, 454, 456, 460, 465, 466, 472, 477, 478, 484, 489, 490, 496, 501, 502, 508, 513, 514, 519, 520, 525, 526, 527, 531, 532, 533, 537, 539, 543, 545, 549, 551, 555, 561, 567, 573, 579, 585, 591, 597, 603, 609, 615, 621, 622, 627, 698, 704, 710, 716, 722 ] gap> AdjustmentOfNumericalSemigroup(s) = a; true
This section is devoted to invariants that rely on the concept of distance between two factorizations.
‣ CatenaryDegree ( ls ) | ( operation ) |
‣ CatenaryDegreeOfSetOfFactorizations ( ls ) | ( function ) |
ls is a set of factorizations (a list of lists of nonnegative integers with the same length). The output is the catenary degree of this set of factorizations.
gap> FactorizationsIntegerWRTList(100,[11,13,15,19]); [ [ 2, 6, 0, 0 ], [ 3, 4, 1, 0 ], [ 4, 2, 2, 0 ], [ 5, 0, 3, 0 ], [ 5, 2, 0, 1 ], [ 6, 0, 1, 1 ], [ 0, 1, 2, 3 ], [ 1, 1, 0, 4 ] ] gap> CatenaryDegree(last); 5 gap> CatenaryDegreeOfSetOfFactorizations(last2); 5
‣ AdjacentCatenaryDegreeOfSetOfFactorizations ( ls ) | ( function ) |
ls is a set of factorizations. The output is the adjacent catenary degree of this set of factorizations, that is, the supremum of the distance between to sets of factorizations with adjacent lengths. More precisely, if l_1,...,l_t are the lengths of the factorizations of the elements in ls, and Z_l_i is the set of factorizations in ls with length l_i, then the adjacent catenary degree is the maximum of the distances mathrm d (Z_l_i,Z_l_i+1}).
gap> FactorizationsIntegerWRTList(100,[11,13,15,19]); [ [ 2, 6, 0, 0 ], [ 3, 4, 1, 0 ], [ 4, 2, 2, 0 ], [ 5, 0, 3, 0 ], [ 5, 2, 0, 1 ], [ 6, 0, 1, 1 ], [ 0, 1, 2, 3 ], [ 1, 1, 0, 4 ] ] gap> AdjacentCatenaryDegreeOfSetOfFactorizations(last); 5
‣ EqualCatenaryDegreeOfSetOfFactorizations ( ls ) | ( function ) |
ls is a set of factorizations. The same as CatenaryDegreeOfSetOfFactorizations, but now the factorizations joined by the chain must have the same length, and the elements in the chain also. Equivalently, if l_1,...,l_t are the lengths of the factorizations of the elements in ls, and Z_l_i is the set of factorizations in ls with length l_i, then the equal catenary degree is the maximum of the CatenaryDegreeOfSetOfFactorizations of mathrm d (Z_l_i,Z_l_i+1}).
gap> FactorizationsIntegerWRTList(100,[11,13,15,19]); [ [ 2, 6, 0, 0 ], [ 3, 4, 1, 0 ], [ 4, 2, 2, 0 ], [ 5, 0, 3, 0 ], [ 5, 2, 0, 1 ], [ 6, 0, 1, 1 ], [ 0, 1, 2, 3 ], [ 1, 1, 0, 4 ] ] gap> EqualCatenaryDegreeOfSetOfFactorizations(last); 2
‣ MonotoneCatenaryDegreeOfSetOfFactorizations ( ls ) | ( function ) |
ls is a set of factorizations. The same as CatenaryDegreeOfSetOfFactorizations, but now the factorizations are joined by a chain with nondecreasing lengths. Equivalently, it is the maximum of the AdjacentCatenaryDegreeOfSetOfFactorizations and the EqualCatenaryDegreeOfSetOfFactorizations.
gap> FactorizationsIntegerWRTList(100,[11,13,15,19]); [ [ 2, 6, 0, 0 ], [ 3, 4, 1, 0 ], [ 4, 2, 2, 0 ], [ 5, 0, 3, 0 ], [ 5, 2, 0, 1 ], [ 6, 0, 1, 1 ], [ 0, 1, 2, 3 ], [ 1, 1, 0, 4 ] ] gap> MonotoneCatenaryDegreeOfSetOfFactorizations(last); 5
‣ CatenaryDegree ( n, S ) | ( operation ) |
‣ CatenaryDegree ( S, n ) | ( operation ) |
‣ CatenaryDegreeOfElementInNumericalSemigroup ( n, S ) | ( function ) |
n is a nonnegative integer and S is a numerical semigroup. The output is the catenary degree of n relative to S.
gap> CatenaryDegree(157,NumericalSemigroup(13,18)); 0 gap> CatenaryDegree(NumericalSemigroup(13,18),1157); 18 gap> CatenaryDegreeOfElementInNumericalSemigroup(1157,NumericalSemigroup(13,18)); 18
‣ TameDegree ( ls ) | ( operation ) |
‣ TameDegreeOfSetOfFactorizations ( ls ) | ( function ) |
ls is a set of factorizations (a list of lists of nonnegative integers with the same length). The output is the tame degree of this set of factorizations.
gap> FactorizationsIntegerWRTList(100,[11,13,15,19]); [ [ 2, 6, 0, 0 ], [ 3, 4, 1, 0 ], [ 4, 2, 2, 0 ], [ 5, 0, 3, 0 ], [ 5, 2, 0, 1 ], [ 6, 0, 1, 1 ], [ 0, 1, 2, 3 ], [ 1, 1, 0, 4 ] ] gap> TameDegree(last); 4 gap> TameDegreeOfSetOfFactorizations(last2); 4
‣ CatenaryDegree ( S ) | ( operation ) |
‣ CatenaryDegreeOfNumericalSemigroup ( S ) | ( function ) |
S is a numerical semigroup. The output is the catenary degree of S.
gap> s:=NumericalSemigroup(101,113,196,272,278,286); <Numerical semigroup with 6 generators> gap> CatenaryDegree(s); 8 gap> CatenaryDegreeOfNumericalSemigroup(s); 8
‣ DegreesOffEqualPrimitiveElementsOfNumericalSemigroup ( S ) | ( function ) |
S is a numerical semigroup.
The output is the set of elements s in S such that there exists a minimal solution to msg⋅ x-msg⋅ y = 0, such that x,y are factorizations with the same length of s, and msg is the minimal generating system of S. These elements are used to compute the equal catenary degree of S.
gap> s:=NumericalSemigroup(3,5,7);; gap> DegreesOfEqualPrimitiveElementsOfNumericalSemigroup(s); [ 3, 5, 7, 10 ]
‣ EqualCatenaryDegreeOfNumericalSemigroup ( S ) | ( function ) |
S is a numerical semigroup. The output is the equal catenary degree of S.
gap> s:=NumericalSemigroup(3,5,7);; gap> EqualCatenaryDegreeOfNumericalSemigroup(s); 2
‣ DegreesOfMonotonePrimitiveElementsOfNumericalSemigroup ( S ) | ( function ) |
S is a numerical semigroup.
The output is the set of elements s in S such that there exists a minimal solution to msg⋅ x-msg⋅ y = 0, such that x,y are factorizations of s, with |x|≤ |y|; msg stands the minimal generating system of S. These elements are used to compute the monotone catenary degree of S.
gap> s:=NumericalSemigroup(3,5,7);; gap> DegreesOfMonotonePrimitiveElementsOfNumericalSemigroup(s); [ 3, 5, 7, 10, 12, 14, 15, 21, 28, 35 ]
‣ MonotoneCatenaryDegreeOfNumericalSemigroup ( S ) | ( function ) |
S is a numerical semigroup. The output is the monotone catenary degree of S.
gap> s:=NumericalSemigroup(10,23,31,44);; gap> CatenaryDegreeOfNumericalSemigroup(s); 9 gap> MonotoneCatenaryDegreeOfNumericalSemigroup(s); 21
‣ TameDegree ( S ) | ( operation ) |
‣ TameDegreeOfNumericalSemigroup ( S ) | ( function ) |
S is a numerical semigroup. The output is the tame degree of S.
gap> s:=NumericalSemigroup(101,113,196,272,278,286); <Numerical semigroup with 6 generators> gap> TameDegree(s); 14 gap> TameDegreeOfNumericalSemigroup(s); 14
‣ TameDegree ( n, S ) | ( operation ) |
‣ TameDegree ( S, n ) | ( operation ) |
‣ TameDegreeOfElementInNumericalSemigroup ( n, S ) | ( function ) |
n is an element of the numerical semigroup S. The output is the tame degree of n in S.
gap> s:=NumericalSemigroup(10,11,13);; gap> TameDegree(100,s); 5 gap> TameDegree(s,100); 5 gap> TameDegreeOfElementInNumericalSemigroup(100,s); 5
There are no primes among the irreducible elements (minimal generators) of a numerical semigroup. However, there is a way to measure how far an element is frome being prime: the ω-primality.
‣ OmegaPrimality ( n, S ) | ( operation ) |
‣ OmegaPrimality ( S, n ) | ( operation ) |
‣ OmegaPrimalityOfElementInNumericalSemigroup ( n, S ) | ( function ) |
n is an element of the numerical semigroup S. The output is the ω-primality of n in S as explained in [BGG11]. The current implementation is due to Chris O'Neill based on a work in progress with Pelayo and Thomas.
gap> s:=NumericalSemigroup(10,11,13);; gap> OmegaPrimality(100,s); 13 gap> OmegaPrimality(s,100); 13 gap> OmegaPrimalityOfElementInNumericalSemigroup(100,s); 13
‣ OmegaPrimalityOfElementListInNumericalSemigroup ( l, S ) | ( function ) |
S is a numerical semigroup and l a list of elements of S.
Computes the omega-values of all the elements in l.
gap> s:=NumericalSemigroup(10,11,13);; gap> l:=FirstElementsOfNumericalSemigroup(100,s);; gap> List(l,x->OmegaPrimalityOfElementInNumericalSemigroup(x,s)); time; [ 0, 4, 5, 5, 4, 6, 7, 6, 6, 6, 6, 7, 8, 7, 7, 7, 7, 7, 8, 7, 8, 9, 8, 8, 8, 8, 8, 8, 8, 9, 9, 10, 9, 9, 9, 9, 9, 9, 9, 9, 10, 11, 10, 10, 10, 10, 10, 10, 10, 10, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 12, 13, 12, 12, 12, 12, 12, 12, 12, 12, 13, 14, 13, 13, 13, 13, 13, 13, 13, 13, 14, 15, 14, 14, 14, 14, 14, 14, 14, 14, 15, 16, 15, 15, 15, 15, 15, 15, 15, 15 ] 218 gap> OmegaPrimalityOfElementListInNumericalSemigroup(l,s);time; [ 0, 4, 5, 5, 4, 6, 7, 6, 6, 6, 6, 7, 8, 7, 7, 7, 7, 7, 8, 7, 8, 9, 8, 8, 8, 8, 8, 8, 8, 9, 9, 10, 9, 9, 9, 9, 9, 9, 9, 9, 10, 11, 10, 10, 10, 10, 10, 10, 10, 10, 11, 12, 11, 11, 11, 11, 11, 11, 11, 11, 12, 13, 12, 12, 12, 12, 12, 12, 12, 12, 13, 14, 13, 13, 13, 13, 13, 13, 13, 13, 14, 15, 14, 14, 14, 14, 14, 14, 14, 14, 15, 16, 15, 15, 15, 15, 15, 15, 15, 15 ] 10
‣ OmegaPrimality ( S ) | ( operation ) |
‣ OmegaPrimalityOfNumericalSemigroup ( S ) | ( function ) |
S is a numerical semigroup. The output is the maximum of the ω-primalities of the minimal generators of S.
gap> s:=NumericalSemigroup(10,11,13); <Numerical semigroup with 3 generators> gap> OmegaPrimality(s); 5 gap> OmegaPrimalityOfNumericalSemigroup(s); 5
Let S be a numerical semigroup minimally generated by {m_1,...,m_n}. The homogenization of S, S^mathrmhom is the semigroup generated by {(1,0),(1,m_1),..., (1,m_n)}. The catenary degree of S^mathrmhom coincides with the homogeneous catenary degree of S, and it is between the catenary and the monotone catenary degree of S. The advantage of this catenary degree is that is less costly to compute than the monotone catenary degree, and has some nice interpretations ([GSOSt13]). This section contains the auxiliary functions needed to compute the homogeneous catenary degree.
‣ BelongsToHomogenizationOfNumericalSemigroup ( n, S ) | ( function ) |
S is a numerical semigroup and n a list with two entries (a pair). The output is true if the n belongs to the homogenization of S.
gap> s:=NumericalSemigroup(10,11,13);; gap> BelongsToHomogenizationOfNumericalSemigroup([10,23],s); true gap> BelongsToHomogenizationOfNumericalSemigroup([1,23],s); false
‣ FactorizationsInHomogenizationOfNumericalSemigroup ( n, S ) | ( function ) |
S is a numerical semigroup and n a list with two entries (a pair). The output is the set of factorizations n in terms of the minimal generating system of the homogenization of S.
gap> s:=NumericalSemigroup(10,11,13);; gap> FactorizationsInHomogenizationOfNumericalSemigroup([20,230],s); [ [ 0, 0, 15, 5 ], [ 0, 2, 12, 6 ], [ 0, 4, 9, 7 ], [ 0, 6, 6, 8 ], [ 0, 8, 3, 9 ], [ 0, 10, 0, 10 ], [ 1, 1, 7, 11 ], [ 1, 3, 4, 12 ], [ 1, 5, 1, 13 ], [ 2, 0, 2, 16 ] ] gap> FactorizationsElementWRTNumericalSemigroup(230,s); [ [ 23, 0, 0 ], [ 12, 10, 0 ], [ 1, 20, 0 ], [ 14, 7, 1 ], [ 3, 17, 1 ], [ 16, 4, 2 ], [ 5, 14, 2 ], [ 18, 1, 3 ], [ 7, 11, 3 ], [ 9, 8, 4 ], [ 11, 5, 5 ], [ 0, 15, 5 ], [ 13, 2, 6 ], [ 2, 12, 6 ], [ 4, 9, 7 ], [ 6, 6, 8 ], [ 8, 3, 9 ], [ 10, 0, 10 ], [ 1, 7, 11 ], [ 3, 4, 12 ], [ 5, 1, 13 ], [ 0, 2, 16 ] ]
‣ HomogeneousBettiElementsOfNumericalSemigroup ( S ) | ( function ) |
S is a numerical semigroup. The output is the set of Betti elements of the homogenization of S.
gap> s:=NumericalSemigroup(10,17,19);; gap> BettiElements(s); [ 57, 68, 70 ] gap> HomogeneousBettiElementsOfNumericalSemigroup(s); [ [ 5, 57 ], [ 5, 68 ], [ 6, 95 ], [ 7, 70 ], [ 9, 153 ] ]
‣ HomogeneousCatenaryDegreeOfNumericalSemigroup ( S ) | ( function ) |
S is a numerical semigroup. The output is the homogeneous catenary degree of S. Observe that for a single element in the homogenization of S, its catenary degree can be computed with CatenaryDegreeOfSetOfFactorizations
and FactorizationsInHomogenizationOfNumericalSemigroup
.
gap> s:=NumericalSemigroup(10,17,19);; gap> CatenaryDegree(s); 7 gap> HomogeneousCatenaryDegreeOfNumericalSemigroup(s); 9
Given a numerical semigroup S and two integers a,b, we write a≤_S b if b-a∈ S. We also say that a divides b (with respect to S). The semigroup S with this binary relation is a poset.
The set of divisors of n in S will be denoted by mathrmD_S(n). If we are given n_1,...,n_r∈ S, the set of the divisors of these elements is mathrmD(n_1,..., n_r)= ⋃_i=1^r mathrmD(n_i).
For a numerical semigroup S, we can define the sequence {ν_i}_i≥ 1, with ν_i the number of divisors of the ith element in S. It can be shown that the first 2g-c elements of the sequence uniquely determine the semigroup (with c the conductor of S and g its genus), see [Bra13].
There is another sequence associated to divisors that also determines the semigroup. Let S={λ_0=0 < λ_1 dots} be a numerical semigroup. We can define the following binary operation on N: i⊕_S i=k, where k is such that λ_i+λ_j=λ_k. Set τ_i=max{ j∈ N: hbox exists k∈{j,...,i} hbox with j⊕_S k=i}. The first 2c-g+1 determine uniquely S (see [Bra13]).
Translated to code, the definition of τ_i could be as follows.
TauNS := function(i,S) local d, D, si; D:=DivisorsOfElementInNumericalSemigroup(S[i+1],S); si:=S[i+1]; d:=Maximum(Intersection(D,[0..Int(si/2)])); return NumberElement_NumericalSemigroup(S,d)-1; end;
‣ MoebiusFunctionAssociatedToNumericalSemigroup ( S, n ) | ( function ) |
S is a numerical semigroup and n is an integer. As (S,≤_S) is a poset, we can define the Möbius function associated to it as in [CRA13]. The output is the value of the Möbius function in the integer n, that is, the alternate sum of the number of chains from 0 to n.
gap> s:=NumericalSemigroup(3,5,7);; gap> MoebiusFunctionAssociatedToNumericalSemigroup(s,10); 2 gap> MoebiusFunctionAssociatedToNumericalSemigroup(s,34); 25
‣ MoebiusFunction ( S ) | ( operation ) |
S is a numerical semigroup. As (S,≤_S) is a poset, we can define the Möbius function associated to it as in [CRA13]. The output is the Möbius function associated to S.
gap> s:=NumericalSemigroup(3,5,7);; gap> List([1..10],MoebiusFunction(s)); [ 0, 0, -1, 0, -1, 0, -1, 1, 0, 2 ]
‣ DivisorsOfElementInNumericalSemigroup ( S, n ) | ( operation ) |
S is a numerical semigroup and n is an integer. The arguments can also be given as n, S. The output is the set of divisors of n in S.
gap> s:=NumericalSemigroup(5,7,11);; gap> DivisorsOfElementInNumericalSemigroup(s,20); [ 0, 5, 10, 15, 20 ] gap> DivisorsOfElementInNumericalSemigroup(20,s); [ 0, 5, 10, 15, 20 ]
‣ NumericalSemigroupByNuSequence ( nuseq ) | ( function ) |
nuseq is a list of integers that represents a ν-sequence, that is, the ith element in the sequence is the number of divisors of the ith element in a certain numerical semigroup. Though the sequence is finite, it is understood that from the last element every entry increases exactly by one.
The output is the only numerical semigroup whose ν-sequence is nusec∪ {k,k+1, ...} (with k the last element of nusec).
The implementation is inspired in Theorem 1.54 in [Bra13].
gap> NuSequence:=S->List([1..2*Conductor(S)-Genus(S)], i->Length(DivisorsOfElementInNumericalSemigroup(S[i],S)));; gap> s:=NumericalSemigroup(5,7,11);; gap> NuSequence(s); [ 1, 2, 2, 3, 2, 4, 3, 4, 4, 6, 4, 6, 5, 8, 9, 8, 9, 10, 12, 12 ] gap> s=NumericalSemigroupByNuSequence(last); true
‣ NumericalSemigroupByTauSequence ( tauseq ) | ( function ) |
tauseq is a list of integers that represents a τ-sequence. Though the sequence is finite, it is understood that τ_k+2i = τ_k+2i+1, with k the length of the list, and this amount increases by one as i increases.
The output is the only numerical semigroup whose τ-sequence is tausec∪ {l+1,l+1,l+2,l+2, ...} (with l the last element of tausec).
The implementation is inspired in Theorem 1.60 in [Bra13].
gap> tau:=[ 0, 0, 0, 0, 1, 1, 2, 2, 3, 0, 1, 2, 3, 3, 3, 3, 4, 4 ]; [ 0, 0, 0, 0, 1, 1, 2, 2, 3, 0, 1, 2, 3, 3, 3, 3, 4, 4 ] gap> MinimalGenerators(NumericalSemigroupByTauSequence(tau)); [ 6, 7, 8, 17 ]
Let S be a numerical semigroup and let n∈ S. The Feng-Rao distance of n is then defined as δ_S(n)=min{ #mathrmD(x)∣ n≤ x, x∈ S}.
The rth generalized distance is δ_S^r(n)={ #mathrmD(n_1,...,n_r) ∣ n≤ n_1 < ⋯ < n_r, n_i∈ S}.
‣ FengRaoDistance ( S, r, m ) | ( function ) |
S is a numerical semigroup, r and m integers. The output is the r-th Feng-Rao distance of the element m in the numerical semigroup S.
gap> S := NumericalSemigroup(7,9,17);; gap> FengRaoDistance(S,6,100); 86
‣ FengRaoNumber ( S, r ) | ( operation ) |
S is a numerical semigroup and r is an integer. The output is the r-th Feng-Rao number of the numerical semigroup S.
gap> S := NumericalSemigroup(7,8,17);; gap> FengRaoNumber(S,209); 224 gap> FengRaoNumber(209,S); 224
Let S be a numerical semigroup with maximal ideal M, and let x∈ S. The order of x, denoted ord(x) is the largest positive integer k such that x∈ kM∖(k+1)M. Notice that the order of an element corresponds with MaximumDegreeOfElementWRTNumericalSemigroup
(9.2-12).
Recall that for x,y∈ Z, we write x≤_S y if y-x∈ S. Define the relation preceq_S on S as xpreceq_S y if x≤_S y and ord(y)=ord(x)+ord(y-x).
A numerical semigroup S with multiplicity m is said to be pure if the maximal elements of Ap(S,m) with respect to ≤_S have all the same order. The semigroup S is M-pure if the maximal elements of Ap(S,m) with respect to preceq_S have all the same order, [Bry10].
The numerical semigroup S is said to be homogeneous if for every element in Ap(S,m), its set of lengths is a singleton (that is, all its a factorizations have the same length), [JZA18].
A numerical semigroup S is supersymmetric if it is symmetric, additive, and whenever w+w'=f+m for some w,w'∈ Ap(S,m) (with m the multiplicity and f the Frobenius number), we have ord(w+w')=ord(w)+ord(w'), see [BH13]).
‣ IsPure ( S ) | ( property ) |
‣ IsPureNumericalSemigroup ( S ) | ( property ) |
S is a numerical semigroup.
Test for the purity of the numerical semigroup S S. This test is based on [Bry10].
gap> s:=NumericalSemigroup(30, 35, 42, 47, 148, 153, 157, 169, 181, 193);; gap> IsPure(s); false gap> s:=NumericalSemigroup(4,6,11);; gap> IsPureNumericalSemigroup(s); true
‣ IsMpure ( S ) | ( property ) |
‣ IsMpureNumericalSemigroup ( S ) | ( property ) |
S is a numerical semigroup.
Test for the M-Purity of the numerical semigroup S S. This test is based on [Bry10].
This filter implies IsPureNumericalSemigroup
(9.8-1).
gap> s:=NumericalSemigroup(30, 35, 42, 47, 148, 153, 157, 169, 181, 193);; gap> IsMpure(s); false gap> s:=NumericalSemigroup(4,6,11);; gap> IsMpureNumericalSemigroup(s); true
‣ IsHomogeneousNumericalSemigroup ( S ) | ( property ) |
S is a numerical semigroup.
Detects if S is homogeneous.
gap> s:=NumericalSemigroup(10,11,12,25);; gap> IsHomogeneousNumericalSemigroup(s); false gap> s:=NumericalSemigroup(3,5,7);; gap> IsHomogeneousNumericalSemigroup(s); true
‣ IsSuperSymmetricNumericalSemigroup ( S ) | ( function ) |
S is a numerical semigroup. Detects if S is supersymmetric.
gap> l:=IrreducibleNumericalSemigroupsWithFrobeniusNumber(31);; gap> Length(l); 109 gap> Length(Filtered(l,IsSuperSymmetricNumericalSemigroup)); 7
generated by GAPDoc2HTML