##############################################################################
##
#W  map2.gd                        XMOD Package                  Chris Wensley
#W                                                                 & Murat Alp
##
##  Declaration file for functions of the XMOD package.
##
#H  @(#)$Id: map2.gd,v 2.004 2004/04/14 gap Exp $
##
#Y  Copyright (C) 1999,2001 University of St. Andrews, North Haugh,
#Y                          St. Andrews, Fife KY16 9SS, Scotland
##
Revision.("xmod/gap/map2_gd") := 
   "@(#)$Id: map2.gd,v 2.004 2004/04/14 gap Exp $";

#############################################################################
##
#P  IsGeneral2dMapping( <map> )
#P  Is2dMapping( <mor> )
#P  IsPreXModMorphism( <mor> )
#P  IsXModMorphism( <mor> )
##
##  A pre-crossed module or pre-cat1-group morphism is a pair of group homs
##
DeclareProperty( "IsGeneral2dMapping", IsGeneralMapping );
DeclareProperty( "Is2dMapping",
    IsGeneral2dMapping and RespectsMultiplication and RespectsOne );
DeclareProperty( "IsPreXModMorphism", Is2dMapping );
DeclareProperty( "IsXModMorphism", IsPreXModMorphism );

#############################################################################
##
#R  Is2dMappingRep( <mor> )
#A  SourceHom( <mor> )
#A  RangeHom( <mor> )
#O  Make2dMapping( <src>, <rng>, <srchom>, <rnghom> )
##
##  A pre-crossed module or pre-cat1-group morphism is a pair of group homs
##
DeclareRepresentation( "Is2dMappingRep", 
    Is2dMapping and IsAttributeStoringRep,
    [ "Source", "Range", "SourceHom", "RangeHom" ] );
DeclareAttribute( "SourceHom", Is2dMapping );
DeclareAttribute( "RangeHom", Is2dMapping );
DeclareOperation( "Make2dMapping",
    [ Is2dObject, Is2dObject, IsGroupHomomorphism, IsGroupHomomorphism ] );

#############################################################################
##
#A  Kernel2dMapping( <mor> )
##
DeclareAttribute( "Kernel2dMapping", Is2dMapping );

#############################################################################
##
#F  PreXModMorphism( <args> )
#O  PreXModMorphismByHoms( <src>, <rng>, <srchom>, <rnghom> )
#F  PreCat1Morphism( <args> )
#O  PreCat1MorphismByHoms( <src>, <rng>, <srchom>, <rnghom> )
##
##
DeclareGlobalFunction( "PreXModMorphism" );
DeclareOperation( "PreXModMorphismByHoms",
    [ IsPreXMod, IsPreXMod, IsGroupHomomorphism, IsGroupHomomorphism ] );
DeclareGlobalFunction( "PreCat1Morphism" );
DeclareOperation( "PreCat1MorphismByHoms",
    [ IsPreCat1, IsPreCat1, IsGroupHomomorphism, IsGroupHomomorphism ] );

#############################################################################
##
#F  XModMorphism( <args> )
#O  XModMorphismByHoms( <src>, <rng>, <srchom>, <rnghom> )
#F  Cat1Morphism( <args> )
#O  Cat1MorphismByHoms( <src>, <rng>, <srchom>, <rnghom> )
#O  InclusionMorphism2dObjects( <obj>, <sub> )
##
DeclareGlobalFunction( "XModMorphism" );
DeclareOperation( "XModMorphismByHoms",
    [ IsXMod, IsXMod, IsGroupHomomorphism, IsGroupHomomorphism ] );
DeclareGlobalFunction( "Cat1Morphism" );
DeclareOperation( "Cat1MorphismByHoms",
    [ IsCat1, IsCat1, IsGroupHomomorphism, IsGroupHomomorphism ] );
DeclareOperation( "InclusionMorphism2dObjects", [ Is2dObject, Is2dObject ] );

#############################################################################
##
#O  InnerAutomorphismXMod( <XM>, <r> )
#O  InnerAutomorphismCat1( <C1G>, <r> )
##
DeclareOperation( "InnerAutomorphismXMod",
    [ IsPreXMod, IsMultiplicativeElementWithInverse ] );
