##############################################################################
##
#W  gpdhom.gd                GAP4 package `Gpd'                  Chris Wensley
#W                                                                & Emma Moore
##
#H  @(#)Id: "gpd/gap/gpdhom.gd", v.1.05 2008/11/18 
##
##  Declaration file for functions in the Gpd package.
##
Revision.("gpd/gap/gpdhom_gd") :=
             "@(#)$Id: gpdhom.gd,v 1.05 2008/11/18 gap Exp $";

############################################################################# 
##  
##  GroupoidHomomorphism( <args> )
## 
DeclareGlobalFunction( "GroupoidHomomorphism" ); 

############################################################################# 
## 
#A  IsomorphismPermGroupoid( <gpd> )
#A  IsomorphismSmallPermGroupoid( <gpd> )
## 
DeclareAttribute( "IsomorphismPermGroupoid", IsGroupoid );
DeclareAttribute( "IsomorphismSmallPermGroupoid", IsGroupoid );

############################################################################# 
## 
#P  IsGroupoidEndomorphism( <mor> )                        
#P  IsGroupoidAutomorphism( <mor> )                        
##
DeclareSynonym( "IsGroupoidEndomorphism", 
    IsGroupoidHomomorphism and IsEndomorphismWithObjects );  
DeclareSynonym( "IsGroupoidAutomorphism", 
    IsGroupoidHomomorphism and IsAutomorphismWithObjects );  
  
############################################################################# 
## 
#O  InclusionMappingGroupoids( <G>, <H> )
#O  RestrictionMappingGroupoids( <hom>, <src>, <rng> )
## #O  HomomorphismToIdentityGroupoid( <G>, <H> )
## 
DeclareOperation( "InclusionMappingGroupoids", [ IsGroupoid, IsGroupoid ] );
DeclareOperation( "RestrictionMappingGroupoids", 
    [ IsGroupoidHomomorphism, IsGroupoid, IsGroupoid ] );

############################################################################# 
## 
#O  GroupoidHomomorphismFromDiscreteToSinglePiece( <src>, <rng>, <mors> )
##  
DeclareOperation( "GroupoidHomomorphismFromDiscreteToSinglePiece", 
    [ IsGroupoid and IsDiscrete, IsGroupoid and IsSinglePiece, 
      IsHomogeneousList ] );


####################### functions from the 08.05 paper ####################### 

############################################################################## 
## 
#R  IsDefaultGroupoidHomomorphismRep( <map> ) 
## 
##  A mapping of connected groupoids is determined by:
##   - mapping from the root group in the source to that in the range,
##   - images for the objects, 
##   - images for the rays.
## 
DeclareRepresentation( "IsDefaultGroupoidHomomorphismRep",
    IsGroupoidHomomorphism and IsAttributeStoringRep, 
    [ "Source", "Range", "PieceImages" ] ); 

############################################################################# 
##  
#O  MappingPermObjectsImages( <obs>, <ims> ) 
## 
DeclareOperation( "MappingPermObjectsImages", [ IsList, IsList ] ); 
DeclareAttribute( "ObjectPermOfGroupoidHomomorphism", IsDefaultGroupoidHomomorphismRep );

############################################################################# 
## 
#A  RootHomomorphism( <map> ) 
#O  GroupoidHomomorphismFromSinglePieceNC( <src>, <rng>, <hom>, <oims>, <rims> )  
#O  GroupoidHomomorphismFromSinglePiece( <src>, <rng>, <hom>, <oims>, <rims> )  
#O  GroupoidHomomorphismByGroupHomNC( <src, rng, hom> )
#O  GroupoidHomomorphismByGroupHom( <src, rng, hom> )
#O  GroupoidHomomorphismByObjectImagesNC( <src, rng, ims> )
#O  GroupoidHomomorphismByObjectImages( <src, rng, ims> )
#O  GroupoidHomomorphismByRayProdsNC( <src, rng, rays> ) 
#O  GroupoidHomomorphismByRayProds( <src, rng, rays> ) 
## 
DeclareAttribute( "RootHomomorphism", 
    IsGroupoidHomomorphism and IsHomomorphismToSinglePiece );  
DeclareOperation( "GroupoidHomomorphismFromSinglePieceNC", 
    [ IsGroupoid, IsGroupoid, IsGroupHomomorphism, 
      IsHomogeneousList, IsHomogeneousList ] );
DeclareOperation( "GroupoidHomomorphismFromSinglePiece", 
    [ IsGroupoid, IsGroupoid, IsGroupHomomorphism, 
      IsHomogeneousList, IsHomogeneousList ] );
DeclareOperation( "GroupoidHomomorphismByGroupHomNC", 
    [ IsGroupoid, IsGroupoid, IsGroupHomomorphism ] );
DeclareOperation( "GroupoidHomomorphismByGroupHom", 
    [ IsGroupoid, IsGroupoid, IsGroupHomomorphism ] );
DeclareOperation( "GroupoidHomomorphismByObjectImagesNC", 
    [ IsGroupoid, IsGroupoid, IsHomogeneousList ] );
DeclareOperation( "GroupoidHomomorphismByObjectImages", 
    [ IsGroupoid, IsGroupoid, IsHomogeneousList ] );
DeclareOperation( "GroupoidHomomorphismByRayProdsNC", 
    [ IsGroupoid, IsGroupoid, IsHomogeneousList ] );
DeclareOperation( "GroupoidHomomorphismByRayProds", 
    [ IsGroupoid, IsGroupoid, IsHomogeneousList ] );



############################################################################## 
## 
#E  gpdhom.gd  . . . . . . . . . . . . . . . . . . . . . . . . . . . ends here 
## 
