CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutSign UpSign In

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

Views: 418346
#############################################################################
##
#W  good-semigroups.gd           Manuel Delgado <[email protected]>
#W                          Pedro A. Garcia-Sanchez <[email protected]>
##
#Y  Copyright 2016-- Centro de Matemática da Universidade do Porto, Portugal and IEMath-GR, Universidad de Granada, Spain
#############################################################################

#############################################################################
##
#R  IsGoodSemigroupRep
##
##  The representation of a good  semigroup.
##
#############################################################################
DeclareRepresentation( "IsGoodSemigroupRep", IsAttributeStoringRep, [] );

#############################################################################
##
#C  IsGoodSemigroup
##
##  The category of affine semigroups.
##
#############################################################################
DeclareCategory( "IsGoodSemigroup", IsAdditiveMagma and IsGoodSemigroupRep) ;

# Elements of affine semigroups are collections of integers, so affine
# semigroups are collections of collections of integers.
BindGlobal( "GoodSemigroupsType",
        NewType( CollectionsFamily(CollectionsFamily(CyclotomicsFamily)),
                IsGoodSemigroup));

###################################################
##
#F GoodSemigroup(X)
## define the good semigroup from the set of points G
###################################################
DeclareGlobalFunction("GoodSemigroup");

## ATTRIBUTES ##
##
DeclareAttribute( "DefinedByDuplication", IsGoodSemigroup);
DeclareSynonymAttr( "IsGoodSemigroupByDuplication", HasDefinedByDuplication);
##
DeclareAttribute( "DefinedByAmalgamation", IsGoodSemigroup);
DeclareSynonymAttr( "IsGoodSemigroupByAmalgamation", HasDefinedByAmalgamation);
##
DeclareAttribute( "DefinedByCartesianProduct", IsGoodSemigroup);
DeclareSynonymAttr( "IsGoodSemigroupByCartesianProduct", HasDefinedByCartesianProduct);
##
DeclareAttribute( "Generators", IsGoodSemigroup);
##
###################################################
##
#A MinimalGenerators(M)
#A MinimalGoodGeneratingSystemOfGoodSemigroup(M)
## returns the unique minimal good generating of the
## good semigroup M
###################################################
DeclareAttribute( "MinimalGenerators", IsGoodSemigroup);
DeclareSynonymAttr("MinimalGoodGeneratingSystemOfGoodSemigroup",MinimalGenerators);

##
DeclareAttribute( "Conductor", IsGoodSemigroup);
DeclareSynonymAttr("ConductorOfGoodSemigroup",Conductor);
###################################################
##
#A SmallElements(M)
#A SmallElementsOfGoodSemigroup(M)
## returns de small elements of M, that is,
## the elements below the conductor
##################################################
DeclareAttribute( "SmallElements", IsGoodSemigroup);
DeclareSynonymAttr("SmallElementsOfGoodSemigroup",SmallElements);

########???????????
DeclareAttribute( "NumericalSemigroupGS", IsGoodSemigroup);
DeclareAttribute( "NumericalSemigroupListGS", IsGoodSemigroup);
DeclareAttribute( "IdealGS", IsGoodSemigroup);
DeclareAttribute( "MorphismGS", IsGoodSemigroup);

## OPERATIONS ##
DeclareOperation("BelongsToGoodSemigroup",[IsHomogeneousList,IsGoodSemigroup]);

## FUNCTIONS ##

 ####################################################
 ##
 #F NumericalDublication(S,E,b)
 ## returns 2S\cup(2E+b)
 ####################################################
DeclareGlobalFunction("NumericalDuplication");

###################################################
##
#F NumericalSemigroupDuplication(S,E)
## returns S\bowtie E
###################################################
DeclareGlobalFunction("NumericalSemigroupDuplication");

###################################################
##
#F AmalgamationOfNumericalSemigroups(S,E,c)
## returns S\bowtie^f E, f multiplication by c
###################################################
DeclareGlobalFunction("AmalgamationOfNumericalSemigroups");

###################################################
##
#F CartesianProductOfNumericalSemigroups(S1,S2)
## Computes the cartesian product of S1 and S2, which
## is a good semigroup
###################################################
DeclareGlobalFunction("CartesianProductOfNumericalSemigroups");

###################################################
##
#F RepresentsSmallElementsOfGoodSemigroup(X)
## detects if X is a good semiring
###################################################
DeclareGlobalFunction("RepresentsSmallElementsOfGoodSemigroup");

