GAP (NumericalSgps) - Chapter 7: Ideals of numerical semigroups

Goto Chapter: Top 1 2 3 4 5 6 7 8 9 10 11 12 13 14 A B C Bib Ind
[Top of Book] [Contents] [Previous Chapter] [Next Chapter]

[MathJax on]

7 Ideals of numerical semigroups
7.1 Definitions and basic operations
7.1-1 IdealOfNumericalSemigroup
7.1-2 IsIdealOfNumericalSemigroup
7.1-3 MinimalGenerators
7.1-4 Generators
7.1-5 AmbientNumericalSemigroupOfIdeal
7.1-6 IsIntegral
7.1-7 IsComplementOfIntegralIdeal
7.1-8 IdealByDivisorClosedSet
7.1-9 SmallElements
7.1-10 Conductor
7.1-11 FrobeniusNumber
7.1-12 PseudoFrobenius
7.1-13 Type
7.1-14 Minimum
7.1-15 BelongsToIdealOfNumericalSemigroup
7.1-16 ElementNumber_IdealOfNumericalSemigroup
7.1-17 NumberElement_IdealOfNumericalSemigroup
`7.1-18 \[ \]`
`7.1-19 \{ \}`
7.1-20 Iterator
7.1-21 SumIdealsOfNumericalSemigroup
7.1-22 MultipleOfIdealOfNumericalSemigroup
7.1-23 SubtractIdealsOfNumericalSemigroup
7.1-24 Difference
7.1-25 TranslationOfIdealOfNumericalSemigroup
7.1-26 Union
7.1-27 Intersection
7.1-28 MaximalIdeal
7.1-29 CanonicalIdeal
7.1-30 IsCanonicalIdeal
7.1-31 IsAlmostCanonicalIdeal
7.1-32 TraceIdeal
7.1-33 TypeSequence
7.2 Decomposition into irreducibles
7.2-1 IrreducibleZComponents
7.2-2 DecomposeIntegralIdealIntoIrreducibles
7.3 Blow ups and closures
7.3-1 HilbertFunctionOfIdealOfNumericalSemigroup
7.3-2 HilbertFunction
7.3-3 BlowUp
7.3-4 ReductionNumber
7.3-5 BlowUp
7.3-6 LipmanSemigroup
7.3-7 RatliffRushNumber
7.3-8 RatliffRushClosure
7.3-9 AsymptoticRatliffRushNumber
7.3-10 MultiplicitySequence
7.3-11 MicroInvariants
7.3-12 AperyList
7.3-13 AperyList
7.3-14 AperyTable
7.3-15 StarClosureOfIdealOfNumericalSemigroup
7.4 Patterns for ideals
7.4-1 IsAdmissiblePattern
7.4-2 IsStronglyAdmissiblePattern
7.4-3 AsIdealOfNumericalSemigroup
7.4-4 BoundForConductorOfImageOfPattern
7.4-5 ApplyPatternToIdeal
7.4-6 ApplyPatternToNumericalSemigroup
7.4-7 IsAdmittedPatternByIdeal
7.4-8 IsAdmittedPatternByNumericalSemigroup
7.5 Graded associated ring of numerical semigroup
7.5-1 IsGradedAssociatedRingNumericalSemigroupCM
7.5-2 IsGradedAssociatedRingNumericalSemigroupBuchsbaum
7.5-3 TorsionOfAssociatedGradedRingNumericalSemigroup
7.5-4 BuchsbaumNumberOfAssociatedGradedRingNumericalSemigroup
7.5-5 IsGradedAssociatedRingNumericalSemigroupGorenstein
7.5-6 IsGradedAssociatedRingNumericalSemigroupCI

### 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

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.

