Definitions and basic operations We describe in this section the basic functions to create and compute notable elements of ideals of numerical semigroups. We also include iterators and functions to treat ideals as lists, which easies the access to its elements. S is a numerical semigroup and l a list of integers. The output is the ideal of S generated by l.

There are several shortcuts for this function, as shown in the example.
gap> IdealOfNumericalSemigroup([3,5],NumericalSemigroup(9,11)); <Ideal of numerical semigroup> gap> [3,5]+NumericalSemigroup(9,11); <Ideal of numerical semigroup> gap> last=last2; true gap> 3+NumericalSemigroup(5,9); <Ideal of numerical semigroup>
Tests if the object Obj is an ideal of a numerical semigroup.
gap> I:=[1..7]+NumericalSemigroup(7,19);; gap> IsIdealOfNumericalSemigroup(I); true gap> IsIdealOfNumericalSemigroup(2); false
I is an ideal of a numerical semigroup. The output is the minimal system of generators of I.
gap> MinimalGenerators([3,5]+NumericalSemigroup(2,11)); [ 3 ] gap> I:=[3,5,9]+NumericalSemigroup(2,11);; gap> MinimalGeneratingSystem(I); [ 3 ] gap> MinimalGeneratingSystemOfIdealOfNumericalSemigroup(I); [ 3 ]
I is an ideal of a numerical semigroup. The output is a system of generators of the ideal.

Remark: from Version 1.0.1 on, this value does not change even when a set of minimal generators is computed.
gap> I:=[3,5,9]+NumericalSemigroup(2,11);; gap> Generators(I); [ 3, 5, 9 ] gap> GeneratorsOfIdealOfNumericalSemigroup(I); [ 3, 5, 9 ] gap> MinimalGenerators(I); [ 3 ]
I is an ideal of a numerical semigroup, say S. The output is S.
gap> I:=[3,5,9]+NumericalSemigroup(2,11);; gap> AmbientNumericalSemigroupOfIdeal(I); <Numerical semigroup with 2 generators>
I is an ideal of a numerical semigroup, say S. Detects if I\subseteq S.
gap> s:=NumericalSemigroup(3,7,5);; gap> IsIntegral(10+s); true gap> IsIntegral(4+s); false gap> IsIntegralIdealOfNumericalSemigroup(10+s); true
S is a numerical semigroup and X is a subset of S. Determines if the subset X of S is the complement of an integral ideal of S.
gap> s:=NumericalSemigroup(10,11,15,19);; gap> i:=[20,21,25]+s;; gap> d:=Difference(0+s,i); [ 0, 10, 11, 15, 19, 22, 26, 29, 33, 34, 37, 38, 48 ] gap> IsComplementOfIntegralIdeal(d,s); true gap> d:=DivisorsOfElementInNumericalSemigroup(50,s); [ 0, 10, 11, 15, 19, 20, 21, 25, 29, 30, 31, 35, 39, 40, 50 ] gap> IsComplementOfIntegralIdeal(d,s); true
S is a numerical semigroup and X is a subset of S with the following property: for all x in X and every y in S with x-y in S, the integer y is also in X. The output is the integral ideal S\setminus X.
gap> s:=NumericalSemigroup(10,11,15,19);; gap> i:=[20,21,25]+s;; gap> d:=Difference(0+s,i); [ 0, 10, 11, 15, 19, 22, 26, 29, 33, 34, 37, 38, 48 ] gap> i=IdealByDivisorClosedSet(d,s); true
I is an ideal of a numerical semigroup. The output is a list with the elements in I that are less than or equal to the greatest integer not belonging to the ideal plus one.
gap> I:=[3,5,9]+NumericalSemigroup(2,11);; gap> SmallElements(I); [ 3, 5, 7, 9, 11, 13 ] gap> SmallElements(I) = SmallElementsOfIdealOfNumericalSemigroup(I); true gap> J:=[2,11]+NumericalSemigroup(2,11);; gap> SmallElements(J); [ 2, 4, 6, 8, 10 ]
I is an ideal of a numerical semigroup. The output is the largest element in SmallElements(I).
gap> s:=NumericalSemigroup(3,7,5);; gap> Conductor(10+s); 15 gap> ConductorOfIdealOfNumericalSemigroup(10+s); 15
I is an ideal of a numerical semigroup. The output is the largest element not belonging to I.
gap> s:=NumericalSemigroup(3,7,5);; gap> FrobeniusNumber(0+s); 4
I is an ideal of a numerical semigroup. The output is the set of pseudo-Frobenius numbers of I, that is the set I-M\setminus I, with M the maximal ideal of the ambient semigroup of I (see ).
gap> s:=NumericalSemigroup(3,5,7);; gap> i:=4+s;; gap> PseudoFrobenius(i); [ 6, 8 ] gap> PseudoFrobenius(s)=PseudoFrobenius(0+s); true
I is an ideal of a numerical semigroup. The output is the cardinality of the set of pseudo-Frobenius numbers of I (see ).
gap> s:=NumericalSemigroup(3,5,7);; gap> k:=CanonicalIdeal(s);; gap> Type(k); 1
I is an ideal of a numerical semigroup. The output is the minimum of I.
gap> J:=[2,11]+NumericalSemigroup(2,11);; gap> Minimum(J); 2
I is an ideal of a numerical semigroup, n is an integer. The output is true if n belongs to I.

