Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.
Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.
| Download
GAP 4.8.9 installation with standard packages -- copy to your CoCalc project to get it
Project: cocalc-sagemath-dev-slelievre
Views: 418346<!-- ------------------------------------------------------------------- -->1<!-- -->2<!-- gp2obj.xml XMod documentation Chris Wensley -->3<!-- & Murat Alp -->4<!-- Copyright (C) 2001-2017, Chris Wensley et al, -->5<!-- School of Computer Science, Bangor University, U.K. -->6<!-- -->7<!-- ------------------------------------------------------------------- -->89<?xml version="1.0" encoding="UTF-8"?>1011<Chapter Label="chap-gp2obj">1213<Heading>2d-groups : crossed modules and cat1-groups</Heading>1415<Index>2d-domain</Index>16<Index>2d-group</Index>17The term <E>2d-group</E> refers to a set of equivalent categories18of which the most common are the categories of19<E>crossed modules</E>; <E>cat1-groups</E>; and <E>group-groupoids</E>,20all of which involve a pair of groups.2122<Section Label="sect-constructions">23<Heading>Constructions for crossed modules</Heading>2425<Index>crossed module</Index>26A crossed module (of groups) <M>\mathcal{X} = (\partial : S \to R )</M>27consists of a group homomorphism <M>\partial </M>,28called the <E>boundary</E> of <M>\mathcal{X}</M>,29with <E>source</E> <M>S</M> and <E>range</E> <M>R</M>.30The group <M>R</M> acts on itself by conjugation, and on <M>S</M> by an action31<M>\alpha : R \to {\rm Aut}(S)</M> such that,32for all <M>s,s_1,s_2 \in S</M> and <M>r \in R</M>,33<Display>34{\bf XMod\ 1} : \partial(s^r)35= r^{-1} (\partial s) r36= (\partial s)^r,37\qquad38{\bf XMod\ 2} : s_1^{\partial s_2}39= s_2^{-1}s_1 s_240= {s_1}^{s_2}.41</Display>42When only the first of these axioms is satisfied, the resulting structure is43a <E>pre-crossed module</E>44(see section <Ref Sect="sect-precrossed-modules" />).45(Much of the literature on crossed modules uses left actions,46but we have chosen to use right actions in this package47since that is the standard choice for group actions in &GAP;.)48<P/>49The kernel of <M>\partial</M> is abelian.50<P/>51There are a variety of constructors for crossed modules:5253<ManSection>54<Func Name="XMod"55Arg="args" />56<Oper Name="XModByBoundaryAndAction"57Arg="bdy act" />58<Oper Name="XModByTrivialAction"59Arg="bdy" />60<Oper Name="XModByNormalSubgroup"61Arg="G N" />62<Oper Name="XModByCentralExtension"63Arg="bdy" />64<Oper Name="XModByAutomorphismGroup"65Arg="grp" />66<Oper Name="XModByInnerAutomorphismGroup"67Arg="grp" />68<Oper Name="XModByGroupOfAutomorphisms"69Arg="G A" />70<Oper Name="XModByAbelianModule"71Arg="abmod" />72<Oper Name="DirectProductOp"73Arg="L X1" />74<Description>75The global function <C>XMod</C> implements one of the following76standard constructions:77<List>78<Item>79A <E>trivial action crossed module</E> <M>(\partial : S \to R)</M>80has <M>s^r = s</M> for all <M>s \in S, \; r \in R</M>,81the source is abelian and the image lies in the centre of the range.82</Item>83<Item>84A <E>conjugation crossed module</E> is the inclusion of a normal subgroup85<M>S \unlhd R</M>, where <M>R</M> acts on <M>S</M> by conjugation.86</Item>87<Item>88A <E>central extension crossed module</E> has as boundary a surjection89<M>\partial : S \to R</M>, with central kernel,90where <M>r \in R</M> acts on <M>S</M> by conjugation91with <M>\partial^{-1}r</M>.92</Item>93<Item>94An <E>automorphism crossed module</E> has as range a subgroup <M>R</M>95of the automorphism group Aut<M>(S)</M> of <M>S</M>96which contains the inner automorphism group of <M>S</M>.97The boundary maps <M>s \in S</M> to the inner automorphism of <M>S</M>98by <M>s</M>.99</Item>100<Item>101A <E>crossed abelian module</E> has an abelian module as source102and the zero map as boundary.103</Item>104<Item>105The direct product <M>\mathcal{X}_{1} \times \mathcal{X}_{2}</M>106of two crossed modules has source <M>S_1 \times S_2</M>,107range <M>R_1 \times R_2</M> and boundary108<M>\partial_1 \times \partial_2</M>, with <M>R_1,\ R_2</M> acting109trivially on <M>S_2,\ S_1</M> respectively.110<P/>111Since <C>DirectProduct</C> is a global function which only accepts groups,112it is necessary to provide an "other method" for operation113<C>DirectProductOp</C> which, as usual, takes as parameters a list of114crossed modules, followed by the first of these:115<C>DirectProductOp([X1,X2],X1);</C>116</Item>117</List>118</Description>119</ManSection>120121<ManSection>122<Attr Name="Source"123Arg="X0" />124<Attr Name="Range"125Arg="X0" />126<Attr Name="Boundary"127Arg="X0" />128<Attr Name="XModAction"129Arg="X0" />130<Description>131The following attributes are used in the construction of132a crossed module <C>X0</C>.133<List>134<Item>135<C>Source(X0)</C> and <C>Range(X0)</C> are the source <M>S</M>136and range <M>R</M> of <M>\partial</M>, the boundary <C>Boundary(X0)</C>;137</Item>138<Item>139<C>XModAction(X0)</C> is a homomorphism from <M>R</M>140to a group of automorphisms of <C>X0</C>.141</Item>142</List>143<Index>AutoGroup</Index>144(Up until version 2.63 there was an additional attribute <C>AutoGroup</C>,145the range of <C>XModAction(X0)</C>.)146</Description>147</ManSection>148149<ManSection>150<Oper Name="ImageElmXModAction"151Arg="X0, s, r" />152<Description>153This function returns the element <M>s^r</M> given by <C>XModAction(X0)</C>.154</Description>155</ManSection>156157<ManSection>158<Attr Name="Size"159Arg="X0" />160<Attr Name="Name"161Arg="X0" />162<Attr Name="IdGroup"163Arg="X0" />164<Attr Name="ExternalSetXMod"165Arg="X0" />166<Description>167More familiar attributes are <C>Name</C>, <C>Size</C> and <C>IdGroup</C>.168The name is formed by concatenating the names of the source and range169(if these exist).170<C>Size</C> and <C>IdGroup</C> return two-element lists.171<P/>172The <C>ExternalSetXMod</C> for a crossed module is the source group considered as a G-set of the range group using the crossed module action.173<P/>174<Index>display a 2d-group</Index>175The <C>Display</C> function is used to print details of 2d-groups.176</Description>177</ManSection>178179In the simple example below, <Code>X1</Code> is an automorphism crossed module,180using a cyclic group of size five.181The <C>Print</C> statements at the end list the &GAP; representations,182properties and attributes of <Code>X1</Code>.183<P/>184<Example>185<![CDATA[186gap> c5 := Group( (5,6,7,8,9) );;187gap> SetName( c5, "c5" );188gap> X1 := XModByAutomorphismGroup( c5 );189[c5 -> PAut(c5)]190gap> Display( X1 );191Crossed module [c5 -> PAut(c5)] :-192: Source group c5 has generators:193[ (5,6,7,8,9) ]194: Range group PAut(c5) has generators:195[ (1,2,3,4) ]196: Boundary homomorphism maps source generators to:197[ () ]198: Action homomorphism maps range generators to automorphisms:199(1,2,3,4) --> { source gens --> [ (5,7,9,6,8) ] }200This automorphism generates the group of automorphisms.201gap> Size( X1 ); IdGroup( X1 );202[ 5, 4 ]203[ [ 5, 1 ], [ 4, 1 ] ]204gap> ext := ExternalSetXMod( X1 );205<xset:[ (), (5,6,7,8,9), (5,7,9,6,8), (5,8,6,9,7), (5,9,8,7,6) ]>206gap> Orbits( ext );207[ [ () ], [ (5,6,7,8,9), (5,7,9,6,8), (5,9,8,7,6), (5,8,6,9,7) ] ]208gap> ImageElmXModAction( X1, (5,6,7,8,9), (1,2,3,4) );209(5,7,9,6,8)210gap> RepresentationsOfObject( X1 );211[ "IsComponentObjectRep", "IsAttributeStoringRep", "IsPreXModObj" ]212gap> KnownAttributesOfObject( X1);213[ "Name", "Size", "Range", "Source", "IdGroup", "Boundary", "XModAction",214"ExternalSetXMod" ]215]]>216</Example>217218</Section>219220221<Section Label="sect-properties-xmod">222<Heading>Properties of crossed modules</Heading>223224225<Index>Is2DimensionalDomain</Index>226<Index>Is2DimensionalGroup</Index>227<Index>IsTrivialAction2DimensionalGroup</Index>228<Index>IsNormalSubgroup2DimensionalGroup</Index>229<Index>IsCentralExtension2DimensionalGroup</Index>230<Index>IsAutomorphismGroup2DimensionalGroup</Index>231<Index>IsAbelianModule2DimensionalGroup</Index>232233The underlying category structures for the objects constructed in this234chapter follow the sequence <C>Is2DimensionalDomain</C>;235<C>Is2DimensionalMagma</C>; <C>Is2DimensionalMagmaWithOne</C>;236<C>Is2DimensionalMagmaWithInverses</C>,237mirroring the situation for (one-dimensional) groups.238From these we construct <C>Is2DimensionalSemigroup</C>,239<C>Is2DimensionalMonoid</C> and <C>Is2DimensionalGroup</C>.240<P/>241There are then a variety of properties associated with crossed modules,242starting with <C>IsPreXMod</C> and <C>IsXMod</C>.243<P/>244<ManSection>245<Prop Name="IsXMod"246Arg="X0" />247<Prop Name="IsPreXMod"248Arg="X0" />249<Prop Name="IsPerm2DimensionalGroup"250Arg="X0" />251<Prop Name="IsPc2DimensionalGroup"252Arg="X0" />253<Prop Name="IsFp2DimensionalGroup"254Arg="X0" />255<Description>256A structure which has <C>IsPerm2DimensionalGroup</C> is a precrossed module257or a pre-cat1-group (see section <Ref Sect="sect-cat1" />)258whose source and range are both permutation groups.259The properties <C>IsPc2DimensionalGroup</C>, <C>IsFp2DimensionalGroup</C>260are defined similarly.261In the example below we see that <Code>X1</Code> has262<C>IsPreXMod</C>, <C>IsXMod</C> and <C>IsPerm2DimensionalGroup</C>.263There are also properties corresponding to the various construction methods264listed in section <Ref Sect="sect-constructions" />:265<C>IsTrivialAction2DimensionalGroup</C>;266<C>IsNormalSubgroup2DimensionalGroup</C>;267<C>IsCentralExtension2DimensionalGroup</C>; <C>IsAutomorphismGroup2DimensionalGroup</C>;268<C>IsAbelianModule2DimensionalGroup</C>.269</Description>270</ManSection>271272<Example>273<![CDATA[274gap> KnownPropertiesOfObject( X1 );275[ "IsEmpty", "IsTrivial", "IsNonTrivial", "IsFinite",276"CanEasilyCompareElements", "CanEasilySortElements", "IsDuplicateFree",277"IsGeneratorsOfSemigroup", "IsPreXModDomain", "IsPerm2DimensionalGroup",278"IsPreXMod", "IsXMod", "IsAutomorphismGroup2DimensionalGroup" ]279]]>280</Example>281282<Index>IsNormal for crossed modules</Index>283<ManSection>284<Oper Name="SubXMod"285Arg="X0 src rng" />286<Attr Name="TrivialSubXMod"287Arg="X0" />288<Attr Name="NormalSubXMods"289Arg="X0" />290<Description>291With the standard crossed module constructors listed above as building blocks,292sub-crossed modules, normal sub-crossed modules293<M>\mathcal{N} \lhd \mathcal{X}</M>,294and also quotients <M>\mathcal{X}/\mathcal{N}</M> may be constructed.295A sub-crossed module <M>\mathcal{S} = (\delta : N \to M)</M>296is <E>normal</E> in <M>\mathcal{X} = (\partial : S \to R)</M> if297<List>298<Item>299<M>N,M</M> are normal subgroups of <M>S,R</M> respectively,300</Item>301<Item>302<M>\delta</M> is the restriction of <M>\partial</M>,303</Item>304<Item>305<M>n^r \in N</M> for all <M>n \in N,~r \in R</M>,306</Item>307<Item>308<M>(s^{-1})^ms \in N</M> for all <M>m \in M,~s \in S</M>.309</Item>310</List>311These conditions ensure that <M>M \ltimes N</M> is normal in312the semidirect product <M>R \ltimes S</M>.313(Note that <M>\langle s,m \rangle = (s^{-1})^ms</M>314is a displacement: see <Ref Func="Displacement" />.)315<P/>316A method for <C>IsNormal</C> for precrossed modules is provided.317See section <Ref Sect="sect-more-xmod-ops"/> for factor crossed modules318and their natural morphisms.319<P/>320The five normal subcrossed modules of <C>X4</C> found in the following321example are <C>[id,id], [k4,k4], [k4,a4], [a4,a4]</C>322and <C>X4</C> itself.323</Description>324</ManSection>325<P/>326<Example>327<![CDATA[328gap> s4 := Group( (1,2), (2,3), (3,4) );;329gap> a4 := Subgroup( s4, [ (1,2,3), (2,3,4) ] );;330gap> k4 := Subgroup( a4, [ (1,2)(3,4), (1,3)(2,4) ] );;331gap> SetName(s4,"s4"); SetName(a4,"a4"); SetName(k4,"k4");332gap> X4 := XModByNormalSubgroup( s4, a4 );333[a4->s4]334gap> Y4 := SubXMod( X4, k4, a4 );335[k4->a4]336gap> IsNormal(X4,Y4);337true338gap> NX4 := NormalSubXMods( X4 );;339gap> Length( NX4 );3405341]]>342</Example>343344</Section>345346347<Section Label="sect-precrossed-modules">348<Heading>Pre-crossed modules</Heading>349350<Index>pre-crossed module</Index>351<ManSection>352<Oper Name="PreXModByBoundaryAndAction"353Arg="bdy act" />354<Oper Name="SubPreXMod"355Arg="X0 src rng" />356<Description>357If axiom <M>{\bf XMod\ 2}</M> is <E>not</E> satisfied,358the corresponding structure is known as a <E>pre-crossed module</E>.359</Description>360</ManSection>361<P/>362<Example>363<![CDATA[364gap> b1 := (11,12,13,14,15,16,17,18);; b2 := (12,18)(13,17)(14,16);;365gap> d16 := Group( b1, b2 );;366gap> sk4 := Subgroup( d16, [ b1^4, b2 ] );;367gap> SetName( d16, "d16" ); SetName( sk4, "sk4" );368gap> bdy16 := GroupHomomorphismByImages( d16, sk4, [b1,b2], [b1^4,b2] );;369gap> aut1 := GroupHomomorphismByImages( d16, d16, [b1,b2], [b1^5,b2] );;370gap> aut2 := GroupHomomorphismByImages( d16, d16, [b1,b2], [b1,b2^4*b2] );;371gap> aut16 := Group( [ aut1, aut2 ] );;372gap> act16 := GroupHomomorphismByImages( sk4, aut16, [b1^4,b2], [aut1,aut2] );;373gap> P16 := PreXModByBoundaryAndAction( bdy16, act16 );374[d16->sk4]375gap> IsXMod(P16);376false377]]>378</Example>379380<Index>Peiffer subgroup</Index>381<ManSection>382<Attr Name="PeifferSubgroup"383Arg="X0" />384<Attr Name="XModByPeifferQuotient"385Arg="prexmod" />386<Description>387The <E>Peiffer subgroup</E> <M>P</M> of a pre-crossed module388<M>{\mathcal X}</M> is the subgroup of <M>{\rm ker}(\partial)</M>389generated by <E>Peiffer commutators</E>390<Display>391\lfloor s_1,s_2 \rfloor ~=~392(s_1^{-1})^{\partial s_2}~s_2^{-1}~s_1~s_2 ~=~393\langle \partial s_2, s_1 \rangle\ [s_1,s_2]~.394</Display>395Then <M>\mathcal{P} = (0 : P \to \{1_R\})</M>396is a normal sub-pre-crossed module of <M>\mathcal{X}</M>397and <M>\mathcal{X}/\mathcal{P} = (\partial : S/P \to R)</M>398is a crossed module.399<P/>400In the following example the Peiffer subgroup is cyclic of size <M>4</M>.401</Description>402</ManSection>403<P/>404<Example>405<![CDATA[406gap> P := PeifferSubgroup( P16 );407Group( [ (11,15)(12,16)(13,17)(14,18), (11,17,15,13)(12,18,16,14) ] )408gap> X16 := XModByPeifferQuotient( P16 );409Peiffer([d16->sk4])410gap> Display( X16 );411Crossed module Peiffer([d16->sk4]) :-412: Source group has generators:413[ f1, f2 ]414: Range group has generators:415[ (11,15)(12,16)(13,17)(14,18), (12,18)(13,17)(14,16) ]416: Boundary homomorphism maps source generators to:417[ (12,18)(13,17)(14,16), (11,15)(12,16)(13,17)(14,18) ]418The automorphism group is trivial419gap> iso16 := IsomorphismPermGroup( Source( X16 ) );;420gap> S16 := Image( iso16 );421Group([ (1,2), (3,4) ])422]]>423</Example>424425</Section>426427428<Section Label="sect-cat1">429<Heading>Cat1-groups and pre-cat1-groups</Heading>430<Index>cat1-group</Index>431432In <Cite Key="L1" />, Loday reformulated the notion of a433crossed module as a cat1-group,434namely a group <M>G</M> with a pair of endomorphisms <M>t,h : G \to G</M>435having a common image <M>R</M> and satisfying certain axioms.436We find it computationally convenient to define a cat1-group437<M>\mathcal{C} = (e;t,h : G \to R )</M> as having source group <M>G</M>,438range group <M>R</M>, and three homomorphisms: two surjections439<M>t,h : G \to R</M> and an embedding <M>e : R \to G</M> satisfying:440<Display>441{\bf Cat\ 1} : ~t \circ e ~=~ h \circ e = {\rm id}_R,442\qquad443{\bf Cat\ 2} : ~[\ker t, \ker h] ~=~ \{ 1_G \}.444</Display>445It follows that446<M>\;t \circ e \circ h = h,~ h \circ e \circ t = t,~447t \circ e \circ t = t~</M>448and <M>~h \circ e \circ h = h</M>.449(See section <Ref Sect="sect-properties-cat1"/> for the case when450<M>t,h</M> are endomorphisms.)451452<ManSection Label="mansect-cat1">453<Func Name="Cat1Group"454Arg="args" />455<Func Name="PreCat1Group"456Arg="args" />457<Oper Name="PreCat1GroupByTailHeadEmbedding"458Arg="t h e" />459<Oper Name="PreCat1GroupByEndomorphisms"460Arg="t h" />461<Description>462The global functions <C>Cat1Group</C> and <C>PreCat1Group</C>463can be called in various ways.464<List>465<Item>466as <C>Cat1Group(t,h,e);</C> when <M>t,h,e</M> are three homomorphisms,467which is equivalent to <C>PreCat1GroupByTailHeadEmbedding(t,h,e);</C>468</Item>469<Item>470as <C>Cat1Group(t,h);</C> when <M>t,h</M> are two endomorphisms,471which is equivalent to <C>PreCat1GroupByEndomorphisms(t,h);</C>472</Item>473<Item>474as <C>Cat1Group(t);</C> when <M>t=h</M> is an endomorphism,475which is equivalent to <C>PreCat1GroupByEndomorphisms(t,t);</C>476</Item>477<Item>478as <C>Cat1Group(t,e);</C> when <M>t=h</M> and <M>e</M> are homomorphisms,479which is equivalent to <C>PreCat1GroupByTailHeadEmbedding(t,t,e);</C>480</Item>481<Item>482as <C>Cat1Group(i,j,k);</C> when <M>i,j,k</M> are integers,483which is equivalent to <C>Cat1Select(i,j,k);</C>484as described in section <Ref Sect="sect-cat1select"/>.485</Item>486</List>487</Description>488</ManSection>489<P/>490<Example>491<![CDATA[492gap> g18gens := [ (1,2,3), (4,5,6), (2,3)(5,6) ];;493gap> s3agens := [ (7,8,9), (8,9) ];;494gap> g18 := Group( g18gens );; SetName( g18, "g18" );495gap> s3a := Group( s3agens );; SetName( s3a, "s3a" );496gap> t1 := GroupHomomorphismByImages(g18,s3a,g18gens,[(7,8,9),(),(8,9)]);497[ (1,2,3), (4,5,6), (2,3)(5,6) ] -> [ (7,8,9), (), (8,9) ]498gap> h1 := GroupHomomorphismByImages(g18,s3a,g18gens,[(7,8,9),(7,8,9),(8,9)]);499[ (1,2,3), (4,5,6), (2,3)(5,6) ] -> [ (7,8,9), (7,8,9), (8,9) ]500gap> e1 := GroupHomomorphismByImages(s3a,g18,s3agens,[(1,2,3),(2,3)(5,6)]);501[ (7,8,9), (8,9) ] -> [ (1,2,3), (2,3)(5,6) ]502gap> C18 := Cat1Group( t1, h1, e1 );503[g18=>s3a]504]]>505</Example>506507<ManSection>508<Attr Name="Source"509Arg="C" />510<Attr Name="Range"511Arg="C" />512<Attr Name="TailMap"513Arg="C" />514<Attr Name="HeadMap"515Arg="C" />516<Attr Name="RangeEmbedding"517Arg="C" />518<Attr Name="KernelEmbedding"519Arg="C" />520<Attr Name="Boundary"521Arg="C" />522<Attr Name="Name"523Arg="C" />524<Attr Name="Size"525Arg="C" />526<Description>527These are the attributes of a cat1-group <M>\mathcal{C}</M>528in this implementation.529<P/>530The maps <M>t,h</M> are often referred to as the531<E>source</E> and <E>target</E>,532but we choose to call them the533<E>tail</E> and <E>head</E> of <M>\mathcal{C}</M>,534because <E>source</E> is the &GAP; term for the domain of a function.535The <C>RangeEmbedding</C> is the embedding of <C>R</C> in <C>G</C>,536the <C>KernelEmbedding</C> is the inclusion of537the kernel of <C>t</C> in <C>G</C>,538and the <C>Boundary</C> is the restriction of <C>h</C>539to the kernel of <C>t</C>.540It is frequently the case that <M>t=h</M>,541but not in the example <C>C18</C> above.542</Description>543</ManSection>544<Example>545<![CDATA[546gap> Source( C18 );547g18548gap> Range( C18 );549s3a550gap> TailMap( C18 );551[ (1,2,3), (4,5,6), (2,3)(5,6) ] -> [ (7,8,9), (), (8,9) ]552gap> HeadMap( C18 );553[ (1,2,3), (4,5,6), (2,3)(5,6) ] -> [ (7,8,9), (7,8,9), (8,9) ]554gap> RangeEmbedding( C18 );555[ (7,8,9), (8,9) ] -> [ (1,2,3), (2,3)(5,6) ]556gap> Kernel( C18 );557Group([ (4,5,6) ])558gap> KernelEmbedding( C18 );559[ (4,5,6) ] -> [ (4,5,6) ]560gap> Name( C18 );561"[g18=>s3a]"562gap> Size( C18 );563[ 18, 6 ]564gap> StructureDescription( C18 );565[ "(C3 x C3) : C2", "S3" ]566]]>567</Example>568569<ManSection>570<Oper Name="DiagonalCat1Group"571Arg="gen1" />572<Oper Name="PreCat1GroupByNormalSubgroup"573Arg="G N" />574<Oper Name="Cat1GroupByPeifferQuotient"575Arg="P" />576<Attr Name="ReverseCat1Group"577Arg="C0" />578<Description>579These are some more constructors for cat1-groups.580The following listing shows an example of a permutation cat1-group581of size <M>[576,24]</M> with source group <M>S_4 \times S_4</M>,582range group a third <M>S_4</M>, and <M>t \neq h</M>.583A similar example may be reproduced using the command584<Code>C := DiagonalCat1Group([(1,2,3,4),(3,4)]);</Code>.585</Description>586</ManSection>587<P/>588<Example>589<![CDATA[590gap> G4 := Group( (1,2,3,4), (3,4), (5,6,7,8), (7,8) );;591gap> R4 := Group( (9,10,11,12), (11,12) );;592gap> SetName( G4, "s4s4" ); SetName( R4, "s4d" );593gap> G4gens := GeneratorsOfGroup( G4 );;594gap> R4gens := GeneratorsOfGroup( R4 );;595gap> t := GroupHomomorphismByImages( G4, R4, G4gens,596> Concatenation( R4gens, [ (), () ] ) );;597gap> h := GroupHomomorphismByImages( G4, R4, G4gens,598> Concatenation( [ (), () ], R4gens ) );;599gap> e := GroupHomomorphismByImages( R4, G4, R4gens,600> [ (1,2,3,4)(5,6,7,8), (3,4)(7,8) ] );;601gap> C4 := PreCat1GroupByTailHeadEmbedding( t, h, e );;602gap> Display(C4);603Cat1-group [s4s4=>s4d] :-604: Source group s4s4 has generators:605[ (1,2,3,4), (3,4), (5,6,7,8), (7,8) ]606: Range group s4d has generators:607[ ( 9,10,11,12), (11,12) ]608: tail homomorphism maps source generators to:609[ ( 9,10,11,12), (11,12), (), () ]610: head homomorphism maps source generators to:611[ (), (), ( 9,10,11,12), (11,12) ]612: range embedding maps range generators to:613[ (1,2,3,4)(5,6,7,8), (3,4)(7,8) ]614: kernel has generators:615[ (5,6,7,8), (7,8) ]616: boundary homomorphism maps generators of kernel to:617[ ( 9,10,11,12), (11,12) ]618: kernel embedding maps generators of kernel to:619[ (5,6,7,8), (7,8) ]620]]>621</Example>622623</Section>624625<Section Label="sect-properties-cat1">626<Heading>Properties of cat1-groups and pre-cat1-groups</Heading>627628Many of the properties listed in section <Ref Sect="sect-properties-xmod"/>629apply to pre-cat1-groups and to cat1-groups since these are also 2d-groups.630There are also more specific properties.631632<ManSection>633<Prop Name="IsCat1Group"634Arg="C0" />635<Prop Name="IsPreXCat1Group"636Arg="C0" />637<Prop Name="IsIdentityCat1Group"638Arg="C0" />639<Prop Name="IsEndomorphismPreCat1Group"640Arg="C0" />641<Attr Name="EndomorphismPreCat1Group"642Arg="C0" />643<Description>644<C>IsIdentityCat1Group(C0)</C> is true when the head and tail maps of <C>C0</C>645are identity mappings.646<C>IsEndomorphismPreCat1Group(C0)</C> is true when the range of <C>C0</C>647is a subgroup of the source.648When this is not the case, replacing <M>t,h,e</M> by <M>t*e,h*e</M>649and the inclusion mapping of the image of <M>e</M> gives an isomorphic650cat1-group for which <C>IsEndomorphismPreCat1Group</C> is true.651</Description>652</ManSection>653<P/>654<Example>655<![CDATA[656gap> G2 := SmallGroup( 288, 956 ); SetName( G2, "G2" );657<pc group of size 288 with 7 generators>658gap> d12 := DihedralGroup( 12 ); SetName( d12, "d12" );659<pc group of size 12 with 3 generators>660gap> a1 := d12.1;; a2 := d12.2;; a3 := d12.3;; a0 := One( d12 );;661gap> gensG2 := GeneratorsOfGroup( G2 );;662gap> t2 := GroupHomomorphismByImages( G2, d12, gensG2,663> [ a0, a1*a3, a2*a3, a0, a0, a3, a0 ] );;664gap> h2 := GroupHomomorphismByImages( G2, d12, gensG2,665> [ a1*a2*a3, a0, a0, a2*a3, a0, a0, a3^2 ] );;666gap> e2 := GroupHomomorphismByImages( d12, G2, [a1,a2,a3],667> [ G2.1*G2.2*G2.4*G2.6^2, G2.3*G2.4*G2.6^2*G2.7, G2.6*G2.7^2 ] );668[ f1, f2, f3 ] -> [ f1*f2*f4*f6^2, f3*f4*f6^2*f7, f6*f7^2 ]669gap> C2 := PreCat1GroupByTailHeadEmbedding( t2, h2, e2 );670[G2=>d12]671gap> IsCat1Group( C2 );672true673gap> KnownPropertiesOfObject( C2 );674[ "CanEasilyCompareElements", "CanEasilySortElements", "IsDuplicateFree",675"IsGeneratorsOfSemigroup", "IsPreCat1Domain", "IsPerm2DimensionalGroup",676"IsPreCat1Group", "IsCat1Group", "IsEndomorphismPreCat1Group" ]677gap> IsEndomorphismPreCat1Group( C2 );678false679gap> EC4 := EndomorphismPreCat1Group( C4 );680[s4s4=>Group( [ (1,2,3,4)(5,6,7,8), (3,4)(7,8), (), () ] )]681]]>682</Example>683684685686<ManSection>687<Attr Name="Cat1GroupOfXMod"688Arg="X0" />689<Attr Name="XModOfCat1Group"690Arg="C0" />691<Attr Name="PreCat1GroupOfPreXMod"692Arg="P0" />693<Attr Name="PreXModOfPreCat1Group"694Arg="P0" />695<Description>696The category of crossed modules is equivalent to the category of cat1-groups,697and the functors between these two categories may be described as follows.698699Starting with the crossed module700<M>\mathcal{X} = (\partial : S \to R)</M> the group <M>G</M> is defined701as the semidirect product <M>G = R \ltimes S</M>702using the action from <M>\mathcal{X}</M>,703with multiplication rule704<Display>705(r_1,s_1)(r_2,s_2) ~=~ (r_1r_2,{s_1}^{r_2}s_2).706</Display>707The structural morphisms are given by708<Display>709t(r,s) = r, \quad h(r,s) = r (\partial s), \quad er = (r,1).710</Display>711On the other hand, starting with a cat1-group712<M> \mathcal{C} = (e;t,h : G \to R)</M>, we define713<M> S = \ker t</M>, the range <M>R</M> is unchanged, and714<M> \partial = h\!\mid_S </M>.715The action of <M>R</M> on <M>S</M> is conjugation in <M>G</M> via the embedding716of <M>R</M> in <M>G</M>.717</Description>718</ManSection>719<P/>720<Example>721<![CDATA[722gap> X2 := XModOfCat1Group( C2 );;723gap> Display( X2 );724725Crossed module X([G2=>d12]) :-726: Source group has generators:727[ f1, f4, f5, f7 ]728: Range group d12 has generators:729[ f1, f2, f3 ]730: Boundary homomorphism maps source generators to:731[ f1*f2*f3, f2*f3, <identity> of ..., f3^2 ]732: Action homomorphism maps range generators to automorphisms:733f1 --> { source gens --> [ f1*f5, f4*f5, f5, f7^2 ] }734f2 --> { source gens --> [ f1*f5*f7^2, f4, f5, f7 ] }735f3 --> { source gens --> [ f1*f7, f4, f5, f7 ] }736These 3 automorphisms generate the group of automorphisms.737: associated cat1-group is [G2=>d12]738739gap> StructureDescription(X2);740[ "D24", "D12" ]741742]]>743</Example>744</Section>745746747<Section Label="sect-cat1select">748<Heading>Selection of a small cat1-group</Heading>749<Index>selection of a small cat1-group</Index>750751The <C>Cat1Group</C> function may also be used to select a cat1-group752from a data file.753All cat1-structures on groups of size up to <M>70</M>754(ordered according to the &GAP; 4 numbering of small groups)755are stored in a list in file <F>cat1data.g</F>.756Global variables <C>CAT1&uscore;LIST&uscore;MAX&uscore;SIZE := 70</C> and757<C>CAT1&uscore;LIST&uscore;CLASS&uscore;SIZES</C> are also stored.758The data is read into the list <C>CAT1&uscore;LIST</C>759only when this function is called.760761<ManSection>762<Attr Name="Cat1Select"763Arg="size gpnum num" />764<Description>765The function <C>Cat1Select</C> may be used in three ways.766<C>Cat1Select( size )</C> returns the names of the groups with this size,767while <C>Cat1Select( size, gpnum )</C> prints a list of cat1-structures768for this chosen group.769<C>Cat1Select( size, gpnum, num )</C> returns the chosen cat1-group.770<P/>771The example below is the first case in which <M>t \neq h</M>772and the associated conjugation crossed module773is given by the normal subgroup <C>c3</C> of <C>s3</C>.774</Description>775</ManSection>776<P/>777<Example>778<![CDATA[779gap> ## check the number of groups of size 18780gap> L18 := Cat1Select( 18 );781Usage: Cat1Select( size, gpnum, num );782[ "D18", "C18", "C3 x S3", "(C3 x C3) : C2", "C6 x C3" ]783gap> ## check the number of cat1-structures on the fourth of these784gap> Cat1Select( 18, 4 );785Usage: Cat1Select( size, gpnum, num );786There are 4 cat1-structures for the group (C3 x C3) : C2.787Using small generating set [ f1, f2, f2*f3 ] for source of homs.788[ [range gens], [tail genimages], [head genimages] ] :-789(1) [ [ f1 ], [ f1, <identity> of ..., <identity> of ... ],790[ f1, <identity> of ..., <identity> of ... ] ]791(2) [ [ f1, f3 ], [ f1, <identity> of ..., f3 ],792[ f1, <identity> of ..., f3 ] ]793(3) [ [ f1, f3 ], [ f1, <identity> of ..., f3 ],794[ f1, f3^2, <identity> of ... ] ]795(4) [ [ f1, f2, f2*f3 ], tail = head = identity mapping ]7964797gap> ## select the third of these cat1-structures798gap> C18 := Cat1Group( 18, 4, 3 );799[(C3 x C3) : C2=>Group( [ f1, <identity> of ..., f3 ] )]800gap> ## convert from a pc-cat1-group to a permutation cat1-group801gap> iso18 := IsomorphismPermObject( C18 );;802gap> PC18 := Image( iso18 );;803gap> Display( PC18 );804Cat1-group :-805: Source group has generators:806[ (2,3)(5,6), (4,5,6), (1,2,3) ]807: Range group has generators:808[ (2,3), (), (1,2,3) ]809: tail homomorphism maps source generators to:810[ (2,3), (), (1,2,3) ]811: head homomorphism maps source generators to:812[ (2,3), (1,3,2), (1,2,3) ]813: range embedding maps range generators to:814[ (2,3)(5,6), (), (1,2,3) ]815: kernel has generators:816[ (4,5,6) ]817: boundary homomorphism maps generators of kernel to:818[ (1,3,2) ]819: kernel embedding maps generators of kernel to:820[ (4,5,6) ]821gap> convert the result to the associated permutation crossed module822gap> X18 := XModOfCat1Group( PC18 );;823gap> Display( X18 );824Crossed module:-825: Source group has generators:826[ (4,5,6) ]827: Range group has generators:828[ (2,3), (), (1,2,3) ]829: Boundary homomorphism maps source generators to:830[ (1,3,2) ]831: Action homomorphism maps range generators to automorphisms:832(2,3) --> { source gens --> [ (4,6,5) ] }833() --> { source gens --> [ (4,5,6) ] }834(1,2,3) --> { source gens --> [ (4,5,6) ] }835These 3 automorphisms generate the group of automorphisms.836: associated cat1-group is [..=>..]837]]>838</Example>839840<ManSection>841<Oper Name="AllCat1DataGroupsBasic"842Arg="gp" />843<Description>844For a group <M>G</M> of size greater than <M>70</M> which is reasonably845straightforward this function may be used to construct a list of all846cat1-group structures on <M>G</M>.847The operation also attempts to write output to a file in the folder848<F>xmod/lib</F>.849(Other operations in the file <F>cat1data.gi</F> have been used to deal850with the more complicated groups of size up to <M>70</M>,851but these are not described here.)852<P/>853Van Luyen Le has a more efficient algorithm, extending the data854up to groups of size 171, which is expected to appear in a future855release of <Package>HAP</Package>.856</Description>857</ManSection>858<P/>859<Example>860<![CDATA[861gap> gp := SmallGroup( 102, 2 );862<pc group of size 102 with 3 generators>863gap> StructureDescription( gp );864"C3 x D34"865gap> all := AllCat1DataGroupsBasic( gp );866#I Edit last line of .../xmod/lib/nn.kk.out to end with ] ] ] ] ]867[ [Group( [ f1, f2, f3 ] )=>Group( [ f1, <identity> of ..., <identity> of ...868] )], [Group( [ f1, f2, f3 ] )=>Group( [ f1, f2, <identity> of ... ] )],869[Group( [ f1, f2, f3 ] )=>Group( [ f1, <identity> of ..., f3 ] )],870[Group( [ f1, f2, f3 ] )=>Group( [ f1, f2, f3 ] )] ]871]]>872</Example>873874</Section>875876877<Section Label="sect-extra-fns">878<Heading>More functions for crossed modules and cat1-groups</Heading>879880Chapter <Ref Chap="chap-isclnc" /> contains functions for quotient881crossed modules; centre of a crossed module;882commutator and derived subcrossed modules; etc.883<P/>884Here we mention two functions for groups which have been extended to the885two-dimensional case.886<ManSection>887<Oper Name="IdGroup"888Arg="2DimensionalGroup" />889<Oper Name="StructureDescription"890Arg="2DimensionalGroup" />891<Description>892These functions return two-element lists formed by applying the function893to the source and range of the 2d-group.894</Description>895</ManSection>896<P/>897<Example>898<![CDATA[899gap> IdGroup( X2 );900[ [ 24, 6 ], [ 12, 4 ] ]901gap> StructureDescription( C2 );902[ "(S3 x D24) : C2", "D12" ]903]]>904</Example>905906907</Section>908909910911912</Chapter>913914915