In xmodL1 Loday reformulated the notion of a crossed module as a
cat1-group, namely a group G with a pair of homomorphisms t,h
: G to G having a common image R and satisfying certain axioms.
We find it convenient to define a cat1-group {cal C} = (e;t,h : G
to R ) as having source group G, range group R, and three
homomorphisms: two surjections t,h : G to R and an embedding e
: R to G satisfying:
textbfCat 1: & te = he = mathrm{id}_R ,
textbfCat 2: & [ker t, ker h] = { 1_G }.
It follows that teh = h, ; het = t, ; tet = t, ; heh = h.
The maps t,h are often referred to as the em source and em target, but we choose to call them the em tail and em head of {cal C}, because em source is the GAP term for the domain of a function.
A morphism {cal C}_1 to {cal C}_2 of cat1-groups 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, ;; t_2 gamma = rho t_1, ;; e_2 rho = gamma e_1, (see refCat1Morphism and subsequent sections).
In this implementation a cat1-group {cal C} is a record with the following fields:
C.source
, & the source G
,
C.range
, & the range R
,
C.tail
, & the tail homomorphism t
,
C.head
, & the head homomorphism h
,
C.embedRange
, & the embedding of R
in G
,
C.kernel
, & a permutation group isomorphic to the kernel of t
,
C.embedKernel
,& the inclusion of the kernel in G
,
C.boundary
, & the restriction of h
to the kernel,
C.isDomain
, & set true
,
C.operations
, & a special set of operations Cat1Ops
(see refOperations for cat1-groups,
C.name
, & a concatenation of the names of the source and range.
C.isCat1
& a boolean flag, normally true
.
The following listing shows a simple example:
gap> s3c4gen := s3c4.generators; [ (1,2), (2,3), (4,5,6,7) ] gap> t1 := GroupHomomorphismByImages( s3c4, s3, s3c4gen, [ (1,2), (2,3), () ] );; gap> C1 := Cat1( s3c4, t1, t1 ); cat1-group [s3c4 ==> s3] gap> Cat1Print( C1 ); cat1-group [s3c4 ==> s3] :- : source group has generators: [ (1,2), (2,3), (4,5,6,7) ] : range group has generators: [ (1,2), (2,3) ] : tail homomorphism maps source generators to: [ ( 1, 2), ( 2, 3), () ] : head homomorphism maps source generators to: [ ( 1, 2), ( 2, 3), () ] : range embedding maps range generators to: [ (1,2), (2,3) ] : kernel has generators: [ (4,5,6,7) ] : boundary homomorphism maps generators of kernel to: [ () ] : kernel embedding maps generators of kernel to: [ (4,5,6,7) ]
The category of crossed modules is equivalent to the category of cat1-groups, and the functors between these two categories may be described as follows.
Starting with the crossed module {cal X} = (partial : S to R) the group G is defined as the semidirect product G = R semidirect S using the action from {cal X}. The structural morphisms are given by t(r,s) = r, ; h(r,s) = r (partial s), ; er = (r,1).
On the other hand, starting with a cat1-group {cal C} = (e;t,h : G to R) we define S = ker t, the range R remains unchanged and partial = hmid_S . The action of R on S is conjugation in S via the embedding of R in G.
gap> X1; Crossed module [c5->PermAut(c5)] gap> CX1 := Cat1XMod(X1); cat1-group [Perm(PermAut(c5)
|
X c5) ==> PermAut(c5)] gap> CX1.source.generators; [ (2,3,5,4), (1,2,3,4,5) ] gap> gap> XC1 := XModCat1( C1 ); Crossed module [ker([s3c4 ==> s3])->s3] gap> WhatTypeXMod( XC1 ); [ " triv, ", " zero, ", " RMod, " ]
GAP 3.4.4