n in I can be used for short.
gap> J:=[2,11]+NumericalSemigroup(2,11);; gap> BelongsToIdealOfNumericalSemigroup(9,J); false gap> 9 in J; false gap> BelongsToIdealOfNumericalSemigroup(10,J); true gap> 10 in J; true
I is an ideal of a numerical semigroup and r is an integer. It returns the r-th element of I.
gap> I := [2,5]+ NumericalSemigroup(7,8,17);; gap> ElementNumber_IdealOfNumericalSemigroup(I,10); 19
I is an ideal of a numerical semigroup and r is an integer. It returns the position of r in I (and fail if the integer is not in the ideal).
gap> I := [2,5]+ NumericalSemigroup(7,8,17);; gap> NumberElement_IdealOfNumericalSemigroup(I,19); 10
I is an ideal of a numerical semigroup and r is an integer. It returns the r-th element of I.
gap> I := [2,5]+ NumericalSemigroup(7,8,17);; gap> I[10]; 19
I is an ideal of a numerical semigroup and ls is a list of integers. It returns the list [I[r] : r in ls].
gap> I := [2,5]+ NumericalSemigroup(7,8,17);; gap> I{[10..13]}; [ 19, 20, 21, 22 ]
I is an ideal of a numerical semigroup. It returns an iterator over I.
gap> s:=NumericalSemigroup(4,10,11);; gap> i:=[2,3]+s;; gap> iter:=Iterator(i); <iterator> gap> NextIterator(iter); 2 gap> NextIterator(iter); 3 gap> NextIterator(iter); 6 gap> SmallElements(i); [ 2, 3, 6, 7, 10 ]
I, J are ideals of a numerical semigroup. The output is the sum of both ideals \{ i+j \ |\ i\in I, j\in J\}.
gap> I:=[3,5,9]+NumericalSemigroup(2,11);; gap> J:=[2,11]+NumericalSemigroup(2,11);; gap> I+J; <Ideal of numerical semigroup> gap> MinimalGeneratingSystemOfIdealOfNumericalSemigroup(last); [ 5, 14 ] gap> SumIdealsOfNumericalSemigroup(I,J); <Ideal of numerical semigroup> gap> MinimalGeneratingSystemOfIdealOfNumericalSemigroup(last); [ 5, 14 ]
I is an ideal of a numerical semigroup, n is a non negative integer. The output is the ideal I+\cdots+I (n times).

