CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutSign UpSign In

Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.

| Download

GAP 4.8.9 installation with standard packages -- copy to your CoCalc project to get it

Views: 418346
1
2
5 Constructing numerical semigroups from others
3
4
5
5.1 Adding and removing elements of a numerical semigroup
6
7
In this section we show how to construct new numerical semigroups from a
8
given numerical semigroup. Two dual operations are presented. The first one
9
removes a minimal generator from a numerical semigroup. The second adds a
10
special gap to a semigroup (see [RGSGGJM03]).
11
12
5.1-1 RemoveMinimalGeneratorFromNumericalSemigroup
13
14
RemoveMinimalGeneratorFromNumericalSemigroup( n, S )  function
15
16
S is a numerical semigroup and n is one if its minimal generators.
17
18
The output is the numerical semigroup S ∖{n} (see [RGSGGJM03]; S∖{n} is a
19
numerical semigroup if and only if n is a minimal generator of S).
20
21
 Example 
22
gap> s:=NumericalSemigroup(3,5,7);
23
<Numerical semigroup with 3 generators>
24
gap> RemoveMinimalGeneratorFromNumericalSemigroup(7,s);
25
<Numerical semigroup with 3 generators>
26
gap> MinimalGeneratingSystemOfNumericalSemigroup(last);
27
[ 3, 5 ]
28

29
30
5.1-2 AddSpecialGapOfNumericalSemigroup
31
32
AddSpecialGapOfNumericalSemigroup( g, S )  function
33
34
S is a numerical semigroup and g is a special gap of S
35
36
The output is the numerical semigroup S ∪{g} (see [RGSGGJM03], where it is
37
explained why this set is a numerical semigroup).
38
39
 Example 
40
gap> s:=NumericalSemigroup(3,5,7);;
41
gap> s2:=RemoveMinimalGeneratorFromNumericalSemigroup(5,s);
42
<Numerical semigroup with 3 generators>
43
gap> s3:=AddSpecialGapOfNumericalSemigroup(5,s2);
44
<Numerical semigroup>
45
gap> SmallElementsOfNumericalSemigroup(s) =
46
> SmallElementsOfNumericalSemigroup(s3);
47
true 
48
gap> s=s3;
49
true
50

51
52
53
5.2 Intersections, and quotients and multiples by integers
54
55
5.2-1 Intersection
56
57
Intersection( S, T )  operation
58
IntersectionOfNumericalSemigroups( S, T )  function
59
60
S and T are numerical semigroups. Computes the intersection of S and T
61
(which is a numerical semigroup).
62
63
 Example 
64
gap> S := NumericalSemigroup("modular", 5,53);
65
<Modular numerical semigroup satisfying 5x mod 53 <= x >
66
gap> T := NumericalSemigroup(2,17);
67
<Numerical semigroup with 2 generators>
68
gap> SmallElements(S);
69
[ 0, 11, 12, 13, 22, 23, 24, 25, 26, 32, 33, 34, 35, 36, 37, 38, 39, 43 ]
70
gap> SmallElements(T);
71
[ 0, 2, 4, 6, 8, 10, 12, 14, 16 ]
72
gap> IntersectionOfNumericalSemigroups(S,T);
73
<Numerical semigroup>
74
gap> SmallElements(last);
75
[ 0, 12, 22, 23, 24, 25, 26, 32, 33, 34, 35, 36, 37, 38, 39, 43 ]
76

77
78
5.2-2 QuotientOfNumericalSemigroup
79
80
QuotientOfNumericalSemigroup( S, n )  function
81
\/( S, n )  operation
82
83
S is a numerical semigroup and n is an integer. Computes the quotient of S
84
by n, that is, the set { x∈ N | nx ∈ S}, which is again a numerical
85
semigroup. S / n may be used as a short for QuotientOfNumericalSemigroup(S,
86
n).
87
88
 Example 
89
gap> s:=NumericalSemigroup(3,29);
90
<Numerical semigroup with 2 generators>
91
gap> SmallElements(s);
92
[ 0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 29, 30, 32, 33, 35, 36, 38,
93
39, 41, 42, 44, 45, 47, 48, 50, 51, 53, 54, 56 ]
94
gap> t:=QuotientOfNumericalSemigroup(s,7);
95
<Numerical semigroup>
96
gap> SmallElements(t);
97
[ 0, 3, 5, 6, 8 ]
98
gap> u := s / 7;
99
<Numerical semigroup>
100
gap> SmallElements(u);
101
[ 0, 3, 5, 6, 8 ]
102