##### 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> MinimalGenerators([3,5]+NumericalSemigroup(2,11));
    [ 3 ]
    gap> I:=[3,5,9]+NumericalSemigroup(2,11);;
    gap> MinimalGeneratingSystem(I);
    [ 3 ]
    gap> MinimalGeneratingSystemOfIdealOfNumericalSemigroup(I);
    [ 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> Generators(I);
    [ 3, 5, 9 ]
    gap> GeneratorsOfIdealOfNumericalSemigroup(I);
    [ 3, 5, 9 ]
    gap> MinimalGenerators(I);
    [ 3 ]

##### 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> IsIntegral(10+s);
    true
    gap> IsIntegral(4+s);
    false
    gap> IsIntegralIdealOfNumericalSemigroup(10+s);
    true

##### 7.1-7 IsComplementOfIntegralIdeal

`‣ IsComplementOfIntegralIdeal`( X, S ) | ( operation )

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

##### 7.1-8 IdealByDivisorClosedSet

`‣ IdealByDivisorClosedSet`( X, S ) | ( operation )

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∖ 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

##### 7.1-9 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> 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 ]

##### 7.1-10 Conductor

`‣ Conductor`( I ) | ( 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> Conductor(10+s);
    15
    gap> ConductorOfIdealOfNumericalSemigroup(10+s);
    15

##### 7.1-11 FrobeniusNumber

`‣ FrobeniusNumber`( I ) | ( attribute )

`‣ FrobeniusNumberOfIdealOfNumericalSemigroup`( I ) | ( function )

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

##### 7.1-12 PseudoFrobenius

`‣ PseudoFrobenius`( I ) | ( attribute )

`‣ PseudoFrobeniusOfIdealOfNumericalSemigroup`( I ) | ( attribute )

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∖ I, with M the maximal ideal of the ambient semigroup of I (see [ADGS20]).

    gap> s:=NumericalSemigroup(3,5,7);;
    gap> i:=4+s;;
    gap> PseudoFrobenius(i);
    [ 6, 8 ]
    gap> PseudoFrobenius(s)=PseudoFrobenius(0+s);
    true

##### 7.1-13 Type

`‣ Type`( I ) | ( operation )

I is an ideal of a numerical semigroup. The output is the cardinality of the set of pseudo-Frobenius numbers of I (see [DS21]).

    gap> s:=NumericalSemigroup(3,5,7);;
    gap> k:=CanonicalIdeal(s);;
    gap> Type(k);
    1

##### 7.1-14 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-15 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-16 ElementNumber_IdealOfNumericalSemigroup

`‣ ElementNumber_IdealOfNumericalSemigroup`( I, r ) | ( function )

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

##### 7.1-17 NumberElement_IdealOfNumericalSemigroup

`‣ NumberElement_IdealOfNumericalSemigroup`( I, r ) | ( function )

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

##### `7.1-18 \[ \]`

`‣ \[ \]`( I, r ) | ( operation )

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

##### `7.1-19 \{ \}`

`‣ \{ \}`( I, ls ) | ( operation )

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 ]

##### 7.1-20 Iterator

`‣ Iterator`( I ) | ( operation )

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 ]

##### 7.1-21 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-22 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> MultipleOfIdealOfNumericalSemigroup(2,I) = 2*I;
    true
    gap> MinimalGeneratingSystemOfIdealOfNumericalSemigroup(2*I);
    [ 0, 1, 2 ]

##### 7.1-23 SubtractIdealsOfNumericalSemigroup

`‣ SubtractIdealsOfNumericalSemigroup`( I, J ) | ( function )

`‣ -`( I, J ) | ( function )

I, J are ideals of a numerical semigroup. The output is the ideal { z∈ Z | z+J⊆ 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 [HS04].

    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 ]

##### 7.1-24 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 I∖ 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);
    [  ]

##### 7.1-25 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-26 Union

`‣ Union`( I, J ) | ( function )

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 ]

##### 7.1-27 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> Intersection(i,j);
    <Ideal of numerical semigroup>
    gap> IntersectionIdealsOfNumericalSemigroup(i,j) = Intersection(i,j);
    true

##### 7.1-28 MaximalIdeal

`‣ MaximalIdeal`( S ) | ( operation )