n * I can be used for short.
gap> I:=[0,1]+NumericalSemigroup(3,5,7);; gap> MultipleOfIdealOfNumericalSemigroup(2,I) = 2*I; true gap> MinimalGeneratingSystemOfIdealOfNumericalSemigroup(2*I); [ 0, 1, 2 ]
I, J are ideals of a numerical semigroup. The output is the ideal \{ z\in {\mathbb Z}\ |\ z+J\subseteq I\}.

I - J can be used as a short for SubtractIdealsOfNumericalSemigroup(I,J).

S-J is a synonym of (0+S)-J, if S is the ambient semigroup of I and J. The following example appears in .
gap> S:=NumericalSemigroup(14, 15, 20, 21, 25);; gap> I:=[0,1]+S;; gap> II:=S-I;; gap> MinimalGenerators(I); [ 0, 1 ] gap> MinimalGenerators(II); [ 14, 20 ] gap> MinimalGenerators(I+II); [ 14, 15, 20, 21 ]
I, J are ideals of a numerical semigroup. J must be contained in I. The output is the set I\setminus J.
gap> S:=NumericalSemigroup(14, 15, 20, 21, 25);; gap> I:=[0,1]+S; <Ideal of numerical semigroup> gap> 2*I-2*I; <Ideal of numerical semigroup> gap> I-I; <Ideal of numerical semigroup> gap> ii := 2*I-2*I; <Ideal of numerical semigroup> gap> i := I-I; <Ideal of numerical semigroup> gap> Difference(last2,last); [ 26, 27, 37, 38 ] gap> DifferenceOfIdealsOfNumericalSemigroup(ii,i); [ 26, 27, 37, 38 ] gap> Difference(i,ii); [ ]
Given an ideal I of a numerical semigroup S and an integer k, returns an ideal of the numerical semigroup S generated by \{i_1+k,\ldots,i_n+k\}, where \{i_1,\ldots,i_n\} is the system of generators of I.

As a synonym to TranslationOfIdealOfNumericalSemigroup(k, I) the expression k + I may be used.
gap> s:=NumericalSemigroup(13,23);; gap> l:=List([1..6], _ -> Random([8..34])); [ 22, 29, 34, 25, 10, 12 ] gap> I:=IdealOfNumericalSemigroup(l, s);; gap> It:=TranslationOfIdealOfNumericalSemigroup(7,I); <Ideal of numerical semigroup> gap> It2:=7+I; <Ideal of numerical semigroup> gap> It2=It; true
I, J are ideals of a numerical semigroup. The output is the union of both ideals.
gap> s:=NumericalSemigroup(3,5,7);; gap> I:=2+s;; gap> J:=3+s;; gap> Union(I,J); <Ideal of numerical semigroup> gap> Generators(last); [ 2, 3 ]
Given two ideals I and J of a numerical semigroup S returns the ideal of the numerical semigroup S which is the intersection of the ideals I and J.
gap> i:=IdealOfNumericalSemigroup([75,89],s);; gap> j:=IdealOfNumericalSemigroup([115,289],s);; gap> Intersection(i,j); <Ideal of numerical semigroup> gap> IntersectionIdealsOfNumericalSemigroup(i,j) = Intersection(i,j); true
Returns the maximal ideal of the numerical semigroup S.
gap> s := NumericalSemigroup(3,7);; gap> MaximalIdeal(s); <Ideal of numerical semigroup> gap> MaximalIdealOfNumericalSemigroup(s) = MaximalIdeal(s); true
S is a numerical semigroup. Computes the (standard) canonical ideal of S (): \{ x \in \mathbb{Z} | g-x \not \in S\} , where g is the Frobenius number of S.
gap> s:=NumericalSemigroup(4,6,11);; gap> m:=MaximalIdeal(s);; gap> c:=CanonicalIdeal(s); <Ideal of numerical semigroup> gap> c-(c-m)=m; true gap> id:=3+s; <Ideal of numerical semigroup> gap> c-(c-id)=id; true gap> CanonicalIdealOfNumericalSemigroup(s) = c; true
E is an ideal of a numerical semigroup, say S. Determines if E is a translation of the canonical ideal of S, or equivalently, for every ideal J, E-(E-J)=J.
gap> s:=NumericalSemigroup(3,5,7);; gap> c:=3+CanonicalIdeal(s);; gap> c-(c-(3+s))=3+s; true gap> IsCanonicalIdeal(c); true gap> IsCanonicalIdealOfNumericalSemigroup(c); true
E is an ideal of a numerical semigroup, say S. Set I to be a translation of E so that its conductor is the same as the conductor of S, and let M and K be the maximal and canonical ideals of S, respectively. Then E is almost canonical if I-M=K-M (see ). Determines if E almost canonical.
gap> s:=NumericalSemigroup(3,5,7);; gap> IsAlmostSymmetric(s); true gap> IsAlmostCanonical(MaximalIdeal(s)); true
S is a numerical semigroup. Computes the trace ideal of S (), that is, K+(S-K), with K the canonical ideal of S.
gap> s:=NumericalSemigroup(3,5,7);; gap> MinimalGenerators(TraceIdeal(s)); [ 3, 5, 7 ]
S is a numerical semigroup.

