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