###############################################################
##
#F IsSymmetricGoodSemigroup(M)
## Determines if M is symmetric
###############################################################
#DeclareGlobalFunction("IsSymmetricGoodSemigroup");
DeclareProperty("IsSymmetricGoodSemigroup",IsGoodSemigroup);
DeclareAttribute("IsSymmetric",IsGoodSemigroup);

###############################################################
##
#F GoodSemigroupBySmallElements(M)
## Constructs good semigroup from a set of small elements
###############################################################
DeclareGlobalFunction("GoodSemigroupBySmallElements");


###############################################################
##
#F ArfGoodSemigroupClosure(M)
## Constructs Arf good semigroup closure of M
###############################################################
DeclareGlobalFunction("ArfGoodSemigroupClosure");
DeclareOperation("ArfClosure", [IsGoodSemigroup]);

###############################################################
##
#F MaximalElementsOfGoodSemigroup(M)
## returns the set of maximal elements of M
###############################################################
DeclareGlobalFunction("MaximalElementsOfGoodSemigroup");

###############################################################
##
#F IrreducibleMaximalElementsOfGoodSemigroup(M)
## returns the set of irreducible maximal elements of M
###############################################################
DeclareGlobalFunction("IrreducibleMaximalElementsOfGoodSemigroup");

###############################################################
##
#F GoodSemigroupByMaximalElements(S1,S2,mx)
## returns the good semigroup determined by removing from
## S1 x S2 the set of points "above" a maximal element
###############################################################
DeclareGlobalFunction("GoodSemigroupByMaximalElements");


# ## FUNCTIONS ##

#  ####################################################
#  ##
#  #F NumericalDublication(S,E,b)
#  ## returns 2S\cup(2E+b)
#  ####################################################
# DeclareGlobalFunction("NumericalDuplication");

# ###################################################
# ##
# #F SemigroupDuplication(S,E)
# ## returns S\bowtie E
# ###################################################
# DeclareGlobalFunction("SemigroupDuplication");

# ###################################################
# ##
# #F Amalgamation(S,E,c)
# ## returns S\bowtie^f E, f multiplication by c
# ###################################################
# DeclareGlobalFunction("Amalgamation");

# ###################################################
# ##
# #F CartesianProduct(S1,S2)
# ## Computes the cartesian product of S1 and S2, which
# ## is a good semigroup
# ###################################################
# DeclareGlobalFunction("CartesianProduct");

# ###################################################
# ##
# #F RepresentsSmallElementsOfGoodSemigroup(X)
# ## detects if X is a good semiring
# ###################################################
# DeclareGlobalFunction("RepresentsSmallElementsOfGoodSemigroup");









# #############

# DeclareAttribute( "DefinedByDuplication", IsGoodSemigroup);
# DeclareAttribute( "DefinedByAmalgamation", IsGoodSemigroup);
# DeclareAttribute( "DefinedByCartesianProduct", IsGoodSemigroup);
# DeclareAttribute( "NumericalSemigroupGS", IsGoodSemigroup);
# DeclareAttribute( "NumericalSemigroupListGS", IsGoodSemigroup);
# DeclareAttribute( "IdealGS", IsGoodSemigroup);
# DeclareAttribute( "MorphismGS", IsGoodSemigroup);
# DeclareAttribute( "GeneratorsGS", IsGoodSemigroup);
# DeclareAttribute( "Conductor", IsGoodSemigroup);

# DeclareSynonymAttr( "IsGoodSemigroupByAmalgamation", HasDefinedByAmalgamation);
# DeclareSynonymAttr( "IsGoodSemigroupByDuplication", HasDefinedByDuplication);
# DeclareSynonymAttr( "IsGoodSemigroupByCartesianProduct", HasDefinedByCartesianProduct);

# DeclareOperation("BelongsToGoodSemigroup",[IsHomogeneousList,IsGoodSemigroup]);


#  ####################################################
#  ##
#  #F NumericalDublication(S,E,b)
#  ## returns 2S\cup(2E+b)
#  ####################################################
# DeclareGlobalFunction("NumericalDuplication");

# ###################################################
# ##
# #F SemigroupDuplication(S,E)
# ## returns S\bowtie E
# ###################################################
# DeclareGlobalFunction("SemigroupDuplication");

# ###################################################
# ##
# #F Amalgamation(S,E,c)
# ## returns S\bowtie^f E, f multiplication by c
# ###################################################
# DeclareGlobalFunction("Amalgamation");