103
104
5.2-3 MultipleOfNumericalSemigroup
105
106
MultipleOfNumericalSemigroup( S, a, b )  function
107
108
S is a numerical semigroup, and a and b are positive integers. Computes a S∪
109
{b,b+1,->}. If b is smaller than a c, with c the conductor of S, then a
110
warning is displayed.
111
112
 Example 
113
gap> N:=NumericalSemigroup(1);;
114
gap> s:=MultipleOfNumericalSemigroup(N,4,20);;
115
gap> SmallElements(s);
116
[ 0, 4, 8, 12, 16, 20 ]
117

118
119
5.2-4 Difference
120
121
Difference( S, T )  operation
122
DifferenceOfNumericalSemigroups( S, T )  function
123
124
S, T are numerical semigroups. The output is the set S∖ T.
125
126
 Example 
127
gap> ns1 := NumericalSemigroup(5,7);;
128
gap> ns2 := NumericalSemigroup(7,11,12);;
129
gap> Difference(ns1,ns2);
130
[ 5, 10, 15, 17, 20, 27 ]
131
gap> Difference(ns2,ns1);
132
[ 11, 18, 23 ]
133
gap> DifferenceOfNumericalSemigroups(ns2,ns1);
134
[ 11, 18, 23 ]
135

136
137
5.2-5 NumericalDuplication
138
139
NumericalDuplication( S, E, b )  function
140
141
S is a numerical semigroup, and E and ideal of S, and b is a positive odd
142
integer, so that 2S∪ (2E+b) is a numerical semigroup (this extends slightly
143
the original definition where b was imposed to be in S, [DS13]; now the
144
condition imposed is E+E+b⊆ S). Computes 2S∪ (2E+b).
145
146
 Example 
147
gap> s:=NumericalSemigroup(3,5,7);
148
<Numerical semigroup with 3 generators>
149
gap> e:=6+s;
150
<Ideal of numerical semigroup>
151
gap> ndup:=NumericalDuplication(s,e,3);
152
<Numerical semigroup with 4 generators>
153
gap> SmallElements(ndup);
154
[ 0, 6, 10, 12, 14, 15, 16, 18, 20, 21, 22, 24 ]
155

156
157
5.2-6 InductiveNumericalSemigroup
158
159
InductiveNumericalSemigroup( S, a, b )  function
160
161
S is a numerical semigroup, and a and b are lists of positive integers, such
162
that b[i+1]ge a[i]b[i]. Computes inductively S_0= N and S_i+1=a[i]S_i∪
163
{a[i]b[i],a[i]b[i]+1,->}, and returns S_k, with k the length of a and b.
164
165
 Example 
166
gap> s:=InductiveNumericalSemigroup([4,2],[5,23]);;
167
gap> SmallElements(s);
168
[ 0, 8, 16, 24, 32, 40, 42, 44, 46 ]
169

170
171
172
5.3 Constructing the set of all numerical semigroups containing a given
173
numerical semigroup
174
175
In order to construct the set of numerical semigroups containing a fixed
176
numerical semigroup S, one first constructs its unitary extensions, that is
177
to say, the sets S∪{g} that are numerical semigroups with g a positive
178
integer. This is achieved by constructing the special gaps of the semigroup,
179
and then adding each of them to the numerical semigroup. Then we repeat the
180
process for each of this new numerical semigroups until we reach N.
181
182
These procedures are described in [RGSGGJM03].
183
184
5.3-1 OverSemigroupsNumericalSemigroup
185
186
OverSemigroupsNumericalSemigroup( s )  function
187
188
s is a numerical semigroup. The output is the set of numerical semigroups
189
containing it.
190
191
 Example 
192
gap> OverSemigroupsNumericalSemigroup(NumericalSemigroup(3,5,7));
193
[ <The numerical semigroup N>, <Numerical semigroup with 2 generators>, 
194
 <Numerical semigroup with 3 generators>, 
195
 <Numerical semigroup with 3 generators> ]
196
gap> List(last,s->MinimalGenerators(s));
197
[ [ 1 ], [ 2, 3 ], [ 3 .. 5 ], [ 3, 5, 7 ] ]
198