Computes the type sequence of a numerical semigroup. That is, the secuence t_i(S)=\sharp(S(i)\setminus S(i-1)), with S(i)=\{ s\in S\mid s\ge s_i\} and s_i the ith element of S.

This function is the implementation of the algorithm given in .
gap> s:=NumericalSemigroup(30, 35, 42, 47, 148, 153, 157, 169, 181, 193);; gap> TypeSequence(s); [ 13, 3, 4, 4, 7, 3, 3, 3, 2, 2, 2, 3, 3, 2, 4, 3, 2, 1, 3, 2, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 3, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1 ] gap> s:=NumericalSemigroup(4,6,11);; gap> TypeSequenceOfNumericalSemigroup(s); [ 1, 1, 1, 1, 1, 1, 1 ]
Decomposition into irreducibles Let I be an ideal of a numerical semigroup S. We say that I is \mathbb{Z}-irreducible if it cannot be expressed as a finite intersection of other relative ideals properly containing it. Every ideal I can be expressed as an intersection of exactly t irreducible ideals of S, where t is the type of I. These irreducible ideals are unique and are known as the irreducible \mathbb{Z}-components of I. Recall that an ideal is integral (or proper) if it is contained in its ambient semigroup. We say that an integral ideal is irreducible if it cannot be expressed as an intersection of other proper integral ideals. Every integral ideal admits a unique decomposition into irredundant irreducible integral ideals. I is an ideal of a numerical semigroup. The output is the list of irreducible \mathbb{Z}-components of I. These are calculated using Proposition 24 in .
gap> s:=NumericalSemigroup(3,5,7);; gap> i:=[4,5]+s;; gap> zc:=IrreducibleZComponents(i); [ <Ideal of numerical semigroup>, <Ideal of numerical semigroup> ] gap> List(zc,MinimalGenerators); [ [ 2, 4 ], [ -2, 0 ] ] gap> i=Intersection(zc); true
I is an integral ideal of a numerical semigroup. The output is the list of irreducible integral ideals whose intersection is the unique irredundant decomposition of I into integral proper ideals. The computations are performed using Theorem 4 in .
gap> s:=NumericalSemigroup(3,5,7);; gap> i:=10+s;; gap> di:=DecomposeIntegralIdealIntoIrreducibles(i); [ <Ideal of numerical semigroup>, <Ideal of numerical semigroup> ] gap> List(di,MinimalGenerators); [ [ 8, 10 ], [ 10, 12 ] ] gap> i=Intersection(di); true
Blow ups and closures The blow up of an ideal I of a numerical semigroup is the ideal \bigcup_{n\geq 0} nI-nI. In this section we provide functions to compute the blow up and related invariants. I is an ideal of a numerical semigroup, n is a non negative integer. I must be contained in its ambient semigroup. The output is the cardinality of the set n I\setminus (n+1)I.
gap> I:=[6,9,11]+NumericalSemigroup(6,9,11);; gap> List([1..7],n->HilbertFunctionOfIdealOfNumericalSemigroup(n,I)); [ 3, 5, 6, 6, 6, 6, 6 ]
I is an ideal of a numerical semigroup. I must be contained in its ambient semigroup (integral ideal). The output is a function that maps to each n the cardinality of the set nI\setminus (n+1)I.
gap> I:=[6,9,11]+NumericalSemigroup(6,9,11);; gap> List([1..7],n->HilbertFunction(I)(n)); [ 3, 5, 6, 6, 6, 6, 6 ]
I is an ideal of a numerical semigroup. The output is the ideal \bigcup_{n\geq 0} nI-nI.
gap> I:=[0,2]+NumericalSemigroup(6,9,11);; gap> BlowUp(I); <Ideal of numerical semigroup> gap> SmallElements(last); [ 0, 2, 4, 6, 8 ] gap> BlowUpIdealOfNumericalSemigroup(I);; gap> SmallElementsOfIdealOfNumericalSemigroup(last); [ 0, 2, 4, 6, 8 ]
I is an ideal of a numerical semigroup. The output is the least integer such that n I + i=(n+1)I, where i=min(I).
gap> I:=[0,2]+NumericalSemigroup(6,9,11);; gap> ReductionNumber(I); 2 gap> ReductionNumberIdealNumericalSemigroup(I); 2
S is a numerical semigroup. If M is the maximal ideal of the numerical semigroup, then the output is the numerical semigroup \bigcup_{n\geq 0} nM-nM.
gap> s:=NumericalSemigroup(30, 35, 42, 47, 148, 153, 157, 169, 181, 193);; gap> BlowUp(s); <Numerical semigroup with 10 generators> gap> SmallElements(last); [ 0, 5, 10, 12, 15, 17, 20, 22, 24, 25, 27, 29, 30, 32, 34, 35, 36, 37, 39, 40, 41, 42, 44 ] gap> BlowUpOfNumericalSemigroup(s);; gap> SmallElements(last); [ 0, 5, 10, 12, 15, 17, 20, 22, 24, 25, 27, 29, 30, 32, 34, 35, 36, 37, 39, 40, 41, 42, 44 ] gap> m:=MaximalIdeal(s); <Ideal of numerical semigroup> gap> BlowUp(m); <Ideal of numerical semigroup> gap> SmallElements(last); [ 0, 5, 10, 12, 15, 17, 20, 22, 24, 25, 27, 29, 30, 32, 34, 35, 36, 37, 39, 40, 41, 42, 44 ]
This is just a synonym of .
gap> s:=NumericalSemigroup(30, 35, 42, 47, 148, 153, 157, 169, 181, 193);; gap> LipmanSemigroup(s); <Numerical semigroup with 10 generators> gap> SmallElementsOfNumericalSemigroup(last); [ 0, 5, 10, 12, 15, 17, 20, 22, 24, 25, 27, 29, 30, 32, 34, 35, 36, 37, 39, 40, 41, 42, 44 ]
I is an ideal of a numerical semigroup. The output is the least integer such that (n+1)I-nI is the Ratliff-Rush closure of I (see ).
gap> I:=[0,2]+NumericalSemigroup(6,9,11);; gap> RatliffRushNumber(I); 1 gap> RatliffRushNumberOfIdealOfNumericalSemigroup(I); 1
I is an ideal of a numerical semigroup. The output is the Ratliff-Rush closure of I: \bigcup_{n\in \mathbb{N}}(n+1)I-nI (see ).
gap> I:=[0,2]+NumericalSemigroup(6,9,11);; gap> RatliffRushClosure(I); <Ideal of numerical semigroup> gap> MinimalGenerators(last); [ 0, 2, 4 ] gap> RatliffRushClosureOfIdealOfNumericalSemigroup(I) = RatliffRushClosure(I); true
I is an ideal of a numerical semigroup. The output is the least n such that the Ratliff-Rush closure of mI equals mI for all m\ge n (see ).
gap> I:=[0,2]+NumericalSemigroup(6,9,11);; gap> AsymptoticRatliffRushNumber(I); 2 gap> AsymptoticRatliffRushNumberOfIdealOfNumericalSemigroup(I); 2
S is a numerical semigroup. The output is a list with the multiplicities of the sequence S\subseteq L(S)\subseteq \cdots \subseteq \mathbb{N}, where L(\cdot) means .
gap> s:=NumericalSemigroup(3,5);; gap> MultiplicitySequence(s); [ 3, 2, 1 ] gap> MultiplicitySequenceOfNumericalSemigroup(s); [ 3, 2, 1 ]
Returns the microinvariants of the numerical semigroup S defined in . For their computation we have used the formula given in . The Apéry set of S and its blow up are involved in this computation.
gap> s:=NumericalSemigroup(30, 35, 42, 47, 148, 153, 157, 169, 181, 193);; gap> bu:=BlowUpOfNumericalSemigroup(s);; gap> ap:=AperyListOfNumericalSemigroupWRTElement(s,30);; gap> apbu:=AperyListOfNumericalSemigroupWRTElement(bu,30);; gap> (ap-apbu)/30; [ 0, 4, 4, 3, 2, 1, 3, 4, 4, 3, 2, 3, 1, 4, 4, 3, 3, 1, 4, 4, 4, 3, 2, 4, 2, 5, 4, 3, 3, 2 ] gap> MicroInvariants(s)=last; true gap> MicroInvariantsOfNumericalSemigroup(s)=MicroInvariants(s); true
Apéry sets of ideals of numerical semigroups I is an ideal and n is an integer. Computes the set of elements x of I such that x-n is not in the ideal I, where n is supposed to be in the ambient semigroup of I. The element in the ith position of the output list (starting in 0) is congruent with i modulo n.
gap> s:=NumericalSemigroup(10,11,13);; gap> i:=[12,14]+s;; gap> AperyList(i,10); [ 40, 51, 12, 23, 14, 25, 36, 27, 38, 49 ] gap> AperyListOfIdealOfNumericalSemigroupWRTElement(i,10); [ 40, 51, 12, 23, 14, 25, 36, 27, 38, 49 ]
I is an ideal. Computes the Apéry list of I with respect to the multiplicity of its ambient numerical semigroup.
gap> s:=NumericalSemigroup(5,7,9);; gap> i:=[0,1,2]+s;; gap> AperyList(i); [ 0, 1, 2, 8, 9 ]
Computes the Apéry table associated to the numerical semigroup s as explained in , that is, a list containing the Apéry list of s with respect to its multiplicity and the Apéry lists of kM (with M the maximal ideal of s) with respect to the multiplicity of s, for k\in\{1,\ldots,r\}, where r is the reduction number of M (see ).
gap> s:=NumericalSemigroup(10,11,13);; gap> AperyTable(s); [ [ 0, 11, 22, 13, 24, 35, 26, 37, 48, 39 ], [ 10, 11, 22, 13, 24, 35, 26, 37, 48, 39 ], [ 20, 21, 22, 23, 24, 35, 26, 37, 48, 39 ], [ 30, 31, 32, 33, 34, 35, 36, 37, 48, 39 ], [ 40, 41, 42, 43, 44, 45, 46, 47, 48, 49 ] ] gap> AperyTableOfNumericalSemigroup(s) = AperyTable(s); true
i is an ideal and is is a set of ideals (all from the same numerical semigroups). The output is i^{*_{is}}, where *_{is} is the star operation generated by is: (s-(s-i))\bigcap_{k\in is} (k-(k-i)). The implementation uses Section 3 of .
gap> s:=NumericalSemigroup(3,5,7);; gap> StarClosureOfIdealOfNumericalSemigroup([0,2]+s,[[0,4]+s]);; gap> MinimalGenerators(last); [ 0, 2, 4 ]
Patterns for ideals In this section we document the functions implemented by K. Stokes related to patterns of ideals in numerical semigroups. The correctness of the algorithms can be found in . p is the list of integers that are the coefficients of a pattern.

