Goto Chapter: Top 1 2 3 4 5 6 7 8 9 10 11 12 13 A B C Bib Ind

### 7 Ideals of numerical semigroups

Let S be a numerical semigroup. A set I of integers is an ideal relative to a numerical semigroup S provided that I+S⊆ I and that there exists d∈ S such that d+I⊆ S.

If {i_1,...,i_k} is a subset of Z, then the set I={i_1,...,i_k}+S=⋃_n=1^k i_n+S is an ideal relative to S, and {i_1,..., i_k} is a system of generators of I. A system of generators M is minimal if no proper subset of M generates the same ideal. Usually, ideals are specified by means of its generators and the ambient numerical semigroup to which they are ideals (for more information see for instance [BDF97]).

#### 7.1 Definitions and basic operations

##### 7.1-1 IdealOfNumericalSemigroup
 ‣ IdealOfNumericalSemigroup( l, S ) ( function )
 ‣ +( l, S ) ( function )

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>


##### 7.1-2 IsIdealOfNumericalSemigroup
 ‣ IsIdealOfNumericalSemigroup( Obj ) ( function )

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


##### 7.1-3 MinimalGenerators
 ‣ MinimalGenerators( I ) ( attribute )
 ‣ MinimalGeneratingSystem( I ) ( attribute )
 ‣ MinimalGeneratingSystemOfIdealOfNumericalSemigroup( I ) ( attribute )

I is an ideal of a numerical semigroup. The output is the minimal system of generators of I.

gap> I:=[3,5,9]+NumericalSemigroup(2,11);;
gap> MinimalGeneratingSystemOfIdealOfNumericalSemigroup(I);
[ 3 ]
gap> MinimalGeneratingSystem(I);
[ 3 ]
gap> MinimalGenerators([3,5]+NumericalSemigroup(2,11));
[ 3 ]


##### 7.1-4 Generators
 ‣ Generators( I ) ( attribute )
 ‣ GeneratorsOfIdealOfNumericalSemigroup( I ) ( attribute )

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> GeneratorsOfIdealOfNumericalSemigroup(I);
[ 3, 5, 9 ]
gap> Generators(I);
[ 3, 5, 9 ]


##### 7.1-5 AmbientNumericalSemigroupOfIdeal
 ‣ AmbientNumericalSemigroupOfIdeal( I ) ( function )

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>


##### 7.1-6 IsIntegral
 ‣ IsIntegral( I ) ( property )
 ‣ IsIntegralIdealOfNumericalSemigroup( I ) ( property )

I is an ideal of a numerical semigroup, say S. Detects if I⊆ S.

gap> s:=NumericalSemigroup(3,7,5);;
gap> IsIntegralIdealOfNumericalSemigroup(4+s);
false
gap> IsIntegralIdealOfNumericalSemigroup(10+s);
true
gap> IsIntegral(10+s);
true


##### 7.1-7 SmallElements
 ‣ SmallElements( I ) ( function )
 ‣ SmallElementsOfIdealOfNumericalSemigroup( I ) ( function )

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> SmallElementsOfIdealOfNumericalSemigroup(I);
[ 3, 5, 7, 9, 11, 13 ]
gap> SmallElements(I) = SmallElementsOfIdealOfNumericalSemigroup(I);
true
gap> J:=[2,11]+NumericalSemigroup(2,11);;
gap> SmallElementsOfIdealOfNumericalSemigroup(J);
[ 2, 4, 6, 8, 10 ]


##### 7.1-8 Conductor
 ‣ Conductor( NS ) ( attribute )
 ‣ ConductorOfIdealOfNumericalSemigroup( I ) ( function )

I is an ideal of a numerical semigroup. The output is the largest element in SmallElements(I).

gap> s:=NumericalSemigroup(3,7,5);;
gap> ConductorOfIdealOfNumericalSemigroup(10+s);
15
gap> Conductor(10+s);
15


##### 7.1-9 Minimum
 ‣ Minimum( I ) ( operation )

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


##### 7.1-10 BelongsToIdealOfNumericalSemigroup
 ‣ BelongsToIdealOfNumericalSemigroup( n, I ) ( function )
 ‣ \in( n, I ) ( operation )

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


##### 7.1-11 SumIdealsOfNumericalSemigroup
 ‣ SumIdealsOfNumericalSemigroup( I, J ) ( function )
 ‣ +( I, J ) ( function )

I, J are ideals of a numerical semigroup. The output is the sum of both ideals { i+j | i∈ I, j∈ 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 ]


##### 7.1-12 MultipleOfIdealOfNumericalSemigroup
 ‣ MultipleOfIdealOfNumericalSemigroup( n, I ) ( function )
 ‣ *( n, I ) ( function )

