1############################################################################# 2## 3#W good-semigroups.gd Manuel Delgado <mdelgado@fc.up.pt> 4#W Pedro A. Garcia-Sanchez <pedro@ugr.es> 5## 6#Y Copyright 2016-- Centro de Matemática da Universidade do Porto, Portugal and IEMath-GR, Universidad de Granada, Spain 7############################################################################# 8 9############################################################################# 10## 11#R IsGoodSemigroupRep 12## 13## The representation of a good semigroup. 14## 15############################################################################# 16DeclareRepresentation( "IsGoodSemigroupRep", IsAttributeStoringRep, [] ); 17 18############################################################################# 19## 20#C IsGoodSemigroup 21## 22## The category of affine semigroups. 23## 24############################################################################# 25DeclareCategory( "IsGoodSemigroup", IsAdditiveMagma and IsGoodSemigroupRep) ; 26 27# Elements of affine semigroups are collections of integers, so affine 28# semigroups are collections of collections of integers. 29BindGlobal( "GoodSemigroupsType", 30 NewType( CollectionsFamily(CollectionsFamily(CyclotomicsFamily)), 31 IsGoodSemigroup)); 32 33################################################### 34## 35#F GoodSemigroup(X) 36## define the good semigroup from the set of points G 37################################################### 38DeclareGlobalFunction("GoodSemigroup"); 39 40## ATTRIBUTES ## 41## 42DeclareAttribute( "DefinedByDuplication", IsGoodSemigroup); 43DeclareSynonymAttr( "IsGoodSemigroupByDuplication", HasDefinedByDuplication); 44## 45DeclareAttribute( "DefinedByAmalgamation", IsGoodSemigroup); 46DeclareSynonymAttr( "IsGoodSemigroupByAmalgamation", HasDefinedByAmalgamation); 47## 48DeclareAttribute( "DefinedByCartesianProduct", IsGoodSemigroup); 49DeclareSynonymAttr( "IsGoodSemigroupByCartesianProduct", HasDefinedByCartesianProduct); 50## 51DeclareAttribute( "Generators", IsGoodSemigroup); 52## 53################################################### 54## 55#A MinimalGoodGenerators(M) 56#A MinimalGoodGeneratingSystemOfGoodSemigroup(M) 57## returns the unique minimal good generating of the 58## good semigroup M 59################################################### 60DeclareAttribute( "MinimalGoodGenerators", IsGoodSemigroup); 61DeclareSynonymAttr("MinimalGoodGeneratingSystemOfGoodSemigroup",MinimalGoodGenerators); 62 63## 64DeclareAttribute( "Conductor", IsGoodSemigroup); 65DeclareSynonymAttr("ConductorOfGoodSemigroup",Conductor); 66################################################### 67## 68#A SmallElements(M) 69#A SmallElementsOfGoodSemigroup(M) 70## returns de small elements of M, that is, 71## the elements below the conductor 72################################################## 73DeclareAttribute( "SmallElements", IsGoodSemigroup); 74DeclareSynonymAttr("SmallElementsOfGoodSemigroup",SmallElements); 75 76########??????????? 77DeclareAttribute( "NumericalSemigroupGS", IsGoodSemigroup); 78DeclareAttribute( "NumericalSemigroupListGS", IsGoodSemigroup); 79DeclareAttribute( "IdealGS", IsGoodSemigroup); 80DeclareAttribute( "MorphismGS", IsGoodSemigroup); 81 82## OPERATIONS ## 83DeclareOperation("BelongsToGoodSemigroup",[IsHomogeneousList,IsGoodSemigroup]); 84 85## FUNCTIONS ## 86 87 #################################################### 88 ## 89 #F NumericalDublication(S,E,b) 90 ## returns 2S\cup(2E+b) 91 #################################################### 92DeclareGlobalFunction("NumericalDuplication"); 93 94################################################### 95## 96#F NumericalSemigroupDuplication(S,E) 97## returns S\bowtie E 98################################################### 99DeclareGlobalFunction("NumericalSemigroupDuplication"); 100 101################################################### 102## 103#F AmalgamationOfNumericalSemigroups(S,E,c) 104## returns S\bowtie^f E, f multiplication by c 105################################################### 106DeclareGlobalFunction("AmalgamationOfNumericalSemigroups"); 107 108################################################### 109## 110#F CartesianProductOfNumericalSemigroups(S1,S2) 111## Computes the cartesian product of S1 and S2, which 112## is a good semigroup 113################################################### 114DeclareGlobalFunction("CartesianProductOfNumericalSemigroups"); 115 116################################################### 117## 118#F RepresentsSmallElementsOfGoodSemigroup(X) 119## detects if X is a good semiring 120################################################### 121DeclareGlobalFunction("RepresentsSmallElementsOfGoodSemigroup"); 122 123############################################################### 124## 125#F IsSymmetricGoodSemigroup(M) 126## Determines if M is symmetric 127############################################################### 128#DeclareGlobalFunction("IsSymmetricGoodSemigroup"); 129DeclareProperty("IsSymmetricGoodSemigroup",IsGoodSemigroup); 130DeclareAttribute("IsSymmetric",IsGoodSemigroup); 131 132############################################################### 133## 134#F GoodSemigroupBySmallElements(M) 135## Constructs good semigroup from a set of small elements 136############################################################### 137DeclareGlobalFunction("GoodSemigroupBySmallElements"); 138 139 140############################################################### 141## 142#F ArfGoodSemigroupClosure(M) 143## Constructs Arf good semigroup closure of M 144############################################################### 145DeclareGlobalFunction("ArfGoodSemigroupClosure"); 146DeclareOperation("ArfClosure", [IsGoodSemigroup]); 147 148############################################################### 149## 150#F MaximalElementsOfGoodSemigroup(M) 151## returns the set of maximal elements of M 152############################################################### 153DeclareGlobalFunction("MaximalElementsOfGoodSemigroup"); 154 155############################################################### 156## 157#F IrreducibleMaximalElementsOfGoodSemigroup(M) 158## returns the set of irreducible maximal elements of M 159############################################################### 160DeclareGlobalFunction("IrreducibleMaximalElementsOfGoodSemigroup"); 161 162############################################################### 163## 164#F GoodSemigroupByMaximalElements(S1,S2,mx) 165## returns the good semigroup determined by removing from 166## S1 x S2 the set of points "above" a maximal element 167############################################################### 168DeclareGlobalFunction("GoodSemigroupByMaximalElements"); 169 170##################################################### 171## 172#F ProjectionOfAGoodSemigroup:=function(S,num) 173## Given a good semigroup S it returns the num-th numerical semigroup projection 174##################################################### 175DeclareGlobalFunction("ProjectionOfGoodSemigroup"); 176 177##################################################### 178## 179#F GenusOfAGoodSemigroup:=function(S) 180## Given a good semigroup S it returns its genus 181##################################################### 182DeclareGlobalFunction("GenusOfGoodSemigroup"); 183DeclareAttribute( "Genus", IsGoodSemigroup); 184 185##################################################### 186## 187#F LengthOfAGoodSemigroup:=function(S) 188## Given a good semigroup S it returns its length 189##################################################### 190DeclareGlobalFunction("LengthOfGoodSemigroup"); 191DeclareAttribute( "Length", IsGoodSemigroup); 192 193##################################################### 194#F AperySetOfAGoodSemigroup:=function(S) 195## Given a good semigroup S it returns a list with the elements of the Apery Set 196##################################################### 197DeclareGlobalFunction("AperySetOfGoodSemigroup"); 198 199##################################################### 200#F LevelsOfTheAperySet:=function(S) 201## Given a good semigroup S it prints the number of levels and it returns a list 202# where the elements are the list of the level Apery Set 203##################################################### 204DeclareGlobalFunction("StratifiedAperySetOfGoodSemigroup"); 205 206##################################################### 207#F AbsoluteIrreduciblesOfGoodSemigroup:=function(S) 208## Given a good semigroup S, the function returns the irreducible absolutes of S. 209# These are the elements that generates S as semiring. 210##################################################### 211DeclareGlobalFunction("AbsoluteIrreduciblesOfGoodSemigroup"); 212 213##################################################### 214#F TracksOfGoodSemigroup:=function(S) 215## Given a good semigroup S, the function returns the tracks of S. 216##################################################### 217DeclareGlobalFunction("TracksOfGoodSemigroup"); 218 219############################################################### 220## 221#P IsLocal(S) 222## Determines if S is local 223############################################################### 224 225DeclareProperty("IsLocal",IsGoodSemigroup); 226 227 228############################################################### 229## 230#A Multiplicity(S) 231## Determines the multiplicity of S 232############################################################### 233DeclareAttribute("Multiplicity",IsGoodSemigroup); 234 235# ## FUNCTIONS ## 236 237# #################################################### 238# ## 239# #F NumericalDublication(S,E,b) 240# ## returns 2S\cup(2E+b) 241# #################################################### 242# DeclareGlobalFunction("NumericalDuplication"); 243 244# ################################################### 245# ## 246# #F SemigroupDuplication(S,E) 247# ## returns S\bowtie E 248# ################################################### 249# DeclareGlobalFunction("SemigroupDuplication"); 250 251# ################################################### 252# ## 253# #F Amalgamation(S,E,c) 254# ## returns S\bowtie^f E, f multiplication by c 255# ################################################### 256# DeclareGlobalFunction("Amalgamation"); 257 258# ################################################### 259# ## 260# #F CartesianProduct(S1,S2) 261# ## Computes the cartesian product of S1 and S2, which 262# ## is a good semigroup 263# ################################################### 264# DeclareGlobalFunction("CartesianProduct"); 265 266# ################################################### 267# ## 268# #F RepresentsSmallElementsOfGoodSemigroup(X) 269# ## detects if X is a good semiring 270# ################################################### 271# DeclareGlobalFunction("RepresentsSmallElementsOfGoodSemigroup"); 272 273 274 275 276 277 278 279 280 281# ############# 282 283# DeclareAttribute( "DefinedByDuplication", IsGoodSemigroup); 284# DeclareAttribute( "DefinedByAmalgamation", IsGoodSemigroup); 285# DeclareAttribute( "DefinedByCartesianProduct", IsGoodSemigroup); 286# DeclareAttribute( "NumericalSemigroupGS", IsGoodSemigroup); 287# DeclareAttribute( "NumericalSemigroupListGS", IsGoodSemigroup); 288# DeclareAttribute( "IdealGS", IsGoodSemigroup); 289# DeclareAttribute( "MorphismGS", IsGoodSemigroup); 290# DeclareAttribute( "GeneratorsGS", IsGoodSemigroup); 291# DeclareAttribute( "Conductor", IsGoodSemigroup); 292 293# DeclareSynonymAttr( "IsGoodSemigroupByAmalgamation", HasDefinedByAmalgamation); 294# DeclareSynonymAttr( "IsGoodSemigroupByDuplication", HasDefinedByDuplication); 295# DeclareSynonymAttr( "IsGoodSemigroupByCartesianProduct", HasDefinedByCartesianProduct); 296 297# DeclareOperation("BelongsToGoodSemigroup",[IsHomogeneousList,IsGoodSemigroup]); 298 299 300# #################################################### 301# ## 302# #F NumericalDublication(S,E,b) 303# ## returns 2S\cup(2E+b) 304# #################################################### 305# DeclareGlobalFunction("NumericalDuplication"); 306 307# ################################################### 308# ## 309# #F SemigroupDuplication(S,E) 310# ## returns S\bowtie E 311# ################################################### 312# DeclareGlobalFunction("SemigroupDuplication"); 313 314# ################################################### 315# ## 316# #F Amalgamation(S,E,c) 317# ## returns S\bowtie^f E, f multiplication by c 318# ################################################### 319# DeclareGlobalFunction("Amalgamation"); 320 321# ################################################### 322# ## 323# #F CartesianProduct(S1,S2) 324# ## Computes the cartesian product of S1 and S2, which 325# ## is a good semigroup 326# ################################################### 327# DeclareGlobalFunction("CartesianProduct"); 328 329# ################################################### 330# ## 331# #F RepresentsSmallElementsOfGoodSemigroup(X) 332# ## detects if X is a good semiring 333# ################################################### 334# DeclareGlobalFunction("RepresentsSmallElementsOfGoodSemigroup"); 335 336# ################################################### 337# ## 338# #F GoodSemigroup(X) 339# ## define the good semigroup from the set of points G 340# ################################################### 341# DeclareGlobalFunction("GoodSemigroup"); 342 343# ################################################### 344# ## 345# #A SmallElements(M) 346# #A SmallElementsOfGoodSemigroup(M) 347# ## returns de small elements of M, that is, 348# ## the elements below the conductor 349# ################################################## 350# DeclareAttribute( "SmallElements", IsGoodSemigroup); 351# DeclareSynonymAttr("SmallElementsOfGoodSemigroup",SmallElements); 352 353 354 355 356 357 358 359 360 361# ############# 362 363# DeclareAttribute( "DefinedByDuplication", IsGoodSemigroup); 364# DeclareAttribute( "DefinedByAmalgamation", IsGoodSemigroup); 365# DeclareAttribute( "DefinedByCartesianProduct", IsGoodSemigroup); 366# DeclareAttribute( "NumericalSemigroupGS", IsGoodSemigroup); 367# DeclareAttribute( "NumericalSemigroupListGS", IsGoodSemigroup); 368# DeclareAttribute( "IdealGS", IsGoodSemigroup); 369# DeclareAttribute( "MorphismGS", IsGoodSemigroup); 370# DeclareAttribute( "GeneratorsGS", IsGoodSemigroup); 371# DeclareAttribute( "Conductor", IsGoodSemigroup); 372 373# DeclareSynonymAttr( "IsGoodSemigroupByAmalgamation", HasDefinedByAmalgamation); 374# DeclareSynonymAttr( "IsGoodSemigroupByDuplication", HasDefinedByDuplication); 375# DeclareSynonymAttr( "IsGoodSemigroupByCartesianProduct", HasDefinedByCartesianProduct); 376 377# DeclareOperation("BelongsToGoodSemigroup",[IsHomogeneousList,IsGoodSemigroup]); 378 379 380# #################################################### 381# ## 382# #F NumericalDublication(S,E,b) 383# ## returns 2S\cup(2E+b) 384# #################################################### 385# DeclareGlobalFunction("NumericalDuplication"); 386 387# ################################################### 388# ## 389# #F SemigroupDuplication(S,E) 390# ## returns S\bowtie E 391# ################################################### 392# DeclareGlobalFunction("SemigroupDuplication"); 393 394# ################################################### 395# ## 396# #F Amalgamation(S,E,c) 397# ## returns S\bowtie^f E, f multiplication by c 398# ################################################### 399# DeclareGlobalFunction("Amalgamation"); 400 401# ################################################### 402# ## 403# #F CartesianProduct(S1,S2) 404# ## Computes the cartesian product of S1 and S2, which 405# ## is a good semigroup 406# ################################################### 407# DeclareGlobalFunction("CartesianProduct"); 408 409# ################################################### 410# ## 411# #F RepresentsSmallElementsOfGoodSemigroup(X) 412# ## detects if X is a good semiring 413# ################################################### 414# DeclareGlobalFunction("RepresentsSmallElementsOfGoodSemigroup"); 415 416# ################################################### 417# ## 418# #F GoodSemigroup(X) 419# ## define the good semigroup from the set of points G 420# ################################################### 421# DeclareGlobalFunction("GoodSemigroup"); 422 423# ################################################### 424# ## 425# #A SmallElements(M) 426# #A SmallElementsOfGoodSemigroup(M) 427# ## returns de small elements of M, that is, 428# ## the elements below the conductor 429# ################################################## 430# DeclareAttribute( "SmallElements", IsGoodSemigroup); 431# DeclareSynonymAttr("SmallElementsOfGoodSemigroup",SmallElements); 432 433 434# ############################################################### 435# ## 436# #F IsSymmetricGoodSemigroup(M) 437# ## Determines if M is symmetric 438# ############################################################### 439# DeclareGlobalFunction("IsSymmetricGoodSemigroup"); 440 441# ################################################### 442# ## 443# #F MinimalGoodGeneratingSystemOfGoodSemigroup(M) 444# ## returns the unique minimal good generating of the 445# ## good semigroup M 446# ################################################### 447# DeclareGlobalFunction("MinimalGoodGeneratingSystemOfGoodSemigroup"); 448 449