3 2d-mappings 3.1 Morphisms of 2-dimensional groups This chapter describes morphisms of (pre-)crossed modules and (pre-)cat1-groups. 3.1-1 Source Source( map )  attribute Range( map )  attribute SourceHom( map )  attribute RangeHom( map )  attribute Morphisms of 2-dimensional groups are implemented as 2-dimensional mappings. These have a pair of 2-dimensional groups 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. 3.2 Morphisms of pre-crossed modules 3.2-1 IsXModMorphism IsXModMorphism( map )  property IsPreXModMorphism( map )  property A morphism between two pre-crossed modules mathcalX_1 = (∂_1 : S_1 -> R_1) and mathcalX_2 = (∂_2 : S_2 -> R_2) is a pair (σ, ρ), where σ : S_1 -> S_2 and ρ : R_1 -> R_2 commute with the two boundary maps and are morphisms for the two actions: \partial_2 \circ \sigma ~=~ \rho \circ \partial_1, \qquad \sigma(s^r) ~=~ (\sigma s)^{\rho r}.  Here is a diagram of the situation. \vcenter{\xymatrix{ S_1 \ar[rr]^{\sigma} \ar[dd]_{\partial_1} && S_2 \ar[dd]^{\partial_2} \\ && \\ R_1 \ar[rr]_{\rho} && R_2 }}  Here σ is the SourceHom and ρ is the RangeHom of the morphism. When mathcalX_1 = mathcalX_2 and σ, ρ are automorphisms then (σ, ρ) is an automorphism of mathcalX_1. The group of automorphisms is denoted by Aut(mathcalX_1 ). 3.2-2 IsInjective IsInjective( map )  property IsSurjective( map )  property IsSingleValued( map )  property IsTotal( map )  property IsBijective( map )  property IsEndo2DimensionalMapping( map )  property 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. 3.2-3 XModMorphism XModMorphism( args )  function XModMorphismByHoms( X1, X2, sigma, rho )  operation PreXModMorphism( args )  function PreXModMorphismByHoms( P1, P2, sigma, rho )  operation InclusionMorphism2DimensionalDomains( X1, S1 )  operation InnerAutomorphismXMod( X1, r )  operation IdentityMapping( X1 )  attribute 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.  Example   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,3,4) ] : Range = Source : Source Homomorphism maps source generators to:  [ (5,9,8,7,6) ] : Range Homomorphism maps range generators to:  [ (1,2,3,4) ] gap> IsAutomorphism2DimensionalDomain( mor1 ); true  gap> Order( mor1 ); 2 gap> RepresentationsOfObject( mor1 ); [ "IsComponentObjectRep", "IsAttributeStoringRep", "Is2DimensionalMappingRep" ] gap> KnownPropertiesOfObject( mor1 ); [ "CanEasilyCompareElements", "CanEasilySortElements", "IsTotal",   "IsSingleValued", "IsInjective", "IsSurjective", "RespectsMultiplication",   "IsPreXModMorphism", "IsXModMorphism", "IsEndomorphism2DimensionalDomain",   "IsAutomorphism2DimensionalDomain" ] gap> KnownAttributesOfObject( mor1 ); [ "Name", "Order", "Range", "Source", "SourceHom", "RangeHom" ]   3.2-4 IsomorphismPerm2DimensionalGroup IsomorphismPerm2DimensionalGroup( obj )  attribute IsomorphismPc2DimensionalGroup( obj )  attribute IsomorphismByIsomorphisms( D, list )  operation When mathcal D is a 2-dimensional domain with source S and range R and σ : S -> S',~ ρ : R -> R' are isomorphisms, then IsomorphismByIsomorphisms(D,[sigma,rho]) returns an isomorphism (σ,ρ) : mathcal D -> mathcal D' where mathcal D' has source S' and range R'. Be sure to test IsBijective for the two functions σ,ρ before applying this operation. Using IsomorphismByIsomorphisms with a pair of isomorphisms obtained using IsomorphismPermGroup or IsomorphismPcGroup, we may construct a crossed module or a cat1-group of permutation groups or pc-groups.  Example   gap> q8 := SmallGroup(8,4);; ## quaternion group  gap> Xq8 := XModByAutomorphismGroup( q8 ); [Group( [ f1, f2, f3 ] )->Group( [ f1, f2, f3, f4 ] )] gap> iso := IsomorphismPerm2DimensionalGroup( Xq8 );; gap> Yq8 := Image( iso ); [Group( [ (1,2,4,6)(3,8,7,5), (1,3,4,7)(2,5,6,8), (1,4)(2,6)(3,7)(5,8)   ] )->Group( [ (2,6,5,4), (1,2,4)(3,5,6), (2,5)(4,6), (1,3)(2,5) ] )] gap> s4 := SymmetricGroup(4);;  gap> isos4 := IsomorphismGroups( Range(Yq8), s4 );; gap> id := IdentityMapping( Source( Yq8 ) );;  gap> IsBijective( id );; IsBijective( isos4 );; gap> mor := IsomorphismByIsomorphisms( Yq8, [id,isos4] );; gap> Zq8 := Image( mor ); [Group( [ (1,2,4,6)(3,8,7,5), (1,3,4,7)(2,5,6,8), (1,4)(2,6)(3,7)(5,8)   ] )->SymmetricGroup( [ 1 .. 4 ] )]   3.3 Morphisms of pre-cat1-groups A morphism of pre-cat1-groups from mathcalC_1 = (e_1;t_1,h_1 : G_1 -> R_1) to mathcalC_2 = (e_2;t_2,h_2 : G_2 -> R_2) is a pair (γ, ρ) where γ : G_1 -> G_2 and ρ : R_1 -> R_2 are homomorphisms satisfying h_2 \circ \gamma ~=~ \rho \circ h_1, \qquad t_2 \circ \gamma ~=~ \rho \circ t_1, \qquad e_2 \circ \rho ~=~ \gamma \circ e_1.  3.3-1 IsCat1Morphism IsCat1Morphism( map )  property IsPreCat1Morphism( map )  property Cat1Morphism( args )  function Cat1MorphismByHoms( C1, C2, gamma, rho )  operation PreCat1Morphism( args )  function PreCat1MorphismByHoms( P1, P2, gamma, rho )  operation InclusionMorphism2DimensionalDomains( C1, S1 )  operation InnerAutomorphismCat1( C1, r )  operation IdentityMapping( C1 )  attribute For an example we form a second cat1-group C2=[g18=>s3a], similar to C1 in 2.4-1, then construct an isomorphism (γ,ρ) between them.  Example   gap> t2 := GroupHomomorphismByImages(g18,s3a,g18gens,[(),(7,8,9),(8,9)]);;  gap> e2 := GroupHomomorphismByImages(s3a,g18,s3agens,[(4,5,6),(2,3)(5,6)]);;  gap> C2 := Cat1Group( t2, h1, e2 );;  gap> imgamma := [ (4,5,6), (1,2,3), (2,3)(5,6) ];;  gap> gamma := GroupHomomorphismByImages( g18, g18, g18gens, imgamma );; gap> rho := IdentityMapping( s3a );;  gap> mor := Cat1Morphism( C1, C2, gamma, rho );; gap> Display( mor );; Morphism of cat1-groups :-  : Source = [g18=>s3a] with generating sets:  [ (1,2,3), (4,5,6), (2,3)(5,6) ]  [ (7,8,9), (8,9) ] : Range = [g18=>s3a] with generating sets:  [ (1,2,3), (4,5,6), (2,3)(5,6) ]  [ (7,8,9), (8,9) ] : Source Homomorphism maps source generators to:  [ (4,5,6), (1,2,3), (2,3)(5,6) ] : Range Homomorphism maps range generators to:  [ (7,8,9), (8,9) ]   3.3-2 IsomorphismPermObject IsomorphismPermObject( obj )  function IsomorphismPerm2DimensionalGroup( 2DimensionalGroup )  attribute IsomorphismFp2DimensionalGroup( 2DimensionalGroup )  attribute IsomorphismPc2DimensionalGroup( 2DimensionalGroup )  attribute SmallerDegreePerm2DimensionalDomain( 2DimensionalDomain )  function The global function IsomorphismPermObject calls IsomorphismPerm2DimensionalGroup, which constructs a morphism whose SourceHom and RangeHom are calculated using IsomorphismPermGroup on the source and range. Similarly SmallerDegreePermutationRepresentation may be used on the two groups to obtain SmallerDegreePerm2DimensionalDomain. Names are assigned automatically.  Example   gap> iso2 := IsomorphismPerm2DimensionalGroup( C2 ); [[G2=>d12] => [..]] gap> Display( iso2 ); Morphism of cat1-groups :-  : Source = [G2=>d12] with generating sets:  [ f1, f2, f3, f4, f5, f6, f7 ]  [ f1, f2, f3 ] : Range = P[G2=>d12] with generating sets:  [ ( 6,12)( 8,15)( 9,16)(11,19)(13,26)(14,22)(17,27)(18,25)(20,21)(23,24),   ( 2, 3)( 5,10)( 9,16)(11,18)(17,23)(19,25)(24,27),   ( 4, 5, 7,10)( 6, 9,12,16)( 8,11,14,18)(13,17,20,23)(15,19,22,25)  (21,24,26,27), ( 4, 6, 7,12)( 5, 9,10,16)( 8,13,14,20)(11,17,18,23)  (15,21,22,26)(19,24,25,27), ( 4, 7)( 5,10)( 6,12)( 8,14)( 9,16)(11,18)  (13,20)(15,22)(17,23)(19,25)(21,26)(24,27), ( 1, 2, 3),   ( 4, 8,15)( 5,11,19)( 6,13,21)( 7,14,22)( 9,17,24)(10,18,25)(12,20,26)  (16,23,27) ]  [ (2,6)(3,5), (1,2,3,4,5,6), (1,3,5)(2,4,6) ] : Source Homomorphism maps source generators to:  [ ( 6,12)( 8,15)( 9,16)(11,19)(13,26)(14,22)(17,27)(18,25)(20,21)(23,24),   ( 2, 3)( 5,10)( 9,16)(11,18)(17,23)(19,25)(24,27),   ( 4, 5, 7,10)( 6, 9,12,16)( 8,11,14,18)(13,17,20,23)(15,19,22,25)  (21,24,26,27), ( 4, 6, 7,12)( 5, 9,10,16)( 8,13,14,20)(11,17,18,23)  (15,21,22,26)(19,24,25,27), ( 4, 7)( 5,10)( 6,12)( 8,14)( 9,16)(11,18)  (13,20)(15,22)(17,23)(19,25)(21,26)(24,27), ( 1, 2, 3),   ( 4, 8,15)( 5,11,19)( 6,13,21)( 7,14,22)( 9,17,24)(10,18,25)(12,20,26)  (16,23,27) ] : Range Homomorphism maps range generators to:  [ (2,6)(3,5), (1,2,3,4,5,6), (1,3,5)(2,4,6) ]   3.4 Operations on morphisms 3.4-1 CompositionMorphism CompositionMorphism( map2, map1 )  operation Composition of morphisms (written ( * ) when maps act on the right) calls the CompositionMorphism function for maps (acting on the left), applied to the appropriate type of 2d-mapping.  Example   gap> H2 := Subgroup(G2,[G2.3,G2.4,G2.6,G2.7]); SetName( H2, "H2" ); Group([ f3, f4, f6, f7 ]) gap> c6 := Subgroup( d12, [b,c] ); SetName( c6, "c6" ); Group([ f2, f3 ]) gap> SC2 := Sub2DimensionalGroup( C2, H2, c6 ); [H2=>c6] gap> IsCat1Group( SC2 ); true gap> inc2 := InclusionMorphism2DimensionalDomains( C2, SC2 ); [[H2=>c6] => [G2=>d12]] gap> CompositionMorphism( iso2, inc );  [[H2=>c6] => P[G2=>d12]]   3.4-2 Kernel Kernel( map )  operation Kernel2DimensionalMapping( map )  attribute 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.  Example   gap> c2 := Group( (19,20) );  Group([ (19,20) ]) gap> X0 := XModByNormalSubgroup( c2, c2 ); SetName( X0, "X0" ); [Group( [ (19,20) ] )->Group( [ (19,20) ] )] gap>  SX2 := Source( X2 );; gap> genSX2 := GeneratorsOfGroup( SX2 );  [ f1, f4, f5, f7 ] gap> sigma0 := GroupHomomorphismByImages(SX2,c2,genSX2,[(19,20),(),(),()]); [ f1, f4, f5, f7 ] -> [ (19,20), (), (), () ] gap> rho0 := GroupHomomorphismByImages(d12,c2,[a1,a2,a3],[(19,20),(),()]); [ f1, f2, f3 ] -> [ (19,20), (), () ] gap> mor0 := XModMorphism( X2, X0, sigma0, rho0 );;  gap> K0 := Kernel( mor0 );; gap> StructureDescription( K0 ); [ "C12", "C6" ]