I is an ideal of a numerical semigroup, n is a non negative integer. The output is the ideal I+⋯+I (n times).

n * I can be used for short.

gap> I:=[0,1]+NumericalSemigroup(3,5,7);;
gap> MinimalGeneratingSystemOfIdealOfNumericalSemigroup(2*I);
[ 0, 1, 2 ]


##### 7.1-13 SubtractIdealsOfNumericalSemigroup
 ‣ SubtractIdealsOfNumericalSemigroup( I, J ) ( function )
 ‣ -( I, J ) ( function )

I, J are ideals of a numerical semigroup. The output is the ideal { z∈ Z | z+JI}.

I - J is a synonym of SubtractIdealsOfNumericalSemigroup.

S-J is a synonym of (0+S)-J, if S is the ambient semigroup of I and J. The following example appears in [HS04].

gap> S:=NumericalSemigroup(14, 15, 20, 21, 25);;
gap> I:=[0,1]+S;;
gap> II:=S-I;;
gap> MinimalGeneratingSystemOfIdealOfNumericalSemigroup(I);
[ 0, 1 ]
gap> MinimalGeneratingSystemOfIdealOfNumericalSemigroup(II);
[ 14, 20 ]
gap> MinimalGeneratingSystemOfIdealOfNumericalSemigroup(I+II);
[ 14, 15, 20, 21 ]


##### 7.1-14 Difference
 ‣ Difference( I, J ) ( operation )
 ‣ DifferenceOfIdealsOfNumericalSemigroup( I, J ) ( function )

I, J are ideals of a numerical semigroup. J must be contained in I. The output is the set IJ.

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>  DifferenceOfIdealsOfNumericalSemigroup(last2,last);
[ 26, 27, 37, 38 ]
gap> Difference(ii,i);
[ 26, 27, 37, 38 ]
gap> Difference(i,ii);
[  ]


##### 7.1-15 TranslationOfIdealOfNumericalSemigroup
 ‣ TranslationOfIdealOfNumericalSemigroup( k, I ) ( function )
 ‣ +( k, I ) ( function )

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,...,i_n+k} where {i_1,...,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


##### 7.1-16 Intersection
 ‣ Intersection( I, J ) ( operation )
 ‣ IntersectionIdealsOfNumericalSemigroup( I, J ) ( function )

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> IntersectionIdealsOfNumericalSemigroup(i,j);
<Ideal of numerical semigroup>


##### 7.1-17 MaximalIdealOfNumericalSemigroup
 ‣ MaximalIdealOfNumericalSemigroup( S ) ( function )

Returns the maximal ideal of the numerical semigroup S.

gap> MaximalIdealOfNumericalSemigroup(NumericalSemigroup(3,7));
<Ideal of numerical semigroup>


##### 7.1-18 CanonicalIdealOfNumericalSemigroup
 ‣ CanonicalIdealOfNumericalSemigroup( S ) ( function )

S is a numerical semigroup. Computes a canonical ideal of S ([BF06]): { x ∈ Z | g-x not ∈ S}.

gap> s:=NumericalSemigroup(4,6,11);;
gap> m:=MaximalIdealOfNumericalSemigroup(s);;
gap> c:=CanonicalIdealOfNumericalSemigroup(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


##### 7.1-19 IsCanonicalIdeal
 ‣ IsCanonicalIdeal( E ) ( property )
 ‣ IsCanonicalIdealOfNumericalSemigroup( E ) ( property )

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+CanonicalIdealOfNumericalSemigroup(s);;
gap> c-(c-(3+s))=3+s;
true
gap> IsCanonicalIdealOfNumericalSemigroup(c);
true


##### 7.1-20 TypeSequenceOfNumericalSemigroup
 ‣ TypeSequenceOfNumericalSemigroup( S ) ( function )

S is a numerical semigroup.

Computes the type sequence of a numerical semigroup. That is, the secuence t_i(S)=♯(S(i)∖ S(i-1)), with S(i)={ s∈ S∣ sge s_i} and s_i the ith element of S.

This function is the implementation of the algorithm given in [BDF97].

gap> s:=NumericalSemigroup(30, 35, 42, 47, 148, 153, 157, 169, 181, 193);;
gap> TypeSequenceOfNumericalSemigroup(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 ]


#### 7.2 Blow ups and closures

##### 7.2-1 HilbertFunctionOfIdealOfNumericalSemigroup
 ‣ HilbertFunctionOfIdealOfNumericalSemigroup( n, I ) ( function )

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 nI∖ (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 ]


##### 7.2-2 BlowUpIdealOfNumericalSemigroup
 ‣ BlowUpIdealOfNumericalSemigroup( I ) ( function )

I is an ideal of a numerical semigroup. The output is the ideal ⋃_n≥ 0 nI-nI.

gap> I:=[0,2]+NumericalSemigroup(6,9,11);;
gap> BlowUpIdealOfNumericalSemigroup(I);;
gap> SmallElementsOfIdealOfNumericalSemigroup(last);
[ 0, 2, 4, 6, 8 ]


##### 7.2-3 ReductionNumber
 ‣ ReductionNumber( I ) ( attribute )
 ‣ ReductionNumberIdealNumericalSemigroup( I ) ( attribute )

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> ReductionNumberIdealNumericalSemigroup(I);
2


##### 7.2-4 BlowUpOfNumericalSemigroup
 ‣ BlowUpOfNumericalSemigroup( S ) ( function )

S is a numerical semigroup. If M is the maximal ideal of the numerical semigroup, then the output is the numerical semigroup ⋃_n≥ 0 nM-nM.

gap> s:=NumericalSemigroup(30, 35, 42, 47, 148, 153, 157, 169, 181, 193);;
gap> BlowUpOfNumericalSemigroup(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 ]
gap> m:=MaximalIdealOfNumericalSemigroup(s);
<Ideal of numerical semigroup>
gap> BlowUpIdealOfNumericalSemigroup(m);
<Ideal of numerical semigroup>
gap> SmallElementsOfIdealOfNumericalSemigroup(last);
[ 0, 5, 10, 12, 15, 17, 20, 22, 24, 25, 27, 29, 30, 32, 34, 35, 36, 37, 39,
40, 41, 42, 44 ]


##### 7.2-5 LipmanSemigroup
 ‣ LipmanSemigroup( S ) ( function )

This is just a synonym of BlowUpOfNumericalSemigroup (7.2-4).

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 ]


##### 7.2-6 RatliffRushNumberOfIdealOfNumericalSemigroup
 ‣ RatliffRushNumberOfIdealOfNumericalSemigroup( I ) ( function )

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.

gap> I:=[0,2]+NumericalSemigroup(6,9,11);;
gap> RatliffRushNumberOfIdealOfNumericalSemigroup(I);
1


##### 7.2-7 RatliffRushClosureOfIdealOfNumericalSemigroup
 ‣ RatliffRushClosureOfIdealOfNumericalSemigroup( I ) ( function )

I is an ideal of a numerical semigroup. The output is the Ratliff-Rush closure of I: ⋃_n∈ N}(n+1)I-nI (see [DGH01]).