`‣ MaximalIdealOfNumericalSemigroup`( S ) | ( function )

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

##### 7.1-29 CanonicalIdeal

`‣ CanonicalIdeal`( S ) | ( operation )

`‣ CanonicalIdealOfNumericalSemigroup`( S ) | ( function )

S is a numerical semigroup. Computes the (standard) canonical ideal of S ([BF97]): { x ∈ Z | g-x not ∈ 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

##### 7.1-30 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+CanonicalIdeal(s);;
    gap> c-(c-(3+s))=3+s;
    true
    gap> IsCanonicalIdeal(c);
    true
    gap> IsCanonicalIdealOfNumericalSemigroup(c);
    true

##### 7.1-31 IsAlmostCanonicalIdeal

`‣ IsAlmostCanonicalIdeal`( E ) | ( property )

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 [DS21]). Determines if E almost canonical.

    gap> s:=NumericalSemigroup(3,5,7);;
    gap> IsAlmostSymmetric(s);
    true
    gap> IsAlmostCanonical(MaximalIdeal(s));
    true

##### 7.1-32 TraceIdeal

`‣ TraceIdeal`( S ) | ( operation )

`‣ TraceIdealOfNumericalSemigroup`( S ) | ( function )

S is a numerical semigroup. Computes the trace ideal of S ([HHS21]), 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 ]

##### 7.1-33 TypeSequence

`‣ TypeSequence`( S ) | ( operation )

`‣ 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> 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 ]

#### 7.2 Decomposition into irreducibles

Let I be an ideal of a numerical semigroup S. We say that I is 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 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.

##### 7.2-1 IrreducibleZComponents

`‣ IrreducibleZComponents`( I ) | ( operation )

I is an ideal of a numerical semigroup. The output is the list of irreducible Z-components of I. These are calculated using Proposition 24 in [ADGS20].

    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

##### 7.2-2 DecomposeIntegralIdealIntoIrreducibles

`‣ DecomposeIntegralIdealIntoIrreducibles`( I ) | ( operation )

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

    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

#### 7.3 Blow ups and closures

The blow up of an ideal I of a numerical semigroup is the ideal ⋃_n≥ 0 nI-nI. In this section we provide functions to compute the blow up and related invariants.

##### 7.3-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.3-2 HilbertFunction

`‣ HilbertFunction`( I ) | ( attribute )

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

##### 7.3-3 BlowUp

`‣ BlowUp`( I ) | ( operation )

`‣ 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> 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 ]

##### 7.3-4 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> ReductionNumber(I);
    2
    gap> ReductionNumberIdealNumericalSemigroup(I);
    2

##### 7.3-5 BlowUp

`‣ BlowUp`( S ) | ( operation )

`‣ 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> 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 ]

##### 7.3-6 LipmanSemigroup

`‣ LipmanSemigroup`( S ) | ( function )

This is just a synonym of `BlowUpOfNumericalSemigroup` (7.3-5).

    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.3-7 RatliffRushNumber

`‣ RatliffRushNumber`( I ) | ( operation )

`‣ 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 (see [DGH01]).

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

##### 7.3-8 RatliffRushClosure

`‣ RatliffRushClosure`( I ) | ( operation )

`‣ 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> RatliffRushClosure(I);
    <Ideal of numerical semigroup>
    gap> MinimalGenerators(last);
    [ 0, 2, 4 ]
    gap> RatliffRushClosureOfIdealOfNumericalSemigroup(I) = RatliffRushClosure(I);
    true

##### 7.3-9 AsymptoticRatliffRushNumber

`‣ AsymptoticRatliffRushNumber`( I ) | ( operation )

`‣ 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> AsymptoticRatliffRushNumber(I);
    2
    gap> AsymptoticRatliffRushNumberOfIdealOfNumericalSemigroup(I);
    2

##### 7.3-10 MultiplicitySequence

`‣ MultiplicitySequence`( S ) | ( operation )