# ###################################################
# ##
# #F CartesianProduct(S1,S2)
# ## Computes the cartesian product of S1 and S2, which
# ## is a good semigroup
# ###################################################
# DeclareGlobalFunction("CartesianProduct");

# ###################################################
# ##
# #F RepresentsSmallElementsOfGoodSemigroup(X)
# ## detects if X is a good semiring
# ###################################################
# DeclareGlobalFunction("RepresentsSmallElementsOfGoodSemigroup");

# ###################################################
# ##
# #F GoodSemigroup(X)
# ## define the good semigroup from the set of points G
# ###################################################
# DeclareGlobalFunction("GoodSemigroup");

# ###################################################
# ##
# #A SmallElements(M)
# #A SmallElementsOfGoodSemigroup(M)
# ## returns de small elements of M, that is,
# ## the elements below the conductor
# ##################################################
# DeclareAttribute( "SmallElements", IsGoodSemigroup);
# DeclareSynonymAttr("SmallElementsOfGoodSemigroup",SmallElements);









# #############

# DeclareAttribute( "DefinedByDuplication", IsGoodSemigroup);
# DeclareAttribute( "DefinedByAmalgamation", IsGoodSemigroup);
# DeclareAttribute( "DefinedByCartesianProduct", IsGoodSemigroup);
# DeclareAttribute( "NumericalSemigroupGS", IsGoodSemigroup);
# DeclareAttribute( "NumericalSemigroupListGS", IsGoodSemigroup);
# DeclareAttribute( "IdealGS", IsGoodSemigroup);
# DeclareAttribute( "MorphismGS", IsGoodSemigroup);
# DeclareAttribute( "GeneratorsGS", IsGoodSemigroup);
# DeclareAttribute( "Conductor", IsGoodSemigroup);

# DeclareSynonymAttr( "IsGoodSemigroupByAmalgamation", HasDefinedByAmalgamation);
# DeclareSynonymAttr( "IsGoodSemigroupByDuplication", HasDefinedByDuplication);
# DeclareSynonymAttr( "IsGoodSemigroupByCartesianProduct", HasDefinedByCartesianProduct);

# DeclareOperation("BelongsToGoodSemigroup",[IsHomogeneousList,IsGoodSemigroup]);


#  ####################################################
#  ##
#  #F NumericalDublication(S,E,b)
#  ## returns 2S\cup(2E+b)
#  ####################################################
# DeclareGlobalFunction("NumericalDuplication");

# ###################################################
# ##
# #F SemigroupDuplication(S,E)
# ## returns S\bowtie E
# ###################################################
# DeclareGlobalFunction("SemigroupDuplication");

# ###################################################
# ##
# #F Amalgamation(S,E,c)
# ## returns S\bowtie^f E, f multiplication by c
# ###################################################
# DeclareGlobalFunction("Amalgamation");

# ###################################################
# ##
# #F CartesianProduct(S1,S2)
# ## Computes the cartesian product of S1 and S2, which
# ## is a good semigroup
# ###################################################
# DeclareGlobalFunction("CartesianProduct");

# ###################################################
# ##
# #F RepresentsSmallElementsOfGoodSemigroup(X)
# ## detects if X is a good semiring
# ###################################################
# DeclareGlobalFunction("RepresentsSmallElementsOfGoodSemigroup");

# ###################################################
# ##
# #F GoodSemigroup(X)
# ## define the good semigroup from the set of points G
# ###################################################
# DeclareGlobalFunction("GoodSemigroup");

# ###################################################
# ##
# #A SmallElements(M)
# #A SmallElementsOfGoodSemigroup(M)
# ## returns de small elements of M, that is,
# ## the elements below the conductor
# ##################################################
# DeclareAttribute( "SmallElements", IsGoodSemigroup);
# DeclareSynonymAttr("SmallElementsOfGoodSemigroup",SmallElements);


# ###############################################################
# ##
# #F IsSymmetricGoodSemigroup(M)
# ## Determines if M is symmetric
# ###############################################################
# DeclareGlobalFunction("IsSymmetricGoodSemigroup");

# ###################################################
# ##
# #F MinimalGoodGeneratingSystemOfGoodSemigroup(M)
# ## returns the unique minimal good generating of the
# ## good semigroup M
# ###################################################
# DeclareGlobalFunction("MinimalGoodGeneratingSystemOfGoodSemigroup");