gap> I:=[0,2]+NumericalSemigroup(6,9,11);;
gap> RatliffRushClosureOfIdealOfNumericalSemigroup(I);
<Ideal of numerical semigroup>
gap> MinimalGenerators(last);
[ 0, 2, 4 ]


##### 7.2-8 AsymptoticRatliffRushNumberOfIdealOfNumericalSemigroup
 ‣ AsymptoticRatliffRushNumberOfIdealOfNumericalSemigroup( I ) ( function )

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 mge n(see [DGH01]).

gap> I:=[0,2]+NumericalSemigroup(6,9,11);;
gap> AsymptoticRatliffRushNumberOfIdealOfNumericalSemigroup(I);
2


##### 7.2-9 MultiplicitySequenceOfNumericalSemigroup
 ‣ MultiplicitySequenceOfNumericalSemigroup( S ) ( function )

S is a numerical semigroup. The output is a list with the multiplicities of the sequence S⊆ L(S)⊆ ⋯ ⊆ N, where L(⋅) means LipmanSemigroup (7.2-5).

gap> s:=NumericalSemigroup(3,5);
<Numerical semigroup with 2 generators>
gap> MultiplicitySequenceOfNumericalSemigroup(s);
[ 3, 2, 1 ]


##### 7.2-10 MicroInvariantsOfNumericalSemigroup
 ‣ MicroInvariantsOfNumericalSemigroup( S ) ( function )

Returns the microinvariants of the numerical semigroup S defined in [Eli01]. For their computation we have used the formula given in [BF06]. 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> MicroInvariantsOfNumericalSemigroup(s)=last;
true


##### 7.2-11 AperyListOfIdealOfNumericalSemigroupWRTElement
 ‣ AperyListOfIdealOfNumericalSemigroupWRTElement( I, n ) ( function )

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> AperyListOfIdealOfNumericalSemigroupWRTElement(i,10);
[ 40, 51, 12, 23, 14, 25, 36, 27, 38, 49 ]


##### 7.2-12 AperyTableOfNumericalSemigroup
 ‣ AperyTableOfNumericalSemigroup( s ) ( function )

Computes the Apéry table associated to the numerical semigroup s as explained in [CBJZA13], 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∈{1,...,r}, where r is the reduction number of M (see ReductionNumberIdealNumericalSemigroup (7.2-3)).