`‣ 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.3-6).

    gap> s:=NumericalSemigroup(3,5);;
    gap> MultiplicitySequence(s);
    [ 3, 2, 1 ]
    gap> MultiplicitySequenceOfNumericalSemigroup(s);
    [ 3, 2, 1 ]

##### 7.3-11 MicroInvariants

`‣ MicroInvariants`( S ) | ( operation )

`‣ 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> MicroInvariants(s)=last;
    true
    gap> MicroInvariantsOfNumericalSemigroup(s)=MicroInvariants(s);
    true

##### 7.3-12 AperyList

`‣ AperyList`( I, n ) | ( operation )

`‣ 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> 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 ]

##### 7.3-13 AperyList

`‣ AperyList`( I ) | ( operation )

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 ]

##### 7.3-14 AperyTable

`‣ AperyTable`( S ) | ( operation )

`‣ 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.3-4)).

    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

##### 7.3-15 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> MinimalGenerators(last);
    [ 0, 2, 4 ]

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

##### 7.4-1 IsAdmissiblePattern

`‣ 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
    gap> IsAdmissiblePattern([1,-2]);
    false

##### 7.4-2 IsStronglyAdmissiblePattern

`‣ 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
    gap> IsStronglyAdmissiblePattern([1,-1]);
    false
    gap> IsStronglyAdmissiblePattern([1,1,-1]);
    true

##### 7.4-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.4-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 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

##### 7.4-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.

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 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> ]

##### 7.4-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 ]

##### 7.4-7 IsAdmittedPatternByIdeal

`‣ 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;;
    gap> IsAdmittedPatternByIdeal([1,1,-1],i,i);
    false
    gap> IsAdmittedPatternByIdeal([1,1,-1],i,0+s);
    true

##### 7.4-8 IsAdmittedPatternByNumericalSemigroup

`‣ 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> s:=NumericalSemigroup(3,7,5);;
    gap> IsAdmittedPatternByNumericalSemigroup([1,1,-1],s,s);
    true
    gap> IsArfNumericalSemigroup(s);
    true

#### 7.5 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 K[[S]] (with S a numerical semigroup).

##### 7.5-1 IsGradedAssociatedRingNumericalSemigroupCM

`‣ 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].

This filter implies `IsGradedAssociatedRingNumericalSemigroupBuchsbaum` (7.5-2).

    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 ]

##### 7.5-2 IsGradedAssociatedRingNumericalSemigroupBuchsbaum

`‣ 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);;
    gap> IsGradedAssociatedRingNumericalSemigroupBuchsbaum(s);
    true

##### 7.5-3 TorsionOfAssociatedGradedRingNumericalSemigroup

`‣ 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);;
    gap> TorsionOfAssociatedGradedRingNumericalSemigroup(s);
    [ 181, 153, 157, 193, 169, 148 ]

##### 7.5-4 BuchsbaumNumberOfAssociatedGradedRingNumericalSemigroup

`‣ 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);;
    gap> BuchsbaumNumberOfAssociatedGradedRingNumericalSemigroup(s);
    1
    gap> IsGradedAssociatedRingNumericalSemigroupBuchsbaum(s);
    true

##### 7.5-5 IsGradedAssociatedRingNumericalSemigroupGorenstein

`‣ 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].

This filter implies `IsGradedAssociatedRingNumericalSemigroupCM` (7.5-1), `IsMpureNumericalSemigroup` (9.8-2), and `IsSymmetricNumericalSemigroup` (6.1-2).

    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

##### 7.5-6 IsGradedAssociatedRingNumericalSemigroupCI

`‣ 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].

This filter implies `IsGradedAssociatedRingNumericalSemigroupGorenstein` (7.5-5) and `IsAperySetGammaRectangular` (6.2-11).

    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

[Top of Book] [Contents] [Previous Chapter] [Next Chapter]
Goto Chapter: Top 1 2 3 4 5 6 7 8 9 10 11 12 13 14 A B C Bib Ind

generated by GAPDoc2HTML