Returns true or false depending if the pattern is admissible or not (see ).
gap> IsAdmissiblePattern([1,1,-1]); true gap> IsAdmissiblePattern([1,-2]); false
p is the list of integers that are the coefficients of a pattern.

Returns true or false depending if the pattern is strongly admissible or not (see ).
gap> IsAdmissiblePattern([1,-1]); true gap> IsStronglyAdmissiblePattern([1,-1]); false gap> IsStronglyAdmissiblePattern([1,1,-1]); true
I is an ideal of a numerical semigroup S, and T is a numerical semigroup. Detects if I is an ideal of T and contained in T (integral ideal), and if so, returns I as an ideal of T. It returns fail if I is an ideal of some semigroup but not an integral ideal of T.
gap> s:=NumericalSemigroup(3,7,5);; gap> t:=NumericalSemigroup(10,11,14);; gap> AsIdealOfNumericalSemigroup(10+s,t); fail gap> AsIdealOfNumericalSemigroup(100+s,t); <Ideal of numerical semigroup>
p is the list of integers that are the coefficients of an admissible pattern. C is a positive integer. Calculates an upper bound of the smallest element K in p(I) such that all integers larger than K belong to p(I), where I is an ideal of a numerical semigroup. Instead of taking I as parameter, the function takes C, which is assumed to be the conductor of I.
gap> BoundForConductorOfImageOfPattern([1,1,-1],10); 10
p is the list of integers that are the coefficients of a strongly admissible pattern. I is an ideal of a numerical semigroup.