gap> s:=NumericalSemigroup(10,11,13);;
gap> AperyTableOfNumericalSemigroup(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 ] ]


##### 7.2-13 StarClosureOfIdealOfNumericalSemigroup
 ‣ StarClosureOfIdealOfNumericalSemigroup( i, is ) ( function )

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))⋂_k∈ is (k-(k-i)). The implementation uses Section 3 of [Spi15].

gap> s:=NumericalSemigroup(3,5,7);;
gap> StarClosureOfIdealOfNumericalSemigroup([0,2]+s,[[0,4]+s]);;
gap> MinimalGeneratingSystemOfIdealOfNumericalSemigroup(last);
[ 0, 2, 4 ]


#### 7.3 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 [Sto15].

 ‣ IsAdmissiblePattern( p ) ( function )

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 [BAGS06]).

gap> IsAdmissiblePattern([1,1,-1]);
true
false


 ‣ IsStronglyAdmissiblePattern( p ) ( function )

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 [BAGS06]).

gap> IsAdmissiblePattern([1,-1]);
true
false
true


##### 7.3-3 AsIdealOfNumericalSemigroup
 ‣ AsIdealOfNumericalSemigroup( I, T ) ( function )

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>


##### 7.3-4 BoundForConductorOfImageOfPattern
 ‣ BoundForConductorOfImageOfPattern( p, C ) ( function )

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 are contained in 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


##### 7.3-5 ApplyPatternToIdeal
 ‣ ApplyPatternToIdeal( p, I ) ( function )

p is the list of integers that are the coefficients of a strongly admissible pattern. I is an ideal of a numerical semigroup.

Calculates p(I). 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 ∪ {0}. The parent 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> ]


##### 7.3-6 ApplyPatternToNumericalSemigroup
 ‣ ApplyPatternToNumericalSemigroup( p, S ) ( function )

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 ]


 ‣ IsAdmittedPatternByIdeal( p, I, J ) ( function )

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;;
false
true


 ‣ IsAdmittedPatternByNumericalSemigroup( p, S, T ) ( function )

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> IsAdmittedPatternByNumericalSemigroup([1,1,-1],s,s);
true
gap> IsArfNumericalSemigroup(s);
true


#### 7.4 Graded associated ring of numerical semigroup

This section contains several functions to test properties of the graded (with respect to the maximal ideal) of the semigroup ring K[[S]] (with S a numerical semigroup).

 ‣ IsGradedAssociatedRingNumericalSemigroupCM( S ) ( property )

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 [BF06].

gap> s:=NumericalSemigroup(30, 35, 42, 47, 148, 153, 157, 169, 181, 193);;
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);;
true
gap> MicroInvariantsOfNumericalSemigroup(s);
[ 0, 2, 1, 1 ]
gap> List(AperyListOfNumericalSemigroupWRTElement(s,4),
> w->MaximumDegreeOfElementWRTNumericalSemigroup(w,s));
[ 0, 2, 1, 1 ]


 ‣ IsGradedAssociatedRingNumericalSemigroupBuchsbaum( S ) ( property )

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 [DMV09].

gap> s:=NumericalSemigroup(30, 35, 42, 47, 148, 153, 157, 169, 181, 193);;
true


 ‣ TorsionOfAssociatedGradedRingNumericalSemigroup( S ) ( function )

S is a numerical semigroup.

This function returns the set of elements in the numerical semigroup S corresponding to a K-basis of the torsion submodule of the associated graded ring of the numerical semigroup ring K[[S]]. It uses the Apery table as explained in [CBJZA13].

gap> s:=NumericalSemigroup(30, 35, 42, 47, 148, 153, 157, 169, 181, 193);;
[ 181, 153, 157, 193, 169, 148 ]


 ‣ BuchsbaumNumberOfAssociatedGradedRingNumericalSemigroup( S ) ( function )

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);;
1
true


##### 7.4-5 IsMpure
 ‣ 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].

gap> s:=NumericalSemigroup(30, 35, 42, 47, 148, 153, 157, 169, 181, 193);;
gap> IsMpureNumericalSemigroup(s);
false
gap> s:=NumericalSemigroup(4,6,11);;
gap> IsMpureNumericalSemigroup(s);
true


##### 7.4-6 IsPure
 ‣ 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> IsPureNumericalSemigroup(s);
false
gap> s:=NumericalSemigroup(4,6,11);;
gap> IsPureNumericalSemigroup(s);
true


 ‣ IsGradedAssociatedRingNumericalSemigroupGorenstein( S ) ( function )

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 [DMS11].

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


 ‣ IsGradedAssociatedRingNumericalSemigroupCI( S ) ( function )

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 [DMS13].

gap> s:=NumericalSemigroup(30, 35, 42, 47, 148, 153, 157, 169, 181, 193);;