##############################################################################
##
#W  gp3map.gd                      XMOD Package                  Chris Wensley
##
##  Declaration file for functions of the XMOD package.
##
#H  @(#)$Id: gp3map.gd,v 2.009 2007/05/11 gap Exp $
##
#Y  Copyright (C) 1999,2001 University of St. Andrews, North Haugh,
#Y                          St. Andrews, Fife KY16 9SS, Scotland
##
Revision.("xmod/gap/gp3map_gd") := 
   "@(#)$Id: gp3map.gd,v 2.009 2007/05/11 gap Exp $";

#############################################################################
##
#C  IsGeneral3dMapping( <map> )
#P  Is3dMapping( <mor> )
#P  IsPreXSqMorphism( <mor> )
#P  IsXSqMorphism( <mor> )
##
##  A pre-crossed square or pre-cat2-group morphism contains 4 group homs
##
DeclareCategory( "IsGeneral3dMapping", IsGeneralMapping );
DeclareCategory( "IsSPGeneral3dMapping", 
    IsGeneral3dMapping and IsSPGeneralMapping );
DeclareCategory( "IsNonSPGeneral3dMapping", 
    IsGeneral3dMapping and IsNonSPGeneralMapping );
DeclareProperty( "Is3dMapping",
    IsGeneral3dMapping and RespectsMultiplication and RespectsOne );
DeclareProperty( "IsPreXSqMorphism", Is3dMapping );
DeclareProperty( "IsXSqMorphism", Is3dMapping );

#############################################################################
##
#R  Is3dMappingRep( <mor> )
#A  Up2dMorphism( <mor> )
#A  Left2dMorphism( <mor> )
#A  Down2dMorphism( <mor> )
#A  Right2dMorphism( <mor> )
#O  Make3dMapping( <src>, <rng>, <srchom>, <rnghom> )
##
##  A pre-crossed square or pre-cat2-group morphism contains 4 group homs
##
DeclareRepresentation( "Is3dMappingRep", 
    Is3dMapping and IsAttributeStoringRep,
    [ "Source", "Range", "Up2dMorphism", "Left2dMorphism", 
      "Right2dMorphism", "Down2dMorphism" ] );
DeclareAttribute( "Up2dMorphism", Is3dMapping );
DeclareAttribute( "Left2dMorphism", Is3dMapping );
DeclareAttribute( "Down2dMorphism", Is3dMapping );
DeclareAttribute( "Right2dMorphism", Is3dMapping );
DeclareOperation( "Make3dMapping",
    [ Is3dObject, Is3dObject, Is2dMapping, Is2dMapping, 
      Is2dMapping, Is2dMapping ] );

#############################################################################
##
#A  Kernel3dMapping( <mor> )
##
DeclareAttribute( "Kernel3dMapping", Is3dMapping );

#############################################################################
##
#F  PreXSqMorphism( <args> )
#O  PreXSqMorphismByMorphisms( <src>, <rng>, <up>, <lt>, <down>, <rt> )
#F  PreCat2Morphism( <args> )
#O  PreCat2MorphismByMorphisms( <src>, <rng>, <up>, <lt>, <down>, <rt> )
##
DeclareGlobalFunction( "PreXSqMorphism" );
DeclareOperation( "PreXSqMorphismByMorphisms",
    [ IsPreXSq, IsPreXSq, Is2dMapping, Is2dMapping, 
      Is2dMapping, Is2dMapping ] );
DeclareGlobalFunction( "PreCat2Morphism" );
DeclareOperation( "PreCat2MorphismByMorphisms",
    [ IsPreCat2, IsPreCat2, Is2dMapping, Is2dMapping, 
      Is2dMapping, Is2dMapping ] );

#############################################################################
##
#F  XSqMorphism( <args> )
#O  XSqMorphismByMorphisms( <src>, <rng>, <up>, <lt>, <down>, <rt> )
#F  Cat2Morphism( <args> )
#O  Cat2MorphismByMorphisms( <src>, <rng>, <up>, <lt>, <down>, <rt> )
#O  InclusionMorphism3dObjects( <obj>, <sub> )
##
DeclareGlobalFunction( "XSqMorphism" );
DeclareOperation( "XSqMorphismByMorphisms",
    [ IsXSq, IsXSq, Is2dMapping, Is2dMapping, 
      Is2dMapping, Is2dMapping ] );
DeclareGlobalFunction( "Cat2Morphism" );
DeclareOperation( "Cat2MorphismByMorphisms",
    [ IsCat2, IsCat2, Is2dMapping, Is2dMapping, 
      Is2dMapping, Is2dMapping ] );
DeclareOperation( "InclusionMorphism3dObjects", [ Is3dObject, Is3dObject ] );

#############################################################################
##
#O  InnerAutomorphismXSq( <XM>, <r> )
#O  InnerAutomorphismCat2( <C1G>, <r> )
##
DeclareOperation( "InnerAutomorphismXSq",
    [ IsPreXSq, IsMultiplicativeElementWithInverse ] );
DeclareOperation( "InnerAutomorphismCat2",
    [ IsPreCat2, IsMultiplicativeElementWithInverse ] );

#############################################################################
##
#P  IsEndomorphism3dObject( <mor> )
#P  IsAutomorphism3dObject( <mor> )
##
DeclareProperty( "IsEndomorphism3dObject", Is3dMapping );
DeclareProperty( "IsAutomorphism3dObject", Is3dMapping );

#############################################################################
##
#P  IsPermPreXSqMorphism( <mor> )
##
DeclareProperty( "IsPermPreXSqMorphism", IsPreXSqMorphism );

#############################################################################
##
#P  IsPreCat2Morphism( <mor> )
#P  IsCat2Morphism( <mor> )
#P  IsPermPreCat2Morphism( <mor> )
##
DeclareProperty( "IsPreCat2Morphism", Is3dMapping );
DeclareProperty( "IsCat2Morphism", Is3dMapping );
DeclareProperty( "IsPermPreCat2Morphism", IsPreCat2Morphism );

#############################################################################
##
#A  XSqMorphismOfCat2Morphism( <mor> )
#O  XSqMorphismByCat2Morphism( <mor> )
#A  Cat2MorphismOfXSqMorphism( <mor> )
#O  Cat2MorphismByXSqMorphism( <mor> )
##
DeclareAttribute( "XSqMorphismOfCat2Morphism", IsCat2Morphism );
DeclareOperation( "XSqMorphismByCat2Morphism", [ IsCat2Morphism ] );
DeclareAttribute( "Cat2MorphismOfXSqMorphism", IsXSqMorphism );
DeclareOperation( "Cat2MorphismByXSqMorphism", [ IsXSqMorphism ] );

#############################################################################
##
#E  gp3map.gd . . . . . . . . . . . . . . . . . . . . . . . . . . . ends here