DeclareOperation( "InnerAutomorphismCat1",
    [ IsPreCat1, IsMultiplicativeElementWithInverse ] );

#############################################################################
##
#P  IsEndomorphism2dObject( <mor> )
#P  IsAutomorphism2dObject( <mor> )
##
DeclareProperty( "IsEndomorphism2dObject", Is2dMapping );
DeclareProperty( "IsAutomorphism2dObject", Is2dMapping );

#############################################################################
##
#P  IsPermPreXModMorphism( <mor> )
##
DeclareProperty( "IsPermPreXModMorphism", IsPreXModMorphism );

#############################################################################
##
#P  IsPreCat1Morphism( <mor> )
#P  IsCat1Morphism( <mor> )
#P  IsPermPreCat1Morphism( <mor> )
##
DeclareProperty( "IsPreCat1Morphism", Is2dMapping );
DeclareProperty( "IsCat1Morphism", IsPreCat1Morphism );
DeclareProperty( "IsPermPreCat1Morphism", IsPreCat1Morphism );

#############################################################################
##
#A  ReverseIsomorphism( <PCG> )
#O  CompositionMorphism( <mor2>, <mor1> )
##
DeclareAttribute( "ReverseIsomorphism", IsPreCat1 );
DeclareOperation( "CompositionMorphism", [ Is2dMapping, Is2dMapping ] );

#############################################################################
##
#P  IsSourceMorphism( <mor> )
#O  PreXModBySourceHom( <mor> )
##
DeclareProperty( "IsSourceMorphism", IsXModMorphism );
DeclareOperation( "PreXModBySourceHom", [ IsPreXModMorphism ] );

#############################################################################
##
#A  XModMorphismOfCat1Morphism( <mor> )
#O  XModMorphismByCat1Morphism( <mor> )
#A  Cat1MorphismOfXModMorphism( <mor> )
#O  Cat1MorphismByXModMorphism( <mor> )
##
DeclareAttribute( "XModMorphismOfCat1Morphism", IsCat1Morphism );
DeclareOperation( "XModMorphismByCat1Morphism", [ IsCat1Morphism ] );
DeclareAttribute( "Cat1MorphismOfXModMorphism", IsXModMorphism );
DeclareOperation( "Cat1MorphismByXModMorphism", [ IsXModMorphism ] );

#############################################################################
##
#A  IsomorphismPermPreXMod( <pre-xmod> )
#A  IsomorphismFpPreXMod( <pre-xmod> )
#A  IsomorphismPcPreXMod( <pre-xmod> )
##
DeclareAttribute( "IsomorphismPermPreXMod", IsPreXMod );
DeclareAttribute( "IsomorphismFpPreXMod", IsPreXMod );
DeclareAttribute( "IsomorphismPcPreXMod", IsPreXMod );

#############################################################################
##
#A  IsomorphismPermPreCat1( <pre-cat1> )
#A  IsomorphismFpPreCat1( <pre-cat1> )
#A  IsomorphismPcPreCat1( <pre-cat1> )
##
DeclareAttribute( "IsomorphismPermPreCat1", IsPreCat1 );
DeclareAttribute( "IsomorphismFpPreCat1", IsPreCat1 );
DeclareAttribute( "IsomorphismPcPreCat1", IsPreCat1 );

#############################################################################
##
#A  IsomorphismXModByNormalSubgroup( <xmod> )
##
DeclareAttribute( "IsomorphismXModByNormalSubgroup", IsXMod );

#############################################################################
##
#O  PreXModIsomorphismByIsomorphisms( <pre-xmod>, <sigma>, <rho> )
#F  SmallerDegreePerm2dObject( <args> )
#A  SmallerDegreePermPreXMod( <XM> )
##
DeclareOperation( "PreXModIsomorphismByIsomorphisms", 
    [ IsPreXMod, IsBijective, IsBijective ] );
DeclareGlobalFunction( "SmallerDegreePerm2dObject" );
DeclareAttribute( "SmallerDegreePermPreXMod", IsPreXMod );

#############################################################################
##
#E  map2.gd . . . . . . . . . . . . . . . . . . . . . . . . . . . .  ends here
