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