1#############################################################################
2##
3#W  numsgp-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
16DeclareInfoClass("InfoNumSgps");
17
18
19
20#############################################################################
21##
22#R  IsNumericalSemigroupRep
23##
24##  The representation of a numerical semigroup.
25##
26#############################################################################
27DeclareRepresentation( "IsNumericalSemigroupRep", IsAttributeStoringRep, []);
28
29
30#############################################################################
31##
32#C  IsNumericalSemigroup
33##
34##  The category of numerical semigroups.
35##
36#############################################################################
37DeclareCategory( "IsNumericalSemigroup", IsAdditiveMagma and IsNumericalSemigroupRep);
38
39
40# Elements of numerical semigroups are integers, so numerical semigroups are
41# collections of integers.
42BindGlobal( "NumericalSemigroupsType",
43        NewType( CollectionsFamily(CyclotomicsFamily),
44                 IsNumericalSemigroup));
45
46
47#############################################################################
48##
49#F  NumericalSemigroupByGenerators(arg)
50##
51##  Returns the numerical semigroup generated by arg.
52##
53#############################################################################
54DeclareGlobalFunction( "NumericalSemigroupByGenerators" );
55#A
56DeclareAttribute( "Generators", IsNumericalSemigroup);
57DeclareSynonymAttr( "IsNumericalSemigroupByGenerators", HasGenerators);
58
59
60#############################################################################
61##
62#F  ModularNumericalSemigroup(a,b)
63##
64##  Returns the modular numerical semigroup satisfying ax mod b <= x
65##
66#############################################################################
67DeclareGlobalFunction( "ModularNumericalSemigroup" );
68#A
69DeclareAttribute( "ModularConditionNS", IsNumericalSemigroup);
70
71
72#############################################################################
73##
74#F  ProportionallyModularNumericalSemigroup(a,b,c)
75##
76##  Returns the proportionally modular numerical semigroup
77##  satisfying ax mod b <= cx
78##
79#############################################################################
80DeclareGlobalFunction( "ProportionallyModularNumericalSemigroup" );
81#A
82DeclareAttribute( "ProportionallyModularConditionNS", IsNumericalSemigroup);
83
84#############################################################################
85##
86#F NumericalSemigroupByAffineMap(a,b,c)
87## Computes the smallest numerical semigroup
88## containing c and closed under x->ax+b
89##
90#############################################################################
91DeclareGlobalFunction( "NumericalSemigroupByAffineMap");
92
93
94#############################################################################
95##
96#F  NumericalSemigroupByInterval(arg)
97##
98##  The set of numerators of all rational numbers in the interval is a
99##  numerical semigroup. Returns this  numerical semigroup
100##
101#############################################################################
102DeclareGlobalFunction( "NumericalSemigroupByInterval" );
103#A
104DeclareAttribute( "ClosedIntervalNS", IsNumericalSemigroup);
105DeclareSynonymAttr( "IsNumericalSemigroupByInterval",HasClosedIntervalNS);
106
107
108
109#############################################################################
110##
111#F  NumericalSemigroupByOpenInterval(arg)
112##
113##  The set of numerators of all rational numbers in the interval is a
114##  numerical semigroup. Returns this  numerical semigroup
115##
116#############################################################################
117DeclareGlobalFunction( "NumericalSemigroupByOpenInterval" );
118#A
119DeclareAttribute( "OpenIntervalNS", IsNumericalSemigroup);
120DeclareSynonymAttr( "IsNumericalSemigroupByOpenInterval",HasOpenIntervalNS);
121
122
123
124#############################################################################
125##
126#F  NumericalSemigroupBySubAdditiveFunction(L)
127##
128##  Returns the numerical semigroup specified by the subadditive
129##  function L.
130##
131#############################################################################
132DeclareGlobalFunction( "NumericalSemigroupBySubAdditiveFunction" );
133#A
134DeclareAttribute( "SubAdditiveFunctionNS", IsNumericalSemigroup);
135DeclareSynonymAttr( "IsNumericalSemigroupBySubAdditiveFunction",HasSubAdditiveFunctionNS);
136
137
138
139#############################################################################
140##
141#F  NumericalSemigroupByAperyList(L)
142##
143##  Returns the numerical semigroup specified by the Apery list L.
144##
145#############################################################################
146DeclareGlobalFunction( "NumericalSemigroupByAperyList" );
147#A
148#DeclareAttribute( "AperyListNS", IsNumericalSemigroup);
149DeclareAttribute( "AperyList", IsNumericalSemigroup);
150DeclareSynonymAttr( "IsNumericalSemigroupByAperyList",HasAperyList);
151
152
153
154#############################################################################
155##
156#F  NumericalSemigroupBySmallElements(L)
157##
158##  Returns the numerical semigroup specified by L,
159##  which must be the list of elements of a numerical semigroup,
160##  not greater than the Frobenius number + 1.
161##
162#############################################################################
163DeclareGlobalFunction( "NumericalSemigroupBySmallElements" );
164#A
165DeclareAttribute( "SmallElements", IsNumericalSemigroup);
166DeclareSynonymAttr( "IsNumericalSemigroupBySmallElements",HasSmallElements);
167
168
169#############################################################################
170##
171#F  NumericalSemigroupBySmallElementsNC(L)
172##
173## NC version of NumericalSemigroupBySmallElements
174##
175#############################################################################
176DeclareGlobalFunction( "NumericalSemigroupBySmallElementsNC" );
177
178
179#############################################################################
180##
181#F  NumericalSemigroupByGaps(L)
182##
183##  Returns the numerical semigroup specified by L,
184##  which must be the list of gaps of a numerical semigroup.
185##
186#############################################################################
187DeclareGlobalFunction( "NumericalSemigroupByGaps" );
188#A
189#DeclareAttribute( "GapsNS", IsNumericalSemigroup);
190DeclareAttribute( "Gaps", IsNumericalSemigroup);
191DeclareSynonymAttr( "IsNumericalSemigroupByGaps",HasGaps);
192
193
194#############################################################################
195##
196#F  NumericalSemigroupByFundamentalGaps(L)
197##
198##  Returns the numerical semigroup specified by L,
199##  which must be the list of fundamental gaps of a numerical semigroup.
200##
201#############################################################################
202DeclareGlobalFunction( "NumericalSemigroupByFundamentalGaps" );
203#A
204DeclareAttribute( "FundamentalGaps", IsNumericalSemigroup);
205DeclareSynonymAttr( "IsNumericalSemigroupByFundamentalGaps",HasFundamentalGaps);
206
207
208#############################################################################
209##
210#F  NumericalSemigroup(arg)
211##
212##  This function's first argument may be one of:
213##  "generators", "modular", ## "minimalgenerators" #no longer, since version 1.1.9
214##  "propmodular", "elements", "gaps",
215##  "fundamentalgaps", "subadditive" or "apery" according to
216##  how the semigroup is being defined.
217##  The following arguments must conform to the arguments of
218##  the corresponding function defined above.
219##  By default, the option "generators" is used, so,
220##  gap> NumericalSemigroup(3,7);
221##  <Numerical semigroup with 2 generators>
222##
223##
224#############################################################################
225DeclareGlobalFunction( "NumericalSemigroup" );
226
227
228#############################################################################
229##
230#P  IsProportionallyModularNumericalSemigroup(S)
231##
232##  Tests if a numerical semigroup is proportionally modular.
233##
234#############################################################################
235DeclareProperty( "IsProportionallyModularNumericalSemigroup", IsNumericalSemigroup);
236
237
238
239#############################################################################
240##
241#P  IsModularNumericalSemigroup(S)
242##
243##  Tests if a numerical semigroup is modular.
244##
245#############################################################################
246DeclareProperty( "IsModularNumericalSemigroup", IsNumericalSemigroup);
247
248
249#############################################################################
250