Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.
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
Project: cocalc-sagemath-dev-slelievre
Views: 418346<?xml version="1.0" encoding="UTF-8"?>1<Section>2<Heading>3Generating Numerical Semigroups4</Heading>5We recall some definitions from Chapter <Ref Chap="Intro"/>.6<P/>7A numerical semigroup8is a subset of the set <M> {\mathbb N} </M> of nonnegative integers9that is closed under addition, contains <M>0</M> and whose complement in <M> {\mathbb N} </M> is10finite.111213<P/>1415We refer to the elements in a numerical16semigroup that are less than or equal to17the conductor as <E>small elements</E> of18the semigroup.1920<P/>2122A <E>gap</E> of a numerical semigroup <M>S</M> is a nonnegative integer not belonging to23<M>S</M>.24The <E>fundamental gaps</E> of <M>S</M> are those gaps that are maximal with respect to the partial order induced by25division in <M>{\mathbb N}</M>.2627<P/>2829Given a numerical semigroup <M>S</M> and a nonzero element <M>s</M> in it, one30can consider for every integer <M>i</M> ranging from <M>0</M> to <M>s-1</M>,31the smallest element in <M>S</M> congruent with <M>i</M> modulo <M>s</M>, say32<M>w(i)</M> (this element exists since the complement of <M>S</M> in33<M>{\mathbb N}</M> is finite). Clearly <M>w(0)=0</M>. The set <M>{\rm34Ap}(S,s)=\{ w(0),w(1),\ldots, w(s-1)\}</M> is called the <E>Apéry set</E> of35<M>S</M> with respect to <M>s</M>.3637<P/>3839Let <M>a,b,c,d</M> be positive integers such that <M>a/b < c/d</M>, and let <M>I=[a/b,c/d]</M>.40Then the set <M>{\rm S}(I)={\mathbb N}\cap \bigcup_{n\geq 0} n I</M> is a numerical semigroup.41This class of numerical semigroups coincides with that of sets of solutions to equations of the42form <M> A x \bmod\ B \leq C x</M> with <M> A,B,C</M> positive integers. A numerical semigroup in43this class is said to be <E>proportionally modular</E>.44If <M>C = 1</M>, then it is said to be <E>modular</E>.4546<P/>4748There are different ways to specify a numerical semigroup <M>S</M>,49namely, by its generators; by its gaps, its fundamental or special gaps50by its Apéry set, just to name some.51In this section we describe functions that may be used52to specify, in one of these ways, a numerical semigroup in &GAP;.5354<ManSection>55<Func Name="NumericalSemigroupByGenerators" Arg="List"/>56<Func Name="NumericalSemigroup" Arg="String, List" Label="by generators"/>57<Description>58<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>.59<P/>60<C>String</C> does not need to be present. When it is present, it must be <C>"generators"</C>.61<Example><![CDATA[62gap> s1 := NumericalSemigroupByGenerators(3,5,7);63<Numerical semigroup with 3 generators>64gap> s2 := NumericalSemigroupByGenerators([3,5,7]);65<Numerical semigroup with 3 generators>66gap> s3 := NumericalSemigroup("generators",3,5,7);67<Numerical semigroup with 3 generators>68gap> s4 := NumericalSemigroup("generators",[3,5,7]);69<Numerical semigroup with 3 generators>70gap> s5 := NumericalSemigroup(3,5,7);71<Numerical semigroup with 3 generators>72gap> s6 := NumericalSemigroup([3,5,7]);73<Numerical semigroup with 3 generators>74gap> s1=s2;s2=s3;s3=s4;s4=s5;s5=s6;75true76true77true78true79true80]]></Example>81</Description>82</ManSection>8384<ManSection>85<Func Name="NumericalSemigroupBySubAdditiveFunction" Arg="List"/>86<Func Name="NumericalSemigroup" Arg="String, List" Label="by subadditive function"/>8788<Description>89A periodic subadditive function with period <M>m</M> is given through the90list 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.91<P/>92In the second form, <C>String</C> must be <C>"subadditive"</C>.9394<Example><![CDATA[95gap> s := NumericalSemigroupBySubAdditiveFunction([5,4,2,0]);96<Numerical semigroup>97gap> t := NumericalSemigroup("subadditive",[5,4,2,0]);;98gap> s=t;99true100]]></Example>101</Description>102</ManSection>103104<ManSection>105<Func Name="NumericalSemigroupByAperyList" Arg="List"/>106<Func Name="NumericalSemigroup" Arg="String, List" Label="by Apery list"/>107108<Description>109<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>.110<P/>111In the second form, <C>String</C> must be <C>"apery"</C>.112<Example><![CDATA[113gap> s:=NumericalSemigroup(3,11);;114gap> ap := AperyListOfNumericalSemigroupWRTElement(s,20);115[ 0, 21, 22, 3, 24, 25, 6, 27, 28, 9, 30, 11, 12, 33, 14, 15, 36, 17, 18, 39 ]116gap> t:=NumericalSemigroupByAperyList(ap);;117gap> r := NumericalSemigroup("apery",ap);;118gap> s=t;t=r;119true120true121]]></Example>122</Description>123</ManSection>124125<ManSection>126<Func Name="NumericalSemigroupBySmallElements" Arg="List"/>127<Func Name="NumericalSemigroup" Arg="String, List" Label="by small elements"/>128129<Description>130<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.131When no such semigroup exists, an error is returned.132<P/>133In the second form, <C>String</C> must be <C>"elements"</C>.134<Example><![CDATA[135gap> s:=NumericalSemigroup(3,11);;136gap> se := SmallElements(s);137[ 0, 3, 6, 9, 11, 12, 14, 15, 17, 18, 20 ]138gap> t := NumericalSemigroupBySmallElements(se);;139gap> r := NumericalSemigroup("elements",se);;140gap> s=t;t=r;141true142true143gap> e := [ 0, 3, 6, 9, 11, 14, 15, 17, 18, 20 ];144[ 0, 3, 6, 9, 11, 14, 15, 17, 18, 20 ]145gap> NumericalSemigroupBySmallElements(e);146Error, The argument does not represent a numerical semigroup called from147<function "NumericalSemigroupBySmallElements">( <arguments> )148called from read-eval loop at line 35 of *stdin*149you can 'quit;' to quit to outer loop, or150you can 'return;' to continue151brk>152]]></Example>153</Description>154</ManSection>155156<ManSection>157<Func Name="NumericalSemigroupByGaps" Arg="List"/>158<Func Name="NumericalSemigroup" Arg="String, List" Label="by gaps"/>159<Description>160<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.161<P/>162In the second form, <C>String</C> must be <C>"gaps"</C>.163<Example><![CDATA[164gap> g := [ 1, 2, 4, 5, 7, 8, 10, 13, 16 ];;165gap> s := NumericalSemigroupByGaps(g);;166gap> t := NumericalSemigroup("gaps",g);;167gap> s=t;168true169gap> h := [ 1, 2, 5, 7, 8, 10, 13, 16 ];;170gap> NumericalSemigroupByGaps(h);171Error, The argument does not represent the gaps of a numerical semigroup called172from173<function "NumericalSemigroupByGaps">( <arguments> )174called from read-eval loop at line 34 of *stdin*175you can 'quit;' to quit to outer loop, or176you can 'return;' to continue177brk>178]]></Example>179</Description>180</ManSection>181182<ManSection>183<Func Name="NumericalSemigroupByFundamentalGaps" Arg="List"/>184<Func Name="NumericalSemigroup" Arg="String, List" Label="by fundamental gaps"/>185<Description>186<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.187<P/>188In the second form, <C>String</C> must be <C>"fundamentalgaps"</C>.189<Example><![CDATA[190gap> fg := [ 11, 14, 17, 20, 23, 26, 29, 32, 35 ];;191gap> NumericalSemigroupByFundamentalGaps(fg);192<Numerical semigroup>193gap> NumericalSemigroup("fundamentalgaps",fg);194<Numerical semigroup>195gap> last=last2;196true197gap> gg := [ 11, 17, 20, 22, 23, 26, 29, 32, 35 ];; #22 is not fundamental198gap> NumericalSemigroup("fundamentalgaps",fg);199<Numerical semigroup>200]]></Example>201</Description>202</ManSection>203204<ManSection>205<Func Name="NumericalSemigroupByAffineMap" Arg="a,b,c"/>206<Func Name="NumericalSemigroup" Arg="String, a,b" Label="by affine map"/>207<Description>208Given 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>,209this 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>.210<P/>211In the second form, <C>String</C> must be <C>"affinemap"</C>.212<Example><![CDATA[213gap> s:=NumericalSemigroupByAffineMap(3,1,3);214<Numerical semigroup with 3 generators>215gap> SmallElements(s);216[ 0, 3, 6, 9, 10, 12, 13, 15, 16, 18 ]217gap> t:=NumericalSemigroup("affinemap",3,1,3);;218gap> s=t;219true220]]></Example>221</Description>222</ManSection>223224<ManSection>225<Func Name="ModularNumericalSemigroup" Arg="a,b"/>226<Func Name="NumericalSemigroup" Arg="String, a,b" Label="by modular condition"/>227<Description>228Given two positive integers <A>a</A> and <A>b</A>,229this function returns a modular numerical semigroup230satisfying <M>ax \bmod\ b \le x</M>.231<P/>232In the second form, <C>String</C> must be <C>"modular"</C>.233<Example><![CDATA[234gap> ModularNumericalSemigroup(3,7);235<Modular numerical semigroup satisfying 3x mod 7 <= x >236gap> NumericalSemigroup("modular",3,7);237<Modular numerical semigroup satisfying 3x mod 7 <= x >238]]></Example>239</Description>240</ManSection>241242243<ManSection>244<Func Name="ProportionallyModularNumericalSemigroup" Arg="a,b,c"/>245<Func Name="NumericalSemigroup" Arg="String, a,b" Label="by proportionally modular condition"/>246<Description>247Given three positive integers <A>a</A>, <A>b</A> and <A>c</A>,248this function returns a proportionally modular numerical semigroup249satisfying <M>ax\bmod\ b \le cx</M>.250<P/>251In the second form, <C>String</C> must be <C>"propmodular"</C>.252<Example><![CDATA[253gap> ProportionallyModularNumericalSemigroup(3,7,12);254<Proportionally modular numerical semigroup satisfying 3x mod 7 <= 12x >255gap> NumericalSemigroup("propmodular",3,7,12);256<Proportionally modular numerical semigroup satisfying 3x mod 7 <= 12x >257]]></Example>258When <M>c=1</M>, the semigroup is seen as a modular numerical semigroup.259<Example><![CDATA[260gap> NumericalSemigroup("propmodular",67,98,1);261<Modular numerical semigroup satisfying 67x mod 98 <= x >262]]></Example>263</Description>264</ManSection>265<P/>266Numerical semigroups generated by an interval of positive integers are267known to be proportionally modular, and thus they are treated as such, since membership268and other problems can be solved efficiently for these semigroups.269<P/>270271<ManSection>272273<Func Name="NumericalSemigroupByInterval" Arg="List"/>274<Func Name="NumericalSemigroup" Arg="String, List" Label="by (closed) interval"/>275<Description>276The 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.277<P/>278<C>String</C> does not need to be present. When it is present, it must be <C>"interval"</C>.279<Example><![CDATA[280gap> NumericalSemigroupByInterval(7/5,5/3);281<Proportionally modular numerical semigroup satisfying 25x mod 35 <= 4x >282gap> NumericalSemigroup("interval",[7/5,5/3]);283<Proportionally modular numerical semigroup satisfying 25x mod 35 <= 4x >284gap> SmallElements(last);285[ 0, 3, 5 ]286]]></Example>287</Description>288289</ManSection>290291<ManSection>292293<Func Name="NumericalSemigroupByOpenInterval" Arg="List"/>294<Func Name="NumericalSemigroup" Arg="String, List" Label="by open interval"/>295<Description>296The 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.297<P/>298<C>String</C> does not need to be present. When it is present, it must be <C>"openinterval"</C>.299<Example><![CDATA[300gap> NumericalSemigroupByOpenInterval(7/5,5/3);301<Numerical semigroup>302gap> NumericalSemigroup("openinterval",[7/5,5/3]);303<Numerical semigroup>304gap> SmallElements(last);305[ 0, 3, 6, 8 ]306]]></Example>307</Description>308309</ManSection>310311</Section>312313314315