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