2d-mappings
2d-mapping
Morphisms of 2d-objects
morphism of 2d-object
crossed module morphism
This chapter describes morphisms of (pre-)crossed modules and (pre-)cat1-groups.

Morphisms of 2dObjects are implemented as 2dMappings. These have a pair of 2d-objects as source and range, together with two group homomorphisms mapping between corresponding source and range groups. These functions return fail when invalid data is supplied.
Morphisms of pre-crossed modules
morphism
A morphism between two pre-crossed modules $\mathcal{X}_{1} = (\partial_1 : S_1 \to R_1)$ and $\mathcal{X}_{2} = (\partial_2 : S_2 \to R_2)$ is a pair $(\sigma, \rho)$, where $\sigma : S_1 \to S_2$ and $\rho : R_1 \to R_2$ commute with the two boundary maps and are morphisms for the two actions: \partial_2 \sigma = \rho \partial_1, \qquad \sigma(s^r) = (\sigma s)^{\rho r}. Thus $\sigma$ is the SourceHom and $\rho$ is the RangeHom. When $\mathcal{X}_{1} = \mathcal{X}_{2}$ and $ \sigma, \rho $ are automorphisms then $(\sigma, \rho)$ is an automorphism of $\mathcal{X}_1$. The group of automorphisms is denoted by ${\rm Aut}(\mathcal{X}_1 ).$
The usual properties of mappings are easily checked. It is usually sufficient to verify that both the SourceHom and the RangeHom have the required property.
These are the constructors for morphisms of pre-crossed and crossed modules.

In the following example we construct a simple automorphism of the crossed module X1 constructed in the previous chapter.
display a 2d-mapping
gap> sigma1 := GroupHomomorphismByImages( c5, c5, [ (5,6,7,8,9) ] [ (5,9,8,7,6) ] );; gap> rho1 := IdentityMapping( Range( X1 ) ); IdentityMapping( PAut(c5) ) gap> mor1 := XModMorphism( X1, X1, sigma1, rho1 ); [[c5->PAut(c5))] => [c5->PAut(c5))]] gap> Display( mor1 ); Morphism of crossed modules :- : Source = [c5->PAut(c5))] with generating sets: [ (5,6,7,8,9) ] [ (1,2,4,3) ] : Range = Source : Source Homomorphism maps source generators to: [ (5,9,8,7,6) ] : Range Homomorphism maps range generators to: [ (1,2,4,3) ] gap> IsAutomorphism2dObject( mor1 ); true gap> Print( RepresentationsOfObject(mor1), "\n" ); [ "IsComponentObjectRep", "IsAttributeStoringRep", "Is2dMappingRep" ] gap> Print( KnownPropertiesOfObject(mor1), "\n" ); [ "IsTotal", "IsSingleValued", "IsInjective", "IsSurjective", "Is2dMapping", "IsPreXModMorphism", "IsXModMorphism", "IsEndomorphism2dObject", "IsAutomorphism2dObject" ] gap> Print( KnownAttributesOfObject(mor1), "\n" ); [ "Name", "Range", "Source", "SourceHom", "RangeHom" ]
Morphisms of pre-cat1-groups

A morphism of pre-cat1-groups from \mathcal{C}_1 = (e_1;t_1,h_1 : G_1 \to R_1) to \mathcal{C}_2 = (e_2;t_2,h_2 : G_2 \to R_2) is a pair (\gamma, \rho) where \gamma : G_1 \to G_2 and \rho : R_1 \to R_2 are homomorphisms satisfying h_2 \gamma = \rho h_1, \qquad t_2 \gamma = \rho t_1, \qquad e_2 \rho = \gamma e_1.

The global function IsomorphismPermObject calls IsomorphismPermPreCat1, which constructs a morphism whose SourceHom and RangeHom are calculated using IsomorphismPermGroup on the source and range. Similarly SmallerDegreePermutationRepresentation is used on the two groups to obtain SmallerDegreePerm2dObject. Names are assigned automatically.
gap> iso2 := IsomorphismPermObject( C2 ); [[s3c4=>s3] => [Ps3c4=>Ps3]] gap> Display( iso2 ); Morphism of cat1-groups :- : Source = [s3c4=>s3] with generating sets: [ f1, f2, f3, f4 ] [ f1, f2 ] : Range = [Ps3c4=>Ps3] with generating sets: [ ( 5, 9)( 6,10)( 7,11)( 8,12), ( 1, 5, 9)( 2, 6,10)( 3, 7,11)( 4, 8,12), ( 1, 3, 2, 4)( 5, 7, 6, 8)( 9,11,10,12), ( 1, 2)( 3, 4)( 5, 6)( 7, 8)( 9,10) (11,12) ] [ (2,3), (1,2,3) ] : Source Homomorphism maps source generators to: [ ( 5, 9)( 6,10)( 7,11)( 8,12), ( 1, 5, 9)( 2, 6,10)( 3, 7,11)( 4, 8,12), ( 1, 3, 2, 4)( 5, 7, 6, 8)( 9,11,10,12), ( 1, 2)( 3, 4)( 5, 6)( 7, 8)( 9,10) (11,12) ] : Range Homomorphism maps range generators to: [ (2,3), (1,2,3) ]
Operations on morphisms
operations on morphisms
Composition of morphisms, written (<map1> * <map2>) for maps acting of the right, calls the CompositionMorphism function for maps acting on the left, applied to the appropriate type of 2d-mapping.
gap> Order( mor1 ); 2 gap> GeneratorsOfGroup( d16 ); [ (11,12,13,14,15,16,17,18), (12,18)(13,17)(14,16) ] gap> d8 := Subgroup( d16, [ c^2, d ] );; gap> c4 := Subgroup( d8, [ c^2 ] );; gap> SetName( d8, "d8" ); SetName( c4, "c4" ); gap> X16 := XModByNormalSubgroup( d16, d8 ); [d8->d16] gap> X8 := XModByNormalSubgroup( d8, c4 ); [c4->d8] gap> IsSubXMod( X16, X8 ); true gap> incd8 := InclusionMorphism2dObjects( X16, X8 ); [[c4->d8] => [d8->d16]] gap> rho := GroupHomomorphismByImages( d16, d16, [c,d], [c,d^(c^2)] );; gap> sigma := GroupHomomorphismByImages( d8, d8, [c^2,d], [c^2,d^(c^2)] );; gap> mor := XModMorphismByHoms( X16, X16, sigma, rho ); [[d8->d16] => [d8->d16]] gap> comp := incd8 * mor; [[c4->d8] => [d8->d16]] gap> comp = CompositionMorphism( mor, incd8 ); true
The kernel of a morphism of crossed modules is a normal subcrossed module whose groups are the kernels of the source and target homomorphisms. The inclusion of the kernel is a standard example of a crossed square, but these have not yet been implemented.
gap> c2 := Group( (19,20) );; gap> i2 := Subgroup( c2, [()] );; gap> X9 := XModByNormalSubgroup( c2, i2 );; gap> sigma9 := GroupHomomorphismByImages( c4, i2, [c^2], [()] );; gap> rho9 := GroupHomomorphismByImages( d8, c2, [c^2,d], [(),(19,20)] );; gap> mor9 := XModMorphism( X8, X9, sigma9, rho9 ); [[c4->d8] => [..]] gap> K9 := Kernel( mor9 ); [Group( [ (11,13,15,17)(12,14,16,18) ] )->Group( [ (11,13,15,17)(12,14,16,18) ] )]