Outputs p(I), represented as [d,p(I)/d], where d is the gcd of the coefficients of p. All elements of p(I) are divisible by d, and p(I)/d is an ideal of some numerical semigroup. It is returned as the maximal ideal of the numerical semigroup p(I)/d \cup \{0\}. The ambient numerical semigroup can later be changed with the function AsIdealOfNumericalSemigroup.
gap> s:=NumericalSemigroup(3,7,5);; gap> i:=10+s;; gap> ApplyPatternToIdeal([1,1,-1],i); [ 1, <Ideal of numerical semigroup> ]
p is the list of integers that are the coefficients of a strongly admissible pattern. S is a numerical semigroup.

Outputs ApplyPatternToIdeal(p,0+S).
gap> s:=NumericalSemigroup(3,7,5);; gap> ApplyPatternToNumericalSemigroup([1,1,-1],s); [ 1, <Ideal of numerical semigroup> ] gap> SmallElements(last[2]); [ 0, 3, 5 ]
p is the list of integers that are the coefficients of a strongly admissible pattern. I and J are ideals of certain numerical semigroups.

Tests whether or not p(I) is contained in J.
gap> s:=NumericalSemigroup(3,7,5);; gap> i:=[3,5]+s;; gap> IsAdmittedPatternByIdeal([1,1,-1],i,i); false gap> IsAdmittedPatternByIdeal([1,1,-1],i,0+s); true
p is the list of integers that are the coefficients of a strongly admissible pattern. S and T are numerical semigroups.

