1#############################################################################
2##
3#W  ideals-def.gd           Manuel Delgado <mdelgado@fc.up.pt>
4#W                          Pedro A. Garcia-Sanchez <pedro@ugr.es>
5#W                          Jose Morais <josejoao@fc.up.pt>
6##
7##
8#Y  Copyright 2005 by Manuel Delgado,
9#Y  Pedro Garcia-Sanchez and Jose Joao Morais
10#Y  We adopt the copyright regulations of GAP as detailed in the
11#Y  copyright notice in the GAP manual.
12##
13#############################################################################
14
15#############################################################################
16##
17#R  IsIdealOfNumericalSemigroupRep
18##
19##  The representation of an ideal of a numerical semigroup.
20##
21#############################################################################
22DeclareRepresentation( "IsIdealOfNumericalSemigroupRep", IsAttributeStoringRep,
23        ["UnderlyingNSIdeal", "Generators"] );
24
25
26#############################################################################
27##
28#C  IsIdealOfNumericalSemigroup
29##
30##  The category of ideals of numerical semigroups.
31##
32#############################################################################
33DeclareCategory( "IsIdealOfNumericalSemigroup", IsAdditiveMagma and IsIdealOfNumericalSemigroupRep);
34
35
36# Elements of ideals of numerical semigroups are integers, so ideals of
37# numerical semigroups are collections of integers.
38BindGlobal( "IdealsOfNumericalSemigroupsType",
39        NewType( CollectionsFamily(CyclotomicsFamily),
40                 IsIdealOfNumericalSemigroup));
41
42
43#############################################################################
44##
45#F IdealOfNumericalSemigroup(l,S)
46##
47## l is a list of integers and S a numerical semigroup
48##
49## returns the ideal of S generated by l.
50##
51#############################################################################
52DeclareGlobalFunction("IdealOfNumericalSemigroup");
53#A
54DeclareAttribute( "UnderlyingNSIdeal", IsNumericalSemigroup);
55
56
57#############################################################################
58##
59#A  Generators(I)
60#A  GeneratorsOfIdealOfNumericalSemigroup(I)
61##
62##  Returns a set of generators of the ideal I.
63##  If a minimal generating system has already been computed, this
64##  is the set returned.
65############################################################################
66##DeclareGlobalFunction("GeneratorsOfIdealOfNumericalSemigroup");
67#A
68DeclareAttribute( "Generators", IsIdealOfNumericalSemigroup);
69DeclareSynonymAttr( "GeneratorsOfIdealOfNumericalSemigroup", Generators);
70
71
72#############################################################################
73##
74#F  GeneratorsOfIdealOfNumericalSemigroupNC(I)
75## just for compatibility of code...
76##  Returns a set of generators of the ideal I.
77############################################################################
78DeclareSynonym("GeneratorsOfIdealOfNumericalSemigroupNC",GeneratorsOfIdealOfNumericalSemigroup);
79
80
81
82#############################################################################
83##
84#F AmbientNumericalSemigroupOfIdeal(I)
85##
86##  Returns the ambient semigroup of the ideal I.
87############################################################################
88DeclareGlobalFunction("AmbientNumericalSemigroupOfIdeal");
89
90#############################################################################
91##
92#P  IsIntegralIdealOfNumericalSemigroup(i)
93##
94##  Detects if the ideal i is contained in its ambient semigroup
95##
96#############################################################################
97DeclareProperty("IsIntegral", IsIdealOfNumericalSemigroup);
98DeclareSynonym("IsIntegralIdealOfNumericalSemigroup", IsIntegral);
99
100
101#############################################################################
102##
103#F SumIdealsOfNumericalSemigroup(I,J)
104##
105## returns the sum of the ideals I and J (in the same ambient semigroup)
106#############################################################################
107DeclareGlobalFunction("SumIdealsOfNumericalSemigroup");
108
109
110
111#############################################################################
112##
113#F SubtractIdealsOfNumericalSemigroup(I,J)
114##
115## returns the ideal I - J
116#############################################################################
117DeclareGlobalFunction("SubtractIdealsOfNumericalSemigroup");
118
119
120#############################################################################
121##
122#F  BelongsToIdealOfNumericalSemigroup(n,I)
123##
124##  Tests if the integer n belongs to the ideal I.
125##
126#############################################################################
127DeclareGlobalFunction("BelongsToIdealOfNumericalSemigroup");
128
129
130
131#############################################################################
132##
133#F DifferenceOfdealsOfNumericalSemigroup(I,J)
134##
135## returns the set difference I\J
136#############################################################################
137DeclareGlobalFunction("DifferenceOfIdealsOfNumericalSemigroup");
138
139
140
141#############################################################################
142##
143#F MultipleOfIdealOfNumericalSemigroup(n,I)
144##
145## n is a non negative integer and I is an ideal
146## returns the multiple nI (I+...+I n times) of I
147#############################################################################
148DeclareGlobalFunction("MultipleOfIdealOfNumericalSemigroup");
149
150
151
152#############################################################################
153##
154#F HilbertFunctionOfIdealOfNumericalSemigroup(n,I)
155##
156## returns the value of the Hilbert function associated to I in n,
157## that is, nI\(n+1)I. I must be an ideal included in its ambient semigroup.
158#############################################################################
159DeclareGlobalFunction("HilbertFunctionOfIdealOfNumericalSemigroup");
160DeclareAttribute("HilbertFunction",IsIdealOfNumericalSemigroup);
161
162
163#############################################################################
164##
165#F BlowUpIdealOfNumericalSemigroup(I)
166##
167##  Computes the Blow Up (of the maximal ideal) of
168##  the numerical semigroup <s>.
169#############################################################################
170DeclareGlobalFunction("BlowUpIdealOfNumericalSemigroup");
171DeclareOperation("BlowUp",[IsIdealOfNumericalSemigroup]);
172
173#############################################################################
174##
175#A MinimalGenerators(I)
176#A MinimalGeneratingSystem(I)
177#A MinimalGeneratingSystemOfIdealOfNumericalSemigroup(I)
178##
179## The argument I is an ideal of a numerical semigroup
180## returns the minimal generating system of I.
181##
182#############################################################################
183DeclareAttribute( "MinimalGenerators", IsIdealOfNumericalSemigroup);
184#DeclareSynonymAttr("MinimalGeneratingSystem", MinimalGenerators);
185DeclareSynonymAttr("MinimalGeneratingSystemOfIdealOfNumericalSemigroup", MinimalGenerators);
186
187
188#############################################################################
189##
190#A SmallElements
191#A SmallElementsOfIdealOfNumericalSemigroup
192##
193##  Returns the list of elements in the ideal I up to the last gap + 1.
194##
195#############################################################################
196DeclareAttribute("SmallElements", IsIdealOfNumericalSemigroup);
197DeclareSynonymAttr( "SmallElementsOfIdealOfNumericalSemigroup", SmallElements);
198
199#############################################################################
200##
201#A  ConductorOfIdealOfNumericalSemigroup(I)
202##
203##  Returns the conductor of I, the largest element in SmallElements(I)
204##
205#############################################################################
206DeclareAttribute("Conductor", IsIdealOfNumericalSemigroup);
207DeclareSynonymAttr("ConductorOfIdealOfNumericalSemigroup", Conductor);
208
209
210#############################################################################
211##
212#F ElementNumber_IdealOfNumericalSemigroup(S,n)
213# Given an ideal I of a numerical semigroup and an integer n, returns
214# the nth element of I
215#############################################################################
216DeclareGlobalFunction("ElementNumber_IdealOfNumericalSemigroup");
217
218#############################################################################
219##
220#F NumberElement_IdealOfNumericalSemigroup(S,n)
221# Given an ideal of a numerical semigroup I and an integer n, returns the
222# position of n in I
223#############################################################################
224DeclareGlobalFunction("NumberElement_IdealOfNumericalSemigroup");
225
226
227
228#############################################################################
229##
230#F  MaximalIdealOfNumericalSemigroup(S)
231##
232##  Returns the maximal ideal of S.
233##
234#############################################################################
235DeclareGlobalFunction("MaximalIdealOfNumericalSemigroup");
236DeclareOperation("MaximalIdeal",[IsNumericalSemigroup]);
237
238#############################################################################
239##
240#P IsMonomialNumericalSemigroup
241## Tests if a numerical semigroup is a monomial semigroup ring
242##
243#############################################################################
244DeclareProperty("IsMonomialNumericalSemigroup", IsNumericalSemigroup);
245
246#############################################################################
247##
248#F  BlowUpOfNumericalSemigroup(s)
249##
250##  Computes the Blow Up (of the maximal ideal) of
251##  the numerical semigroup <s>.
252##
253#############################################################################
254DeclareGlobalFunction("BlowUpOfNumericalSemigroup");
255DeclareSynonym("LipmanSemigroup",BlowUpOfNumericalSemigroup);
256DeclareOperation("BlowUp",[IsNumericalSemigroup]);
257
258#############################################################################
259##
260#F MultiplicitySequenceOfNumericalSemigroup(s)
261##
262##  Computes the multiplicity sequence of the numerical semigroup <s>.
263##
264#############################################################################
265DeclareGlobalFunction("MultiplicitySequenceOfNumericalSemigroup");
266DeclareOperation("MultiplicitySequence",[IsNumericalSemigroup]);
267
268#############################################################################
269##
270#F  MicroInvariantsOfNumericalSemigroup(s)
271##
272##  Computes the microinvariants of the numerical semigroup <s>
273##  using the formula given by Valentina and Ralf [BF06]. The
274##  microinvariants of a numerial semigroup where introduced
275##  by J. Elias in [E01].
276##
277#############################################################################
278DeclareGlobalFunction("MicroInvariantsOfNumericalSemigroup");
279DeclareOperation("MicroInvariants",[IsNumericalSemigroup]);
280
281#############################################################################
282##
283#P  IsGradedAssociatedRingNumericalSemigroupCM(s)
284##
285##  Returns true if the associated graded ring of
286##  the semigroup ring algebra k[[s]] is Cohen-Macaulay.
287##  This function implements the algorithm given in [BF06].
288##
289#############################################################################
290DeclareProperty("IsGradedAssociatedRingNumericalSemigroupCM", IsNumericalSemigroup);
291
292
293#############################################################################
294##
295#F  CanonicalIdealOfNumericalSemigroup(s)
296##
297##  Computes a canonical ideal of <s> ([B06]):
298##      { x in Z | g-x not in S}
299##
300#############################################################################
301DeclareGlobalFunction("CanonicalIdealOfNumericalSemigroup");
302DeclareOperation("CanonicalIdeal",[IsNumericalSemigroup]);
303
304#############################################################################
305##
306#P  IsCanonicalIdealOfNumericalSemigroup(e)
307##
308##  Detects if the ideal e is a translation of the canonical ideal of its
309##  ambient semigroup
310##
311#############################################################################
312DeclareProperty("IsCanonicalIdeal",IsIdealOfNumericalSemigroup);
313DeclareSynonymAttr("IsCanonicalIdealOfNumericalSemigroup", IsCanonicalIdeal);
314
315
316#############################################################################
317##
318#A  ReductionNumberIdealNumericalSemigroup(I)
319##
320##  Returns the least nonnegative integer such that
321##  nI-nI=(n+1)I-(n+1)I, see [B06].
322##
323#############################################################################
324DeclareAttribute("ReductionNumber",IsIdealOfNumericalSemigroup);
325DeclareSynonymAttr("ReductionNumberIdealNumericalSemigroup",ReductionNumber);
326
327#############################################################################
328##
329#F  RatliffRushClosureOfIdealOfNumericalSemigroup(I)
330##
331##  Returns the the union of all (n+1)I-nI with n nonnegative integers
332##
333#############################################################################
334DeclareGlobalFunction("RatliffRushClosureOfIdealOfNumericalSemigroup");
335DeclareOperation("RatliffRushClosure",[IsIdealOfNumericalSemigroup]);
336
337#############################################################################
338##
339#F  RatliffRushNumberOfIdealOfNumericalSemigroup(I)
340##
341##  Returns the least nonnegative integer such that
342##  (n+1)I-nI is the Ratliff-Rush closure of I, see [DA-G-H].
343##
344#############################################################################
345DeclareGlobalFunction("RatliffRushNumberOfIdealOfNumericalSemigroup");
346DeclareOperation("RatliffRushNumber",[IsIdealOfNumericalSemigroup]);
347
348#############################################################################
349##
350#F  AsymptoticRatliffRushNumberOfIdealOfNumericalSemigroup(I)
351##
352##  Returns the least nonnegative integer n such that
353##  mI equals the Ratliff-Rush closure of mI for all m>=n,  see [DA-G-H].
354##
355#############################################################################
356DeclareGlobalFunction("AsymptoticRatliffRushNumberOfIdealOfNumericalSemigroup");
357DeclareOperation("AsymptoticRatliffRushNumber",[IsIdealOfNumericalSemigroup]);
358
359
360#############################################################################
361##
362#F  TranslationOfIdealOfNumericalSemigroup(k,I)
363##
364##  Given an ideal <I> of a numerical semigroup S and an integer <k>
365##  returns an ideal of the numerical semigroup S generated by
366##  {i1+k,...,in+k} where {i1,...,in} is the system of generators of <I>.
367##
368#############################################################################
369DeclareGlobalFunction("TranslationOfIdealOfNumericalSemigroup");
370
371
372#############################################################################
373##
374#F  IntersectionIdealsOfNumericalSemigroup(I,J)
375##
376##  Given two ideals <I> and <J> of a numerical semigroup S
377##  returns the ideal of the numerical semigroup S which is the
378##  intersection of the ideals <I> and <J>.
379##
380#############################################################################
381DeclareGlobalFunction("IntersectionIdealsOfNumericalSemigroup");
382
383########################################################################
384##
385#F AperyListOfIdealOfNumericalSemigroupWRTElement(I,n)
386##
387##  Computes the sets of elements x of I such that x-n not in I,
388##  where n is supposed to be in the ambient semigroup of I.
389##  The element in the i-th position of the output list (starting in 0)
390##  is congruent with i modulo n
391########################################################################
392DeclareGlobalFunction("AperyListOfIdealOfNumericalSemigroupWRTElement");
393
394########################################################################
395##
396#F AperyTableOfNumericalSemigroup(S)
397##
398##  Computes the Apéry table associated to S as
399## explained in [CJZ],
400##  that is, a list containing the Apéry list of S with respect to
401## its multiplicity and the Apéry lists of kM (with M the maximal
402##  ideal of S) with respect to the multiplicity of S, for k=1..r,
403##  where r is the reduction number of M
404##  (see ReductionNumberIdealNumericalSemigroup).
405########################################################################
406DeclareGlobalFunction("AperyTableOfNumericalSemigroup");
407DeclareOperation("AperyTable",[IsNumericalSemigroup]);
408
409########################################################################
410##
411#F StarClosureOfIdealOfNumericalSemigroup(i,is)
412##  i is an ideal and is is a set of ideals (all from the same
413##	numerical semigroup). The output is i^{*_is}, where
414## *_is is the star operation generated by is
415## The implementation uses Section 3 of
416##  -D. Spirito, Star Operations on Numerical Semigroups
417########################################################################
418
419DeclareGlobalFunction("StarClosureOfIdealOfNumericalSemigroup");
420