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
<?xml version="1.0" encoding="UTF-8"?>
2
<Section>
3
<Heading>
4
Generating Numerical Semigroups
5
</Heading>
6
We recall some definitions from Chapter <Ref Chap="Intro"/>.
7
<P/>
8
A numerical semigroup
9
is a subset of the set <M> {\mathbb N} </M> of nonnegative integers
10
that is closed under addition, contains <M>0</M> and whose complement in <M> {\mathbb N} </M> is
11
finite.
12
13
14
<P/>
15
16
We refer to the elements in a numerical
17
semigroup that are less than or equal to
18
the conductor as <E>small elements</E> of
19
the semigroup.
20
21
<P/>
22
23
A <E>gap</E> of a numerical semigroup <M>S</M> is a nonnegative integer not belonging to
24
<M>S</M>.
25
The <E>fundamental gaps</E> of <M>S</M> are those gaps that are maximal with respect to the partial order induced by
26
division in <M>{\mathbb N}</M>.
27
28
<P/>
29
30
Given a numerical semigroup <M>S</M> and a nonzero element <M>s</M> in it, one
31
can consider for every integer <M>i</M> ranging from <M>0</M> to <M>s-1</M>,
32
the smallest element in <M>S</M> congruent with <M>i</M> modulo <M>s</M>, say
33
<M>w(i)</M> (this element exists since the complement of <M>S</M> in
34
<M>{\mathbb N}</M> is finite). Clearly <M>w(0)=0</M>. The set <M>{\rm
35
Ap}(S,s)=\{ w(0),w(1),\ldots, w(s-1)\}</M> is called the <E>Apéry set</E> of
36
<M>S</M> with respect to <M>s</M>.
37
38
<P/>
39
40
Let <M>a,b,c,d</M> be positive integers such that <M>a/b &lt; c/d</M>, and let <M>I=[a/b,c/d]</M>.
41
Then the set <M>{\rm S}(I)={\mathbb N}\cap \bigcup_{n\geq 0} n I</M> is a numerical semigroup.
42
This class of numerical semigroups coincides with that of sets of solutions to equations of the
43
form <M> A x \bmod\ B \leq C x</M> with <M> A,B,C</M> positive integers. A numerical semigroup in
44
this class is said to be <E>proportionally modular</E>.
45
If <M>C = 1</M>, then it is said to be <E>modular</E>.
46
47
<P/>
48
49
There are different ways to specify a numerical semigroup <M>S</M>,
50
namely, by its generators; by its gaps, its fundamental or special gaps
51
by its Apéry set, just to name some.
52
In this section we describe functions that may be used
53
to specify, in one of these ways, a numerical semigroup in &GAP;.
54
55
<ManSection>
56
<Func Name="NumericalSemigroupByGenerators" Arg="List"/>
57
<Func Name="NumericalSemigroup" Arg="String, List" Label="by generators"/>
58
<Description>
59
<C>List</C> is a list of nonnegative integers with greatest common divisor equal to one. These integers may be given as a list or by a sequence of individual elements. The output is the numerical semigroup spanned by <C>List</C>.
60
<P/>
61
<C>String</C> does not need to be present. When it is present, it must be <C>"generators"</C>.
62
<Example><![CDATA[
63
gap> s1 := NumericalSemigroupByGenerators(3,5,7);
64
<Numerical semigroup with 3 generators>
65
gap> s2 := NumericalSemigroupByGenerators([3,5,7]);
66
<Numerical semigroup with 3 generators>
67
gap> s3 := NumericalSemigroup("generators",3,5,7);
68
<Numerical semigroup with 3 generators>
69
gap> s4 := NumericalSemigroup("generators",[3,5,7]);
70
<Numerical semigroup with 3 generators>
71
gap> s5 := NumericalSemigroup(3,5,7);
72
<Numerical semigroup with 3 generators>
73
gap> s6 := NumericalSemigroup([3,5,7]);
74
<Numerical semigroup with 3 generators>
75
gap> s1=s2;s2=s3;s3=s4;s4=s5;s5=s6;
76
true
77
true
78
true
79
true
80
true
81
]]></Example>
82
</Description>
83
</ManSection>
84
85
<ManSection>
86
<Func Name="NumericalSemigroupBySubAdditiveFunction" Arg="List"/>
87
<Func Name="NumericalSemigroup" Arg="String, List" Label="by subadditive function"/>
88
89
<Description>
90
A periodic subadditive function with period <M>m</M> is given through the
91
list of images of the integers from <M>1</M> to <M>m</M>. The image of <M>m</M> has to be <M>0</M>. The output is the numerical semigroup determined by this subadditive function.
92
<P/>
93
In the second form, <C>String</C> must be <C>"subadditive"</C>.
94
95
<Example><![CDATA[
96
gap> s := NumericalSemigroupBySubAdditiveFunction([5,4,2,0]);
97
<Numerical semigroup>
98
gap> t := NumericalSemigroup("subadditive",[5,4,2,0]);;
99
gap> s=t;
100
true
101
]]></Example>
102
</Description>
103
</ManSection>
104
105
<ManSection>
106
<Func Name="NumericalSemigroupByAperyList" Arg="List"/>
107
<Func Name="NumericalSemigroup" Arg="String, List" Label="by Apery list"/>
108
109
<Description>
110
<C>List</C> is an Apéry list. The output is the numerical semigroup whose Apéry set with respect to the length of given list is <C>List</C>.
111
<P/>
112
In the second form, <C>String</C> must be <C>"apery"</C>.
113
<Example><![CDATA[
114
gap> s:=NumericalSemigroup(3,11);;
115
gap> ap := AperyListOfNumericalSemigroupWRTElement(s,20);
116
[ 0, 21, 22, 3, 24, 25, 6, 27, 28, 9, 30, 11, 12, 33, 14, 15, 36, 17, 18, 39 ]
117
gap> t:=NumericalSemigroupByAperyList(ap);;
118
gap> r := NumericalSemigroup("apery",ap);;
119
gap> s=t;t=r;
120
true
121
true
122
]]></Example>
123
</Description>
124
</ManSection>
125
126
<ManSection>
127
<Func Name="NumericalSemigroupBySmallElements" Arg="List"/>
128
<Func Name="NumericalSemigroup" Arg="String, List" Label="by small elements"/>
129
130
<Description>
131
<C>List</C> is the set of small elements of a numerical semigroup, that is, the set of all elements not greater than the conductor. The output is the numerical semigroup with this set of small elements.
132
When no such semigroup exists, an error is returned.
133
<P/>
134
In the second form, <C>String</C> must be <C>"elements"</C>.
135
<Example><![CDATA[
136
gap> s:=NumericalSemigroup(3,11);;
137
gap> se := SmallElements(s);
138
[ 0, 3, 6, 9, 11, 12, 14, 15, 17, 18, 20 ]
139
gap> t := NumericalSemigroupBySmallElements(se);;
140
gap> r := NumericalSemigroup("elements",se);;
141
gap> s=t;t=r;
142
true
143
true
144
gap> e := [ 0, 3, 6, 9, 11, 14, 15, 17, 18, 20 ];
145
[ 0, 3, 6, 9, 11, 14, 15, 17, 18, 20 ]
146
gap> NumericalSemigroupBySmallElements(e);
147
Error, The argument does not represent a numerical semigroup called from
148
<function "NumericalSemigroupBySmallElements">( <arguments> )
149
called from read-eval loop at line 35 of *stdin*
150
you can 'quit;' to quit to outer loop, or
151
you can 'return;' to continue
152
brk>
153
]]></Example>
154
</Description>
155
</ManSection>
156
157
<ManSection>
158
<Func Name="NumericalSemigroupByGaps" Arg="List"/>
159
<Func Name="NumericalSemigroup" Arg="String, List" Label="by gaps"/>
160
<Description>
161
<C>List</C> is the set of gaps of a numerical semigroup. The output is the numerical semigroup with this set of gaps. When no semigroup exists with the given set as set of gaps, an error is returned.
162
<P/>
163
In the second form, <C>String</C> must be <C>"gaps"</C>.
164
<Example><![CDATA[
165
gap> g := [ 1, 2, 4, 5, 7, 8, 10, 13, 16 ];;
166
gap> s := NumericalSemigroupByGaps(g);;
167
gap> t := NumericalSemigroup("gaps",g);;
168
gap> s=t;
169
true
170
gap> h := [ 1, 2, 5, 7, 8, 10, 13, 16 ];;
171
gap> NumericalSemigroupByGaps(h);
172
Error, The argument does not represent the gaps of a numerical semigroup called
173
from
174
<function "NumericalSemigroupByGaps">( <arguments> )
175
called from read-eval loop at line 34 of *stdin*
176
you can 'quit;' to quit to outer loop, or
177
you can 'return;' to continue
178
brk>
179
]]></Example>
180
</Description>
181
</ManSection>
182
183
<ManSection>
184
<Func Name="NumericalSemigroupByFundamentalGaps" Arg="List"/>
185
<Func Name="NumericalSemigroup" Arg="String, List" Label="by fundamental gaps"/>
186
<Description>
187
<C>List</C> is the set of fundamental gaps of a numerical semigroup. The output is the numerical semigroup determined by these gaps. When the given set contains elements (which will be gaps) that are not fundamental gaps, they are silently removed.
188
<P/>
189
In the second form, <C>String</C> must be <C>"fundamentalgaps"</C>.
190
<Example><![CDATA[
191
gap> fg := [ 11, 14, 17, 20, 23, 26, 29, 32, 35 ];;
192
gap> NumericalSemigroupByFundamentalGaps(fg);
193
<Numerical semigroup>
194
gap> NumericalSemigroup("fundamentalgaps",fg);
195
<Numerical semigroup>
196
gap> last=last2;
197
true
198
gap> gg := [ 11, 17, 20, 22, 23, 26, 29, 32, 35 ];; #22 is not fundamental
199
gap> NumericalSemigroup("fundamentalgaps",fg);
200
<Numerical semigroup>
201
]]></Example>
202
</Description>
203
</ManSection>
204
205
<ManSection>
206
<Func Name="NumericalSemigroupByAffineMap" Arg="a,b,c"/>
207
<Func Name="NumericalSemigroup" Arg="String, a,b" Label="by affine map"/>
208
<Description>
209
Given three nonnegative integers <A>a</A>, <A>b</A> and <A>c</A>, with <M>a,c>0</M> and <M>\gcd(b,c)=1</M>,
210
this function returns the least (with restpect to set order inclusion) numerical semigroup containing <A>c</A> and closed under the map <M>x\mapsto ax+b</M>. The procedure is explained in <Cite Key="Ugolini"></Cite>.
211
<P/>
212
In the second form, <C>String</C> must be <C>"affinemap"</C>.
213
<Example><![CDATA[
214
gap> s:=NumericalSemigroupByAffineMap(3,1,3);
215
<Numerical semigroup with 3 generators>
216
gap> SmallElements(s);
217
[ 0, 3, 6, 9, 10, 12, 13, 15, 16, 18 ]
218
gap> t:=NumericalSemigroup("affinemap",3,1,3);;
219
gap> s=t;
220
true
221
]]></Example>
222
</Description>
223
</ManSection>
224
225
<ManSection>
226
<Func Name="ModularNumericalSemigroup" Arg="a,b"/>
227
<Func Name="NumericalSemigroup" Arg="String, a,b" Label="by modular condition"/>
228
<Description>
229
Given two positive integers <A>a</A> and <A>b</A>,
230
this function returns a modular numerical semigroup
231
satisfying <M>ax \bmod\ b \le x</M>.
232
<P/>
233
In the second form, <C>String</C> must be <C>"modular"</C>.
234
<Example><![CDATA[
235
gap> ModularNumericalSemigroup(3,7);
236
<Modular numerical semigroup satisfying 3x mod 7 <= x >
237
gap> NumericalSemigroup("modular",3,7);
238
<Modular numerical semigroup satisfying 3x mod 7 <= x >
239
]]></Example>
240
</Description>
241
</ManSection>
242
243
244
<ManSection>
245
<Func Name="ProportionallyModularNumericalSemigroup" Arg="a,b,c"/>
246
<Func Name="NumericalSemigroup" Arg="String, a,b" Label="by proportionally modular condition"/>
247
<Description>
248
Given three positive integers <A>a</A>, <A>b</A> and <A>c</A>,
249
this function returns a proportionally modular numerical semigroup
250
satisfying <M>ax\bmod\ b \le cx</M>.
251
<P/>
252
In the second form, <C>String</C> must be <C>"propmodular"</C>.
253
<Example><![CDATA[
254
gap> ProportionallyModularNumericalSemigroup(3,7,12);
255
<Proportionally modular numerical semigroup satisfying 3x mod 7 <= 12x >
256
gap> NumericalSemigroup("propmodular",3,7,12);
257
<Proportionally modular numerical semigroup satisfying 3x mod 7 <= 12x >
258
]]></Example>
259
When <M>c=1</M>, the semigroup is seen as a modular numerical semigroup.
260
<Example><![CDATA[
261
gap> NumericalSemigroup("propmodular",67,98,1);
262
<Modular numerical semigroup satisfying 67x mod 98 <= x >
263
]]></Example>
264
</Description>
265
</ManSection>
266
<P/>
267
Numerical semigroups generated by an interval of positive integers are
268
known to be proportionally modular, and thus they are treated as such, since membership
269
and other problems can be solved efficiently for these semigroups.
270
<P/>
271
272
<ManSection>
273
274
<Func Name="NumericalSemigroupByInterval" Arg="List"/>
275
<Func Name="NumericalSemigroup" Arg="String, List" Label="by (closed) interval"/>
276
<Description>
277
The input is a list of rational numbers defining a closed interval. The output is the semigroup of numerators of all rational numbers in this interval.
278
<P/>
279
<C>String</C> does not need to be present. When it is present, it must be <C>"interval"</C>.
280
<Example><![CDATA[
281
gap> NumericalSemigroupByInterval(7/5,5/3);
282
<Proportionally modular numerical semigroup satisfying 25x mod 35 <= 4x >
283
gap> NumericalSemigroup("interval",[7/5,5/3]);
284
<Proportionally modular numerical semigroup satisfying 25x mod 35 <= 4x >
285
gap> SmallElements(last);
286
[ 0, 3, 5 ]
287
]]></Example>
288
</Description>
289
290
</ManSection>
291
292
<ManSection>
293
294
<Func Name="NumericalSemigroupByOpenInterval" Arg="List"/>
295
<Func Name="NumericalSemigroup" Arg="String, List" Label="by open interval"/>
296
<Description>
297
The input is a list of rational numbers defining a open interval. The output is the semigroup of numerators of all rational numbers in this interval.
298
<P/>
299
<C>String</C> does not need to be present. When it is present, it must be <C>"openinterval"</C>.
300
<Example><![CDATA[
301
gap> NumericalSemigroupByOpenInterval(7/5,5/3);
302
<Numerical semigroup>
303
gap> NumericalSemigroup("openinterval",[7/5,5/3]);
304
<Numerical semigroup>
305
gap> SmallElements(last);
306
[ 0, 3, 6, 8 ]
307
]]></Example>
308
</Description>
309
310
</ManSection>
311
312
</Section>
313
314
315