Tests whether or not p(S) is contained in T.
gap> s:=NumericalSemigroup(3,7,5);; gap> IsAdmittedPatternByNumericalSemigroup([1,1,-1],s,s); true gap> IsArfNumericalSemigroup(s); true
Graded associated ring of numerical semigroup This section contains several functions to test properties of the graded (with respect to the maximal ideal) semigroup ring \mathbb{K}[\![S]\!] (with S a numerical semigroup). S is a numerical semigroup. Returns true if the graded ring associated to K[[S]] is Cohen-Macaulay, and false otherwise. This test is the implementation of the algorithm given in .

This filter implies .
gap> s:=NumericalSemigroup(30, 35, 42, 47, 148, 153, 157, 169, 181, 193);; gap> IsGradedAssociatedRingNumericalSemigroupCM(s); false gap> MicroInvariantsOfNumericalSemigroup(s); [ 0, 4, 4, 3, 2, 1, 3, 4, 4, 3, 2, 3, 1, 4, 4, 3, 3, 1, 4, 4, 4, 3, 2, 4, 2, 5, 4, 3, 3, 2 ] gap> List(AperyListOfNumericalSemigroupWRTElement(s,30), > w->MaximumDegreeOfElementWRTNumericalSemigroup (w,s)); [ 0, 1, 4, 1, 2, 1, 3, 1, 4, 3, 2, 3, 1, 1, 4, 3, 3, 1, 4, 1, 4, 3, 2, 4, 2, 5, 4, 3, 1, 2 ] gap> last=last2; false gap> s:=NumericalSemigroup(4,6,11);; gap> IsGradedAssociatedRingNumericalSemigroupCM(s); true gap> MicroInvariantsOfNumericalSemigroup(s); [ 0, 2, 1, 1 ] gap> List(AperyListOfNumericalSemigroupWRTElement(s,4), > w->MaximumDegreeOfElementWRTNumericalSemigroup(w,s)); [ 0, 2, 1, 1 ]
S is a numerical semigroup.