199
200
201
5.4 Constructing the set of numerical semigroup with given Frobenius number
202
203
5.4-1 NumericalSemigroupsWithFrobeniusNumber
204
205
NumericalSemigroupsWithFrobeniusNumber( f )  function
206
207
f is an non zero integer greater than or equal to -1. The output is the set
208
of numerical semigroups with Frobenius number f. The algorithm implemented
209
is given in [RGSGGJM04].
210
211
 Example 
212
gap> Length(NumericalSemigroupsWithFrobeniusNumber(15));
213
200
214

215
216
217
5.5 Constructing the set of numerical semigroups with genus g, that is,
218
numerical semigroups with exactly g gaps
219
220
Given a numerical semigroup of genus g, removing minimal generators, one
221
obtains numerical semigroups of genus g+1. In order to avoid repetitions, we
222
only remove minimal generators greater than the Frobenius number of the
223
numerical semigroup (this is accomplished with the local function sons).
224
225
These procedures are described in [RGSGGB03] and [BA08].
226
227
5.5-1 NumericalSemigroupsWithGenus
228
229
NumericalSemigroupsWithGenus( g )  function
230
231
g is a nonnegative integer. The output is the set of numerical semigroups
232
with genus g.
233
234
 Example 
235
gap> NumericalSemigroupsWithGenus(5);
236
[ <Numerical semigroup with 6 generators>, 
237
 <Numerical semigroup with 5 generators>, 
238
 <Numerical semigroup with 5 generators>, 
239
 <Numerical semigroup with 5 generators>, 
240
 <Numerical semigroup with 5 generators>, 
241
 <Numerical semigroup with 4 generators>, 
242
 <Numerical semigroup with 4 generators>, 
243
 <Numerical semigroup with 4 generators>, 
244
 <Numerical semigroup with 4 generators>, 
245
 <Numerical semigroup with 3 generators>, 
246
 <Numerical semigroup with 3 generators>, 
247
 <Numerical semigroup with 2 generators> ]
248
gap> List(last,MinimalGenerators);
249
[ [ 6 .. 11 ], [ 5, 7, 8, 9, 11 ], [ 5, 6, 8, 9 ], [ 5, 6, 7, 9 ], 
250
 [ 5, 6, 7, 8 ], [ 4, 6, 7 ], [ 4, 7, 9, 10 ], [ 4, 6, 9, 11 ], 
251
 [ 4, 5, 11 ], [ 3, 8, 10 ], [ 3, 7, 11 ], [ 2, 11 ] ]
252

253
254
255
5.6 Constructing the set of numerical semigroups with a given set of
256
pseudo-Frobenius numbers
257
258
Refer to PseudoFrobeniusOfNumericalSemigroup (3.1-16).
259
260
These procedures are described in [DGSRP16].
261
262
5.6-1 ForcedIntegersForPseudoFrobenius
263
264
ForcedIntegersForPseudoFrobenius( PF )  function
265
266
PF is a list of positive integers (given as a list or individual elements).
267
The output is:
268
269
 in case there exists a numerical semigroup S such that PF(S)=PF:
270
271
 a list [forced_gaps,forced_elts] such that:
272
273
 forced_gaps is contained in N - S for any numerical
274
semigroup S such that PF(S)={g_1,...,g_n}
275
276
 forced_elts is contained in S for any numerical semigroup
277
S such that PF(S)={g_1,...,g_n}
278
279
 "fail" in case it is found some condition that fails.
280
281
 Example 
282
gap> pf := [ 58, 64, 75 ];
283
[ 58, 64, 75 ]
284
gap> ForcedIntegersForPseudoFrobenius(pf); 
285
[ [ 1, 2, 3, 4, 5, 6, 7, 8, 11, 15, 16, 17, 25, 29, 32, 58, 64, 75 ], 
286
 [ 0, 59, 60, 67, 68, 69, 70, 71, 72, 73, 74, 76 ] ]
287

288
289
5.6-2 SimpleForcedIntegersForPseudoFrobenius
290
291
SimpleForcedIntegersForPseudoFrobenius( fg, fe, PF )  function
292
293
Is just a quicker version of ForcedIntegersForPseudoFrobenius (5.6-1)
294
295
fg is a list of integers that we require to be gaps of the semigroup; fe is
296
a list of integers that we require to be elements of the semigroup; PF is a
297
list of positive integers. The output is:
298
299
 in case there exists a numerical semigroup S such that PF(S)=PF:
300
301
 a list [forced_gaps,forced_elts] such that:
302
303
 forced_gaps is contained in N - S for any numerical
304
semigroup S such that PF(S)={g_1,...,g_n}
305
306
 forced_elts is contained in S for any numerical semigroup
307
S such that PF(S)={g_1,...,g_n}
308
309
 "fail" in case it is found some condition that fails.
310
311
 Example 
312
gap> pf := [ 15, 20, 27, 35 ];; 
313
gap> fint := ForcedIntegersForPseudoFrobenius(pf); 
314
[ [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 16, 20, 27, 35 ], 
315
 [ 0, 19, 23, 25, 26, 28, 29, 30, 31, 32, 33, 34, 36 ] ]
316
gap> free := Difference([1..Maximum(pf)],Union(fint));
317
[ 11, 13, 14, 17, 18, 21, 22, 24 ]
318
gap> SimpleForcedIntegersForPseudoFrobenius(fint[1],Union(fint[2],[free[1]]),pf);
319
[ [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 15, 16, 20, 24, 27, 35 ], 
320
 [ 0, 11, 19, 22, 23, 25, 26, 28, 29, 30, 31, 32, 33, 34, 36 ] ]
321

322
323
5.6-3 NumericalSemigroupsWithPseudoFrobeniusNumbers
324
325
NumericalSemigroupsWithPseudoFrobeniusNumbers( g )  function
326
327
PF is a list of positive integers (given as a list or individual elements).
328
The output is: a list of numerical semigroups S such that PF(S)=PF. When
329
Length(PF)=1, it makes use of the function
330
NumericalSemigroupsWithFrobeniusNumber (5.4-1)
331
332
 Example 
333
gap> pf := [ 58, 64, 75 ];
334
[ 58, 64, 75 ]
335
gap> Length(NumericalSemigroupsWithPseudoFrobeniusNumbers(pf));
336
561
337
gap> pf := [11,19,22];;
338
gap> NumericalSemigroupsWithPseudoFrobeniusNumbers(pf);
339
[ <Numerical semigroup>, <Numerical semigroup>, <Numerical semigroup>, 
340
 <Numerical semigroup>, <Numerical semigroup> ]
341
gap> List(last,MinimalGenerators); 
342
[ [ 7, 9, 17, 20 ], [ 7, 10, 13, 16, 18 ], [ 9, 12, 14, 15, 16, 17, 20 ], 
343
 [ 10, 13, 14, 15, 16, 17, 18, 21 ], 
344
 [ 12, 13, 14, 15, 16, 17, 18, 20, 21, 23 ] ]
345

346
347
5.6-4 ANumericalSemigroupWithPseudoFrobeniusNumbers
348
349
ANumericalSemigroupWithPseudoFrobeniusNumbers( g )  function
350
351
PF is a list of positive integers (given as a list or individual elements).
352
Alternatively, a record with fields "pseudo_frobenius" and "max_attempts"
353
option The output is: A numerical semigroup S such that PF(S)=PF. Returns
354
fail if it concludes that it exists and suggests to use
355
NumericalSemigroupsWithPseudoFrobeniusNumbers if it is not able to
356
conclude...
357
358
It makes use of the function
359
AnIrreducibleNumericalSemigroupWithFrobeniusNumber (6.1-4), when
360
Length(PF)=1 or Length(PF)=2 and 2*PF[1] = PF[2].
361
362
 Example 
363
gap> pf := [ 83, 169, 173, 214, 259 ];; 
364
gap> ANumericalSemigroupWithPseudoFrobeniusNumbers(pf);
365
<Numerical semigroup>
366
gap> gen := MinimalGeneratingSystem(last);
367
[ 38, 57, 64, 72, 79, 98, 99, 106, 118, 120, 124, 132, 134, 146, 147, 154, 
368
 165, 168, 179 ]
369
gap> ns := NumericalSemigroup(gen); 
370
<Numerical semigroup with 19 generators>
371
gap> PseudoFrobeniusOfNumericalSemigroup(ns);
372
[ 83, 169, 173, 214, 259 ]
373

374
375
376