This short chapter is included for the benefit of anyone wishing to implement some other variety of many-object structures, for example ringoids, which are rings with many objects; Lie groupoids, which are Lie groups with many objects; and so on.
Structures with many objects, and their elements, are defined in a manner similar to the single object case. For elements we have:
DeclareCategory( "IsMultiplicativeElementWithObjects", IsMultiplicativeElement );
DeclareCategory( "IsMultiplicativeElementWithObjectsAndOnes", IsMultiplicativeElementWithObjects );
DeclareCategory( "IsMultiplicativeElementWithObjectsAndInverses", IsMultiplicativeElementWithObjectsAndOnes );
DeclareCategory( "IsGroupoidElement",
IsMultiplicativeElementWithObjectsAndInverses );
as well as various category collections. For the various structures we have:
DeclareCategory( "IsDomainWithObjects", IsDomain );
DeclareCategory( "IsMagmaWithObjects", IsDomainWithObjects and IsMultiplicativeElementWithObjectsCollection );
DeclareCategory( "IsSemigroupWithObjects", IsMagmaWithObjects and IsAssociative );
DeclareCategory( "IsMonoidWithObjects", IsSemigroupWithObjects and IsMultiplicativeElementWithObjectsAndOnesCollection );
DeclareCategory( "IsGroupoid", IsMonoidWithObjects and IsGroupoidElementCollection );
Among the groupoids constructed earlier are the single piece Gd8 and the five component union U5:
gap> CategoriesOfObject( Gd8 ); [ "IsListOrCollection", "IsCollection", "IsExtLElement", "CategoryCollections(IsExtLElement)", "IsExtRElement", "CategoryCollections(IsExtRElement)", "CategoryCollections(IsMultiplicativeElement)", "IsGeneralizedDomain", "IsDomainWithObjects", "CategoryCollections(IsMultiplicativeElementWithObjects)", "CategoryCollections(IsMultiplicativeElementWithObjectsAndOnes)", "CategoryCollections(IsMultiplicativeElementWithObjectsAndInverses)", "CategoryCollections(IsGroupoidElement)", "IsMagmaWithObjects", "IsSemigroupWithObjects", "IsMonoidWithObjects", "IsGroupoid" ] gap> FamilyObj( Gd8 ); <Family: "CollectionsFamily(...)"> gap> Display(last); name: CollectionsFamily(...) required filters: IsCollection implied filters: IsListOrCollection IsCollection IsExtLElement CategoryCollections(IsExtLElement) IsExtRElement CategoryCollections(IsExtRElement) CategoryCollections(IsMultiplicativeElement) IsOddAdditiveNestingDepthObject CategoryCollections(IsMultiplicativeElementWithObjects) CategoryCollections(IsMultiplicativeElementWithObjectsAndOnes) CategoryCollections(IsMultiplicativeElementWithObjectsAndInverses) CategoryCollections(IsGroupoidElement) gap> KnownAttributesOfObject( Gd8 ); [ "Name", "ObjectList", "GeneratorsOfMagmaWithObjects", "GeneratorsOfGroupoid" ] gap> KnownTruePropertiesOfObject( Gd8 ); [ "IsDuplicateFree", "IsAssociative", "IsSinglePieceDomain", "IsDirectProductWithCompleteDigraphDomain" ] gap> RepresentationsOfObject( Gd8 ); [ "IsComponentObjectRep", "IsAttributeStoringRep", "IsMWOSinglePieceRep" ] gap> RepresentationsOfObject( U5 ); [ "IsComponentObjectRep", "IsAttributeStoringRep", "IsPiecesRep" ]
Similarly, for arrows, we have:
gap> e1; [(5,6,7,8) : -9 -> -8] gap> CategoriesOfObject( e1 ); [ "IsExtLElement", "IsExtRElement", "IsMultiplicativeElement", "IsMultiplicativeElementWithObjects", "IsMultiplicativeElementWithObjectsAndOnes", "IsMultiplicativeElementWithObjectsAndInverses", "IsGroupoidElement" ] gap> FamilyObj( e1 ); <Family: "IsGroupoidElementFamily">
Homomorphisms of structures with many objects have a similar heirarchy. A few examples:
DeclareCategory( "IsGeneralMappingWithObjects", IsGeneralMapping );
DeclareSynonymAttr( "IsMagmaWithObjectsGeneralMapping", IsGeneralMappingWithObjects and RespectsMultiplication );
DeclareSynonymAttr( "IsMagmaWithObjectsHomomorphism", IsMagmaWithObjectsGeneralMapping and IsSPGeneralMappingWithObjects );
DeclareCategory("IsGroupoidHomomorphism",IsMagmaWithObjectsHomomorphism);
Two forms of representation are used: for mappings to a single piece; and for unions of such mappings:
DeclareRepresentation( "IsMappingToSinglePieceRep", IsMagmaWithObjectsHomomorphism and IsAttributeStoringRep and IsComponentObjectRep and IsGeneralMapping, [ "Source", "Range", "MappingToSinglePieceData" ] );
DeclareRepresentation( "IsMappingWithPiecesRep", IsMagmaWithObjectsHomomorphism and IsAttributeStoringRep and IsComponentObjectRep and IsGeneralMapping, [ "Source", "Range", "PiecesOfMapping" ] );
In previous chapters, hom9 was a homomorphism from Gd8 to Kk4; and aut1 was an automorphism of Ha4.
gap> hom9; groupoid homomorphism : Gd8 -> Kk4 [ [ [(5,6,7,8) : -9 -> -9], [(5,7) : -9 -> -9], [() : -9 -> -8], [() : -9 -> -7] ], [ [(1,4)(2,3) : -14 -> -14], [() : -14 -> -14], [(1,3,4) : -14 -> -13], [(1,4)(2,3) : -14 -> -12] ] ] gap> CategoriesOfObject( hom9 ); [ "IsExtLElement", "IsExtRElement", "IsMultiplicativeElement", "IsMultiplicativeElementWithOne", "IsMultiplicativeElementWithInverse", "IsAssociativeElement", "IsGeneralMapping", "IsSPGeneralMapping", "IsGeneralMappingWithObjects", "IsSPGeneralMappingWithObjects", "IsGroupoidHomomorphism" ] gap> FamilyObj( hom9 ); <Family: "GroupoidHomomorphismFamily"> gap> Display( last ); name: GroupoidHomomorphismFamily required filters: IsGroupoidHomomorphism implied filters: CanEasilyCompareElements HasCanEasilyCompareElements CanEasilySortElements HasCanEasilySortElements IsExtLElement IsExtRElement IsMultiplicativeElement IsMultiplicativeElementWithOne IsMultiplicativeElementWithInverse IsAssociativeElement IsGeneralMapping IsSPGeneralMapping RespectsMultiplication HasRespectsMultiplication IsGeneralMappingWithObjects IsSPGeneralMappingWithObjects IsGroupoidHomomorphism gap> FamilyObj( hom9 ) = FamilyObj( aut1 ); true gap> KnownTruePropertiesOfObject( hom9 ); [ "CanEasilyCompareElements", "CanEasilySortElements", "RespectsMultiplication", "IsGroupWithObjectsHomomorphism", "IsGeneralMappingToSinglePiece", "IsGeneralMappingFromSinglePiece", "IsInjectiveOnObjects", "IsSurjectiveOnObjects" ] gap> KnownTruePropertiesOfObject( aut1 ); [ "CanEasilyCompareElements", "CanEasilySortElements", "IsEndoGeneralMapping", "RespectsMultiplication", "IsGroupWithObjectsHomomorphism", "IsGeneralMappingToSinglePiece", "IsGeneralMappingFromSinglePiece", "IsInjectiveOnObjects", "IsSurjectiveOnObjects", "IsEndomorphismWithObjects", "IsAutomorphismWithObjects", "IsGroupoidAutomorphismByObjectPerm" ] gap> KnownAttributesOfObject( hom9 ); [ "Range", "Source", "MappingGeneratorsImages", "MappingToSinglePieceData", "ImagesOfObjects", "ImageElementsOfRays", "RootGroupHomomorphism" ] gap> KnownAttributesOfObject( aut1 ); [ "Order", "Range", "Source", "MappingGeneratorsImages", "AutomorphismDomain", "MappingToSinglePieceData", "ImagesOfObjects", "ImageElementsOfRays", "RootGroupHomomorphism" ]
generated by GAPDoc2HTML