Returns true if the graded ring associated to K[\![S]\!] is Buchsbaum, and false otherwise. This test is the implementation of the algorithm given in .
gap> s:=NumericalSemigroup(30, 35, 42, 47, 148, 153, 157, 169, 181, 193);; gap> IsGradedAssociatedRingNumericalSemigroupBuchsbaum(s); true
S is a numerical semigroup.

This function returns the set of elements in the numerical semigroup S corresponding to a \mathbb{K}-basis of the torsion submodule of the associated graded ring of the numerical semigroup ring \mathbb{K}[\![S]\!]. It uses the Apery table as explained in .
gap> s:=NumericalSemigroup(30, 35, 42, 47, 148, 153, 157, 169, 181, 193);; gap> TorsionOfAssociatedGradedRingNumericalSemigroup(s); [ 181, 153, 157, 193, 169, 148 ]
S is a numerical semigroup.

This function returns the smallest non-negative integer k for which the associated graded ring G of a given numerical semigroup ring is k-Buchsbaum, that is, the least k for which the torsion submodule of G is annihilated by the k-th power of the homogeneous maximal ideal of G.
gap> s:=NumericalSemigroup(30, 35, 42, 47, 148, 153, 157, 169, 181, 193);; gap> BuchsbaumNumberOfAssociatedGradedRingNumericalSemigroup(s); 1 gap> IsGradedAssociatedRingNumericalSemigroupBuchsbaum(s); true
S is a numerical semigroup.

Returns true if the graded ring associated to K[[S]] is Gorenstein, and false otherwise. This test is the implementation of the algorithm given in .

This filter implies , , and .
gap> s:=NumericalSemigroup(30, 35, 42, 47, 148, 153, 157, 169, 181, 193);; gap> IsGradedAssociatedRingNumericalSemigroupGorenstein(s); false gap> s:=NumericalSemigroup(4,6,11);; gap> IsGradedAssociatedRingNumericalSemigroupGorenstein(s); true
S is a numerical semigroup.

Returns true if the Complete Intersection property of the associated graded ring of a numerical semigroup ring associated to K[[S]], and false otherwise. This test is the implementation of the algorithm given in .

This filter implies and .
gap> s:=NumericalSemigroup(30, 35, 42, 47, 148, 153, 157, 169, 181, 193);; gap> IsGradedAssociatedRingNumericalSemigroupCI(s); false gap> s:=NumericalSemigroup(4,6,11);; gap> IsGradedAssociatedRingNumericalSemigroupCI(s); true