  
  [1X8 [33X[0;0YCrossed squares and Cat[22X^2[122X[101X[1X-groups[133X[101X
  
  [33X[0;0YThe term [13X3d-group[113X refers to a set of equivalent categories of which the most
  common  are the categories of [13Xcrossed squares[113X and [13Xcat[22X^2[122X-groups[113X. A [13X3d-mapping[113X
  is a function between two 3d-groups which preserves all the structure.[133X
  
  [33X[0;0YThe  material  in  this  chapter  should be considered experimental. A major
  overhaul  took  place  in  time  for  [5XXMod[105X version 2.73, with the names of a
  number of operations being changed.[133X
  
  
  [1X8.1 [33X[0;0YDefinition of a crossed square and a crossed [22Xn[122X[101X[1X-cube of groups[133X[101X
  
  [33X[0;0YCrossed  squares were introduced by Guin-Waléry and Loday (see, for example,
  [BL87]) as fundamental crossed squares of commutative squares of spaces, but
  are also of purely algebraic interest. We denote by [22X[n][122X the set [22X{1,2,...,n}[122X.
  We use the [22Xn=2[122X version of the definition of crossed [22Xn[122X-cube as given by Ellis
  and Steiner [ES87].[133X
  
  [33X[0;0YA [13Xcrossed square[113X [22XcalS[122X consists of the following:[133X
  
  [30X    [33X[0;6Ygroups  [22XS_J[122X  for  each  of  the four subsets [22XJ ⊆ [2][122X (we often find it
        convenient to write [22XL = S_[2],~ M = S_{1},~ N = S_{2}[122X and [22XP = S_∅[122X);[133X
  
  [30X    [33X[0;6Ya commutative diagram of group homomorphisms:[133X
  
  
  [24X      [33X[0;6Y\ddot{\partial}_1  :  S_{[2]} \to S_{\{2\}}, \quad \ddot{\partial}_2 :
        S_{[2]}   \to   S_{\{1\}},  \quad  \dot{\partial}_2  :  S_{\{2\}}  \to
        S_{\emptyset}, \quad \dot{\partial}_1 : S_{\{1\}} \to S_{\emptyset}[133X
  
  [124X
  
        [33X[0;6Y(again  we  often write [22Xκ = ddot∂_1,~ λ = ddot∂_2,~ μ = dot∂_2[122X and [22Xν =
        dot∂_1[122X);[133X
  
  [30X    [33X[0;6Yactions  of  [22XS_∅[122X  on [22XS_{1}, S_{2}[122X and [22XS_[2][122X which determine actions of
        [22XS_{1}[122X  on [22XS_{2}[122X and [22XS_[2][122X via [22Xdot∂_1[122X and actions of [22XS_{2}[122X on [22XS_{1}[122X and
        [22XS_[2][122X via [22Xdot∂_2[122X;[133X
  
  [30X    [33X[0;6Ya function [22X⊠ : S_{1} × S_{2} -> S_[2][122X.[133X
  
  [33X[0;0YHere is a picture of the situation:[133X
  
  
  [24X[33X[0;6Y\vcenter{\xymatrix{      &     &     S_{[2]}     \ar[rr]^{\ddot{\partial}_1}
  \ar[dd]_{\ddot{\partial}_2}  &&  S_{\{2\}}  \ar[dd]^{\dot{\partial}_2}  && L
  \ar[rr]^{\kappa} \ar[dd]_{\lambda} && M \ar[dd]^{\mu} & \\ \mathcal{S} & = &
  &&  & = && \\ & & S_{\{1\}} \ar[rr]_{\dot{\partial}_1} && S_{\emptyset} && N
  \ar[rr]_{\nu} && P }}[133X
  
  [124X
  
  [33X[0;0YThe  following  axioms  must  be  satisfied  for  all  [22Xl ∈ L, m,m_1,m_2 ∈ M,
  n,n_1,n_2 ∈ N, p ∈ P[122X.[133X
  
  [30X    [33X[0;6YThe homomorphisms [22Xκ, λ[122X preserve the action of [22XP[122X.[133X
  
  [30X    [33X[0;6YEach  of  the  upper,  left-hand,  right-hand  and  lower sides of the
        square,[133X
  
  
  [24X      [33X[0;6Y\ddot{\calS}_1 = (\kappa : L \to M), \quad \ddot{\calS}_2 = (\lambda :
        L \to N), \quad \dot{\calS}_2 = (\mu : M \to P), \quad \dot{\calS}_1 =
        (\nu : N \to P),[133X
  
  [124X
  
        [33X[0;6Yand the diagonal[133X
  
  
  [24X      [33X[0;6Y\calS_{12}  = (\partial_{12} := \mu \circ \kappa = \nu \circ \lambda :
        L \to P)[133X
  
  [124X
  
        [33X[0;6Yare crossed modules (with actions via [22XP[122X).[133X
  
        [33X[0;6YThese  will  be  called the [13Xup, left, right, down[113X and [13Xdiagonal[113X crossed
        modules of [22XcalS[122X.[133X
  
  [30X    [33X[0;6Y[22X⊠[122X is a [13Xcrossed pairing[113X:[133X
  
        [30X    [33X[0;12Y[22X(n_1n_2 ⊠ m) = (n_1 ⊠ m)^n_2 (n_2 ⊠ m)[122X,[133X
  
        [30X    [33X[0;12Y[22X(n ⊠ m_1m_2) = (n ⊠ m_2) (n ⊠ m_1)^m_2[122X,[133X
  
        [30X    [33X[0;12Y[22X(n ⊠ m)^p = (n^p ⊠ m^p)[122X.[133X
  
  [30X    [33X[0;6Y[22Xκ(n ⊠ m) = (m^-1)^n m quad mboxand quad λ(n ⊠ m) = n^-1 n^m[122X.[133X
  
  [30X    [33X[0;6Y[22X(n ⊠ κ l) = (l^-1)^n l quad mboxand quad (λ l ⊠ m) = l^-1 l^m[122X.[133X
  
  [33X[0;0YNote that the actions of [22XM[122X on [22XN[122X and [22XN[122X on [22XM[122X via [22XP[122X are compatible since[133X
  
  
  [24X[33X[0;6Y{n_1}^{(m^n)}  \;=\;  {n_1}^{\mu(m^n)}  \;=\;  {n_1}^{n^{-1}(\mu  m)n} \;=\;
  (({n_1}^{n^{-1}})^m)^n.[133X
  
  [124X
  
  [33X[0;0YA  [13Xprecrossed  square[113X  is a similar structure which satisfies some subset of
  these  axioms.  (This  theoretical  notion  needs  to be clarified.) In this
  implementation  [10XIsPreCrossedSquare[110X  only  checks  that  the five pre-crossed
  modules  fit  together correctly and that [22X(κ,ν)[122X and [22X(λ,μ)[122X are both morphisms
  of pre-crossed modules.[133X
  
  [33X[0;0YCrossed  squares  are the [22Xn=2[122X case of a crossed [22Xn[122X-cube of groups, defined as
  follows.  (This  is an attempt to translate Definition 2.1 in Ronnie Brown's
  [13XComputing  homotopy types using crossed n-cubes of groups[113X into right actions
  -- but this definition is not yet completely understood!)[133X
  
  [33X[0;0YA [13Xcrossed[113X [22Xn[122X[13X-cube of groups[113X consists of the following:[133X
  
  [30X    [33X[0;6Ygroups [22XS_A[122X for every subset [22XA ⊆ [n][122X;[133X
  
  [30X    [33X[0;6Ya commutative diagram of group homomorphisms [22X∂_i : S_A -> S_A ∖ {i}, i
        ∈ [n][122X; with composites [22X∂_B : S_A -> S_A ∖ B, B ⊆ [n][122X;[133X
  
  [30X    [33X[0;6Yactions  of  [22XS_∅[122X  on each [22XS_A[122X; and hence actions of [22XS_B[122X on [22XS_A[122X via [22X∂_B[122X
        for each [22XB ⊆ [n][122X;[133X
  
  [30X    [33X[0;6Yfunctions [22X⊠_A,B : S_A × S_B -> S_A ∪ B, (A,B ⊆ [n])[122X.[133X
  
  [33X[0;0YThere is then a long list of axioms which must be satisfied.[133X
  
  
  [1X8.2 [33X[0;0YConstructions for crossed squares[133X[101X
  
  [33X[0;0YAnalogously  to the data structure used for crossed modules, crossed squares
  are implemented as [10X3d-groups[110X. There are also experimental implementations of
  cat[22X^2[122X-groups,  with  conversion  between  the  two  types of structure. Some
  standard  constructions  of  crossed squares are listed below. At present, a
  limited number of constructions is implemented. Morphisms of crossed squares
  have also been implemented, though there is still a great deal to be done.[133X
  
  [1X8.2-1 CrossedSquareByXMods[101X
  
  [33X[1;0Y[29X[2XCrossedSquareByXMods[102X( [3Xup[103X, [3Xleft[103X, [3Xright[103X, [3Xdown[103X, [3Xdiag[103X, [3Xpairing[103X ) [32X operation[133X
  [33X[1;0Y[29X[2XPreCrossedSquareByPreXMods[102X( [3Xup[103X, [3Xleft[103X, [3Xright[103X, [3Xdown[103X, [3Xdiag[103X, [3Xpairing[103X ) [32X operation[133X
  
  [33X[0;0YIf  [13Xup,left,right,down,diag[113X are five (pre-)crossed modules whose sources and
  ranges  agree,  as  above,  then  we  just  have to add a crossed pairing to
  complete the data for a (pre-)crossed square.[133X
  
  [33X[0;0YThe [10XDisplay[110X function is used to print details of 3d-groups.[133X
  
  [33X[0;0YWe  take  as  our example a simple, but significant case. We start with five
  crossed   modules   formed   from   subgroups   of   [22XD_8[122X   with   generators
  [22X[(1,2,3,4),(3,4)[122X.  The result is a pre-crossed square which is [13Xnot[113X a crossed
  square.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27Xb := (2,4);; c := (1,2)(3,4);; p := (1,2,3,4);; [127X[104X
    [4X[25Xgap>[125X [27Xd8 := Group( b, c );; [127X[104X
    [4X[25Xgap>[125X [27XSetName( d8, "d8" );; [127X[104X
    [4X[25Xgap>[125X [27XL := Subgroup( d8, [p^2] );; [127X[104X
    [4X[25Xgap>[125X [27XM := Subgroup( d8, [b] );; [127X[104X
    [4X[25Xgap>[125X [27XN := Subgroup( d8, [c] );; [127X[104X
    [4X[25Xgap>[125X [27XP := TrivialSubgroup( d8 );; [127X[104X
    [4X[25Xgap>[125X [27Xkappa := GroupHomomorphismByImages( L, M, [p^2], [b] );; [127X[104X
    [4X[25Xgap>[125X [27Xlambda := GroupHomomorphismByImages( L, N, [p^2], [c] );; [127X[104X
    [4X[25Xgap>[125X [27Xdelta := GroupHomomorphismByImages( L, P, [p^2], [()] );; [127X[104X
    [4X[25Xgap>[125X [27Xmu := GroupHomomorphismByImages( M, P, [b], [()] );; [127X[104X
    [4X[25Xgap>[125X [27Xnu := GroupHomomorphismByImages( N, P, [c], [()] );; [127X[104X
    [4X[25Xgap>[125X [27Xup := XModByTrivialAction( kappa );; [127X[104X
    [4X[25Xgap>[125X [27Xleft := XModByTrivialAction( lambda );; [127X[104X
    [4X[25Xgap>[125X [27Xdiag := XModByTrivialAction( delta );; [127X[104X
    [4X[25Xgap>[125X [27Xright := XModByTrivialAction( mu );; [127X[104X
    [4X[25Xgap>[125X [27Xdown := XModByTrivialAction( nu );; [127X[104X
    [4X[25Xgap>[125X [27Xxp := CrossedPairingByCommutators( N, M, L );; [127X[104X
    [4X[25Xgap>[125X [27XPrint( "xp([c,b]) = ", xp( c, b ), "\n" ); [127X[104X
    [4X[28Xxp([c,b]) = (1,3)(2,4)[128X[104X
    [4X[25Xgap>[125X [27XPXS := PreCrossedSquareByPreXMods( up, left, right, down, diag, xp );;[127X[104X
    [4X[25Xgap>[125X [27XDisplay( PXS ); [127X[104X
    [4X[28X(pre-)crossed square with (pre-)crossed modules:[128X[104X
    [4X[28X      up = [Group( [ (1,3)(2,4) ] ) -> Group( [ (2,4) ] )][128X[104X
    [4X[28X    left = [Group( [ (1,3)(2,4) ] ) -> Group( [ (1,2)(3,4) ] )][128X[104X
    [4X[28X   right = [Group( [ (2,4) ] ) -> Group( () )][128X[104X
    [4X[28X    down = [Group( [ (1,2)(3,4) ] ) -> Group( () )][128X[104X
    [4X[25Xgap>[125X [27XIsCrossedSquare( PXS ); [127X[104X
    [4X[28Xfalse[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X8.2-2 Size3d[101X
  
  [33X[1;0Y[29X[2XSize3d[102X( [3XXS[103X ) [32X attribute[133X
  
  [33X[0;0YJust  as  [10XSize2d[110X was used in place of [10XSize[110X for crossed modules, so [10XSize3d[110X is
  used  for  crossed  squares:  [10XSize3d(  XS  )[110X  returns  a  four-element  list
  containing the sizes of the four groups at the corners of the square.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XSize3d( PXS ); [127X[104X
    [4X[28X[ 2, 2, 2, 1 ][128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X8.2-3 CrossedSquareByNormalSubgroups[101X
  
  [33X[1;0Y[29X[2XCrossedSquareByNormalSubgroups[102X( [3XL[103X, [3XM[103X, [3XN[103X, [3XP[103X ) [32X operation[133X
  [33X[1;0Y[29X[2XCrossedPairingByCommutators[102X( [3XN[103X, [3XM[103X, [3XL[103X ) [32X operation[133X
  
  [33X[0;0YIf  [22XL, M, N[122X are normal subgroups of a group [22XP[122X, and [22X[M,N] leqslant L leqslant
  M  ∩ N[122X, then the four inclusions [22XL -> M,~ L -> N,~ M -> P,~ N -> P[122X, together
  with  the  actions  of  [22XP[122X on [22XM, N[122X and [22XL[122X given by conjugation, form a crossed
  square with crossed pairing[133X
  
  
  [24X[33X[0;6Y\boxtimes  \;:\;  N  \times  M  \to  L,  \quad  (n,m)  \mapsto  [n,m]  \,=\,
  n^{-1}m^{-1}nm \,=\,(m^{-1})^nm \,=\, n^{-1}n^m\,.[133X
  
  [124X
  
  [33X[0;0YThis  construction is implemented as [10XCrossedSquareByNormalSubgroups(L,M,N,P)[110X
  (note that the parent group comes last).[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27Xd20 := DihedralGroup( IsPermGroup, 20 );;[127X[104X
    [4X[25Xgap>[125X [27Xgend20 := GeneratorsOfGroup( d20 ); [127X[104X
    [4X[28X[ (1,2,3,4,5,6,7,8,9,10), (2,10)(3,9)(4,8)(5,7) ][128X[104X
    [4X[25Xgap>[125X [27Xp1 := gend20[1];;  p2 := gend20[2];;  p12 := p1*p2; [127X[104X
    [4X[28X(1,10)(2,9)(3,8)(4,7)(5,6)[128X[104X
    [4X[25Xgap>[125X [27Xd10a := Subgroup( d20, [ p1^2, p2 ] );;[127X[104X
    [4X[25Xgap>[125X [27Xd10b := Subgroup( d20, [ p1^2, p12 ] );;[127X[104X
    [4X[25Xgap>[125X [27Xc5d := Subgroup( d20, [ p1^2 ] );;[127X[104X
    [4X[25Xgap>[125X [27XSetName( d20, "d20" );  SetName( d10a, "d10a" ); [127X[104X
    [4X[25Xgap>[125X [27XSetName( d10b, "d10b" );  SetName( c5d, "c5d" ); [127X[104X
    [4X[25Xgap>[125X [27XXSconj := CrossedSquareByNormalSubgroups( c5d, d10a, d10b, d20 );[127X[104X
    [4X[28X[  c5d -> d10a ][128X[104X
    [4X[28X[   |      |   ][128X[104X
    [4X[28X[ d10b -> d20  ][128X[104X
    [4X[25Xgap>[125X [27Xxpc := CrossedPairing( XSconj );;[127X[104X
    [4X[25Xgap>[125X [27Xxpc( p12, p2 );[127X[104X
    [4X[28X(1,3,5,7,9)(2,4,6,8,10)[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X8.2-4 CrossedSquareByNormalSubXMod[101X
  
  [33X[1;0Y[29X[2XCrossedSquareByNormalSubXMod[102X( [3XX0[103X, [3XX1[103X ) [32X operation[133X
  [33X[1;0Y[29X[2XCrossedPairingBySingleXModAction[102X( [3XX0[103X, [3XX1[103X ) [32X operation[133X
  
  [33X[0;0YIf  [22XcalX_1  =  (∂_1 : S_1 -> R_1)[122X is a normal sub-crossed module of [22XcalX_0 =
  (∂_0  :  S_0 -> R_0)[122X then the inclusion morphism gives a crossed square with
  crossed pairing[133X
  
  
  [24X[33X[0;6Y\boxtimes   \;:\;   R_1   \times   S_0  \to  S_1,  \quad  (r_1,s_0)  \mapsto
  (s_0^{-1})^{r_1} s_0.[133X
  
  [124X
  
  [33X[0;0YThe   example  constructs  the  same  crossed  square  as  in  the  previous
  subsection.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XX20 := XModByNormalSubgroup( d20, d10a );; [127X[104X
    [4X[25Xgap>[125X [27XX10 := XModByNormalSubgroup( d10b, c5d );; [127X[104X
    [4X[25Xgap>[125X [27Xok := IsNormalSub2DimensionalDomain( X20, X10 ); [127X[104X
    [4X[28Xtrue [128X[104X
    [4X[25Xgap>[125X [27XXS20 := CrossedSquareByNormalSubXMod( X20, X10 ); [127X[104X
    [4X[28X[  c5d -> d10a ][128X[104X
    [4X[28X[   |      |   ][128X[104X
    [4X[28X[ d10b -> d20  ][128X[104X
    [4X[25Xgap>[125X [27Xxp20 := CrossedPairing( XS20 );; [127X[104X
    [4X[25Xgap>[125X [27Xxp20( p1^2, p2 );[127X[104X
    [4X[28X(1,7,3,9,5)(2,8,4,10,6)[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X8.2-5 ActorCrossedSquare[101X
  
  [33X[1;0Y[29X[2XActorCrossedSquare[102X( [3XX0[103X ) [32X attribute[133X
  [33X[1;0Y[29X[2XCrossedPairingByDerivations[102X( [3XX0[103X ) [32X operation[133X
  
  [33X[0;0YThe  actor  [22XcalA(calX_0)[122X  of  a  crossed module [22XcalX_0[122X has been described in
  Chapter 5 (see [2XActorXMod[102X ([14X6.1-2[114X)). The crossed pairing is given by[133X
  
  
  [24X[33X[0;6Y\boxtimes \;:\; R \times W \,\to\, S, \quad (r,\chi) \,\mapsto\, \chi r~.[133X
  
  [124X
  
  [33X[0;0YThis is implemented as [10XActorCrossedSquare(X0)[110X.[133X
  
  [33X[0;0YThe example constructs [10XXSact[110X, the actor crossed square of the crossed module
  [10XX20[110X.  This  crossed  square  is  converted to a cat[22X^2[122X-group [10XC2act[110X in section
  [14X8.5-7[114X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XXSact := ActorCrossedSquare( X20 );[127X[104X
    [4X[28Xcrossed square with crossed modules:[128X[104X
    [4X[28X      up = Whitehead[d10a->d20][128X[104X
    [4X[28X    left = [d10a->d20][128X[104X
    [4X[28X   right = Actor[d10a->d20][128X[104X
    [4X[28X    down = Norrie[d10a->d20][128X[104X
    [4X[25Xgap>[125X [27XW := Range( Up2DimensionalGroup( XSact ) );[127X[104X
    [4X[28XGroup([ (2,5)(3,4), (2,3,5,4), (1,4,2,5,3) ])[128X[104X
    [4X[25Xgap>[125X [27XStructureDescription( W );[127X[104X
    [4X[28X"C5 : C4"[128X[104X
    [4X[25Xgap>[125X [27Xxpa := CrossedPairing( XSact );;[127X[104X
    [4X[25Xgap>[125X [27Xxpa( p1, (2,3,5,4) );[127X[104X
    [4X[28X(1,7,3,9,5)(2,8,4,10,6)[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X8.2-6 CrossedSquareByAutomorphismGroup[101X
  
  [33X[1;0Y[29X[2XCrossedSquareByAutomorphismGroup[102X( [3XG[103X ) [32X operation[133X
  [33X[1;0Y[29X[2XCrossedPairingByConjugators[102X( [3XG[103X ) [32X operation[133X
  
  [33X[0;0YFor [22XG[122X a group let [22XInn(G)[122X be its inner automorphism group and [22XAut(G)[122X its full
  automorphism   group.   Then   there   is   a  crossed  square  with  groups
  [22X[G,Inn(G),Inn(G),Aut(G)][122X  where the upper and left boundaries are the maps [22Xg
  ↦ ι_g[122X, where [22Xι_g[122X is conjugation of [22XG[122X by [22Xg[122X, and the right and down boundaries
  are inclusions. The crossed pairing is gived by [22Xι_g ⊠ ι_h = [g,h][122X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XAXS20 := CrossedSquareByAutomorphismGroup( d20 );[127X[104X
    [4X[28X[      d20 -> Inn(d20) ][128X[104X
    [4X[28X[     |          |     ][128X[104X
    [4X[28X[ Inn(d20) -> Aut(d20) ][128X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XStructureDescription( AXS20 );[127X[104X
    [4X[28X[ "D20", "D10", "D10", "C2 x (C5 : C4)" ][128X[104X
    [4X[25Xgap>[125X [27XI20 := Range( Up2DimensionalGroup( AXS20 ) );;[127X[104X
    [4X[25Xgap>[125X [27XgenI20 := GeneratorsOfGroup( I20 );           [127X[104X
    [4X[28X[ ^(1,2,3,4,5,6,7,8,9,10), ^(2,10)(3,9)(4,8)(5,7) ][128X[104X
    [4X[25Xgap>[125X [27Xxpi := CrossedPairing( AXS20 );;[127X[104X
    [4X[25Xgap>[125X [27Xxpi( genI20[1], genI20[2] );[127X[104X
    [4X[28X(1,9,7,5,3)(2,10,8,6,4)[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X8.2-7 CrossedSquareByPullback[101X
  
  [33X[1;0Y[29X[2XCrossedSquareByPullback[102X( [3XX1[103X, [3XX2[103X ) [32X operation[133X
  
  [33X[0;0YIf  crossed  modules  [22XcalX_1 = (ν : N -> P)[122X and [22XcalX_2 = (μ : M -> P)[122X have a
  common range [22XP[122X, let [22XL[122X be the pullback of [22X{ν,μ}[122X. Then [22XN[122X acts on [22XL[122X by [22X(n,m)^n'
  =  (n^n',m^ν  n')[122X, and [22XM[122X acts on [22XL[122X by [22X(n,m)^m' = (n^μ m', m^m')[122X. So [22X(π_1 : L
  ->  N)[122X  and  [22X(π_2  :  L -> M)[122X are crossed modules, where [22Xπ_1,π_2[122X are the two
  projections. The crossed pairing is given by:[133X
  
  
  [24X[33X[0;6Y\boxtimes  \;:\;  N  \times  M  \to L, \quad (n,m) \mapsto (n^{-1}n^{\mu m},
  (m^{-1})^{\nu n}m) .[133X
  
  [124X
  
  [33X[0;0YThe   second  example  below  uses  the  central  extension  crossed  module
  [10XX12=(D12->S3)[110X  which  was  constructed in subsection ([2XXModByCentralExtension[102X
  ([14X2.1-5[114X)), with pullback group [10XD12xC2[110X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27Xdn := Down2DimensionalGroup( XSconj );;[127X[104X
    [4X[25Xgap>[125X [27Xrt := Right2DimensionalGroup( XSconj );;[127X[104X
    [4X[25Xgap>[125X [27XXSP := CrossedSquareByPullback( dn, rt ); [127X[104X
    [4X[28X[ (d10b x_d20 d10a) -> d10a ][128X[104X
    [4X[28X[         |             |   ][128X[104X
    [4X[28X[              d10b -> d20  ][128X[104X
    [4X[25Xgap>[125X [27XStructureDescription( XSP );                  [127X[104X
    [4X[28X[ "C5", "D10", "D10", "D20" ][128X[104X
    [4X[25Xgap>[125X [27XXS12 := CrossedSquareByPullback( X12, X12 );; [127X[104X
    [4X[25Xgap>[125X [27XStructureDescription( XS12 );                  [127X[104X
    [4X[28X[ "C2 x C2 x S3", "D12", "D12", "S3" ][128X[104X
    [4X[25Xgap>[125X [27Xxp12 := CrossedPairing( XS12 );; [127X[104X
    [4X[25Xgap>[125X [27Xxp12( (1,2,3,4,5,6), (2,6)(3,5) );[127X[104X
    [4X[28X(1,5,3)(2,6,4)(7,11,9)(8,12,10)[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X8.2-8 CrossedSquareByXModSplitting[101X
  
  [33X[1;0Y[29X[2XCrossedSquareByXModSplitting[102X( [3XX0[103X ) [32X attribute[133X
  [33X[1;0Y[29X[2XCrossedPairingByPreImages[102X( [3XX1[103X, [3XX2[103X ) [32X operation[133X
  
  [33X[0;0YFor  [22XcalX = (∂ : S -> R)[122X let [22XQ[122X be the image of [22X∂[122X. Then [22X∂ = ∂' ∘ ι[122X where [22X∂' :
  S  -> Q[122X and [22Xι[122X is the inclusion of [22XQ[122X in [22XR[122X. The diagonal of the square is then
  the  initial  [22XcalX[122X,  and  the  crossed  pairing  is  given by commutators of
  preimages.[133X
  
  [33X[0;0YA particular case is when [22XS[122X is an [22XR[122X-module [22XA[122X and [22X∂[122X is the zero map.[133X
  
  
  [24X[33X[0;6Y\vcenter{\xymatrix{    &   &   S   \ar[rr]^{\partial'}   \ar[dd]_{\partial'}
  \ar[rrdd]^{\partial}   &&   Q   \ar[dd]^{\iota}  &&  A  \ar[rr]^0  \ar[dd]_0
  \ar[rrdd]^0  &&  1 \ar[dd]^{\iota} & \\ & & && & && \\ & & Q \ar[rr]_{\iota}
  && R && 1 \ar[rr]_{\iota} && R }}[133X
  
  [124X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27Xk4 := Group( (1,2), (3,4) );;[127X[104X
    [4X[25Xgap>[125X [27XAX4 := XModByAutomorphismGroup( k4 );;[127X[104X
    [4X[25Xgap>[125X [27XX4 := Image( IsomorphismPermObject( AX4 ) );;[127X[104X
    [4X[25Xgap>[125X [27XXSS4 := CrossedSquareByXModSplitting( X4 );;[127X[104X
    [4X[25Xgap>[125X [27XStructureDescription( XSS4 );[127X[104X
    [4X[28X[ "C2 x C2", "1", "1", "S3" ][128X[104X
    [4X[25Xgap>[125X [27XXSS20 := CrossedSquareByXModSplitting( X20 );;[127X[104X
    [4X[25Xgap>[125X [27Xup20 := Up2DimensionalGroup( XSS20 );; [127X[104X
    [4X[25Xgap>[125X [27XRange( up20 ) = d10a; [127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XSetName( Range( up20 ), "d10a" ); [127X[104X
    [4X[25Xgap>[125X [27XName( XSS20 );;[127X[104X
    [4X[25Xgap>[125X [27XXSS20;[127X[104X
    [4X[28X[d10a->d10a,d10a->d20][128X[104X
    [4X[25Xgap>[125X [27Xxps := CrossedPairing( XSS20 );;[127X[104X
    [4X[25Xgap>[125X [27Xxps( p1^2, p2 );[127X[104X
    [4X[28X(1,7,3,9,5)(2,8,4,10,6)[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X8.2-9 CrossedSquare[101X
  
  [33X[1;0Y[29X[2XCrossedSquare[102X( [3Xargs[103X ) [32X function[133X
  
  [33X[0;0YThe  function  [10XCrossedSquare[110X  may  be used to call some of the constructions
  described in the previous subsections.[133X
  
  [30X    [33X[0;6Y[10XCrossedSquare(X0)[110X calls [10XCrossedSquareByXModSplitting[110X.[133X
  
  [30X    [33X[0;6Y[10XCrossedSquare(C0)[110X calls [10XCrossedSquareOfCat2Group[110X.[133X
  
  [30X    [33X[0;6Y[10XCrossedSquare(X0,X1)[110X  calls  [10XCrossedSquareByPullback[110X  when  there is a
        common range.[133X
  
  [30X    [33X[0;6Y[10XCrossedSquare(X0,X1)[110X calls [10XCrossedSquareByNormalXMod[110X when [10XX1[110X is normal
        in [10XX0[110X .[133X
  
  [30X    [33X[0;6Y[10XCrossedSquare(L,M,N,P)[110X calls [10XCrossedSquareByNormalSubgroups[110X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27Xdiag := Diagonal2DimensionalGroup( AXS20 );[127X[104X
    [4X[28X[d20->Aut(d20)][128X[104X
    [4X[25Xgap>[125X [27XXSdiag := CrossedSquare( diag );;      [127X[104X
    [4X[25Xgap>[125X [27XStructureDescription( XSdiag );  [127X[104X
    [4X[28X[ "D20", "D10", "D10", "C2 x (C5 : C4)" ][128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X8.2-10 Transpose3DimensionalGroup[101X
  
  [33X[1;0Y[29X[2XTranspose3DimensionalGroup[102X( [3XS0[103X ) [32X attribute[133X
  
  [33X[0;0YThe  [13Xtranspose[113X  of  a  crossed  square  [22XcalS[122X is the crossed square [22XtildecalS[122X
  obtained  by  interchanging  [22XM[122X  with  [22XN[122X, [22Xκ[122X with [22Xλ[122X, and [22Xν[122X with [22Xμ[122X. The crossed
  pairing is given by[133X
  
  
  [24X[33X[0;6Y\tilde{\boxtimes}   \;:\;   M  \times  N  \to  L,  \quad  (m,n)  \;\mapsto\;
  m\,\tilde{\boxtimes}\,n := (n \boxtimes m)^{-1}~.[133X
  
  [124X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XXStrans := Transpose3DimensionalGroup( XSconj ); [127X[104X
    [4X[28X[  c5d -> d10b ][128X[104X
    [4X[28X[   |      |   ][128X[104X
    [4X[28X[ d10a -> d20  ][128X[104X
    [4X[28X[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X8.2-11 CentralQuotient[101X
  
  [33X[1;0Y[29X[2XCentralQuotient[102X( [3XX0[103X ) [32X attribute[133X
  
  [33X[0;0YThe  central quotient of a crossed module [22XcalX = (∂ : S -> R)[122X is the crossed
  square where:[133X
  
  [30X    [33X[0;6Ythe left crossed module is [22XcalX[122X;[133X
  
  [30X    [33X[0;6Ythe  right crossed module is the quotient [22XcalX/Z(calX)[122X (see [2XCentreXMod[102X
        ([14X4.1-7[114X));[133X
  
  [30X    [33X[0;6Ythe  up  and down homomorphisms are the natural homomorphisms onto the
        quotient groups;[133X
  
  [30X    [33X[0;6Ythe  crossed pairing [22X⊠ : (R × F) -> S[122X, where [22XF = Fix(calX,S,R)[122X, is the
        displacement   element   [22X⊠(r,Fs)  =  ⟨  r,s  ⟩  =  (s^-1)^rsquad[122X  (see
        [2XDisplacement[102X ([14X4.1-3[114X) and section [14X4.3[114X).[133X
  
  [33X[0;0YThis     is     the     special     case    of    an    intended    function
  [10XCrossedSquareByCentralExtension[110X  which  has not yet been implemented. In the
  example [10XXn7[110X [22X⊴[122X [10XX24[110X, constructed in section [14X4.1[114X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27Xpos7 := Position( ids, [ [12,2], [24,5] ] );;[127X[104X
    [4X[25Xgap>[125X [27XXn7 := nsx[pos7];; [127X[104X
    [4X[25Xgap>[125X [27XIdGroup( Xn7 );[127X[104X
    [4X[28X[ [ 12, 2 ], [ 24, 5 ] ][128X[104X
    [4X[25Xgap>[125X [27XIdGroup( CentreXMod( Xn7 ) );  [127X[104X
    [4X[28X[ [ 4, 1 ], [ 4, 1 ] ][128X[104X
    [4X[25Xgap>[125X [27XCQXn7 := CentralQuotient( Xn7 );;[127X[104X
    [4X[25Xgap>[125X [27XStructureDescription( CQXn7 );[127X[104X
    [4X[28X[ "C12", "C3", "C4 x S3", "S3" ][128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X8.2-12 IsCrossedSquare[101X
  
  [33X[1;0Y[29X[2XIsCrossedSquare[102X( [3Xobj[103X ) [32X property[133X
  [33X[1;0Y[29X[2XIsPreCrossedSquare[102X( [3Xobj[103X ) [32X property[133X
  [33X[1;0Y[29X[2XIs3dObject[102X( [3Xobj[103X ) [32X property[133X
  [33X[1;0Y[29X[2XIsPerm3dObject[102X( [3Xobj[103X ) [32X property[133X
  [33X[1;0Y[29X[2XIsPc3dObject[102X( [3Xobj[103X ) [32X property[133X
  [33X[1;0Y[29X[2XIsFp3dObject[102X( [3Xobj[103X ) [32X property[133X
  
  [33X[0;0YThese  are  the  basic  properties  for  3d-groups,  and  crossed squares in
  particular.[133X
  
  [1X8.2-13 Up2DimensionalGroup[101X
  
  [33X[1;0Y[29X[2XUp2DimensionalGroup[102X( [3XXS[103X ) [32X attribute[133X
  [33X[1;0Y[29X[2XLeft2DimensionalGroup[102X( [3XXS[103X ) [32X attribute[133X
  [33X[1;0Y[29X[2XDown2DimensionalGroup[102X( [3XXS[103X ) [32X attribute[133X
  [33X[1;0Y[29X[2XRight2DimensionalGroup[102X( [3XXS[103X ) [32X attribute[133X
  [33X[1;0Y[29X[2XCrossDiagonalActions[102X( [3XXS[103X ) [32X attribute[133X
  [33X[1;0Y[29X[2XDiagonal2DimensionalGroup[102X( [3XXS[103X ) [32X attribute[133X
  [33X[1;0Y[29X[2XName[102X( [3XS0[103X ) [32X method[133X
  
  [33X[0;0YThese  are  the  basic  attributes of a crossed square [22XcalS[122X. The six objects
  used in the construction of [22XcalS[122X are the four crossed modules (2d-groups) on
  the sides of the square (up; left; right and down); the diagonal action of [22XP[122X
  on  [22XL[122X;  and  the  crossed  pairing [22X{M,N} -> L[122X (see the next subsection). The
  diagonal crossed module [22X(L -> P)[122X is an additional attribute.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XUp2DimensionalGroup( XSconj );[127X[104X
    [4X[28X[c5d->d10a][128X[104X
    [4X[25Xgap>[125X [27XRight2DimensionalGroup( XSact );[127X[104X
    [4X[28XActor[d10a->d20][128X[104X
    [4X[25Xgap>[125X [27XName( XSconj ); [127X[104X
    [4X[28X"[c5d->d10a,d10b->d20]"[128X[104X
    [4X[25Xgap>[125X [27Xcross1 := CrossDiagonalActions( XSconj )[1];; [127X[104X
    [4X[25Xgap>[125X [27Xgensa := GeneratorsOfGroup( d10a );; [127X[104X
    [4X[25Xgap>[125X [27Xgensb := GeneratorsOfGroup( d10a );; [127X[104X
    [4X[25Xgap>[125X [27Xact1 := ImageElm( cross1, gensb[1] );;[127X[104X
    [4X[25Xgap>[125X [27Xgensa[2]; ImageElm( act1, gensa[2] );[127X[104X
    [4X[28X(2,10)(3,9)(4,8)(5,7)[128X[104X
    [4X[28X(1,5)(2,4)(6,10)(7,9)[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X8.2-14 IsSymmetric3DimensionalGroup[101X
  
  [33X[1;0Y[29X[2XIsSymmetric3DimensionalGroup[102X( [3Xobj[103X ) [32X property[133X
  [33X[1;0Y[29X[2XIsAbelian3DimensionalGroup[102X( [3Xobj[103X ) [32X property[133X
  [33X[1;0Y[29X[2XIsTrivialAction3DimensionalGroup[102X( [3Xobj[103X ) [32X property[133X
  [33X[1;0Y[29X[2XIsNormalSub3DimensionalGroup[102X( [3Xobj[103X ) [32X property[133X
  [33X[1;0Y[29X[2XIsCentralExtension3DimensionalGroup[102X( [3Xobj[103X ) [32X property[133X
  [33X[1;0Y[29X[2XIsAutomorphismGroup3DimensionalGroup[102X( [3Xobj[103X ) [32X property[133X
  
  [33X[0;0YThese   are  further  properties  for  3d-groups,  and  crossed  squares  in
  particular.  A  3d-group is [13Xsymmetric[113X if its [10XUp2DimensionalGroup[110X is equal to
  its [10XLeft2DimensionalGroup[110X.[133X
  
  [1X8.2-15 Crossed Pairing[101X
  
  [33X[1;0Y[29X[2XCrossed Pairing[102X( [3XXS[103X ) [32X attribute[133X
  
  [33X[0;0YCrossed  pairings have been implemented as functions of two variables, [22X{M,N}
  ->  L[122X.  (Up  until  version 2.92 a more complicated two-variable mapping was
  used.)[133X
  
  [33X[0;0YThe first example shows the crossed pairing in the crossed square [10XXSconj[110X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27Xxp := CrossedPairing( XSconj );;[127X[104X
    [4X[25Xgap>[125X [27Xxp( (1,6)(2,5)(3,4)(7,10)(8,9), (1,5)(2,4)(6,9)(7,8) );[127X[104X
    [4X[28X(1,7,8,5,3)(2,9,10,6,4)[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [33X[0;0YThe second example shows how to construct a crossed pairing.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XF := FreeGroup(1);;[127X[104X
    [4X[25Xgap>[125X [27Xx := GeneratorsOfGroup(F)[1];;[127X[104X
    [4X[25Xgap>[125X [27Xz := GroupHomomorphismByImages( F, F, [x], [x^0] );;[127X[104X
    [4X[25Xgap>[125X [27Xid := GroupHomomorphismByImages( F, F, [x], [x] );;[127X[104X
    [4X[25Xgap>[125X [27Xh := function(n,m)[127X[104X
    [4X[25X>[125X [27X            return x^(ExponentSumWord(n,x)*ExponentSumWord(m,x));[127X[104X
    [4X[25X>[125X [27X        end;;[127X[104X
    [4X[25Xgap>[125X [27Xh( x^3, x^4 );[127X[104X
    [4X[28Xf1^12[128X[104X
    [4X[25Xgap>[125X [27XA := AutomorphismGroup( F );;[127X[104X
    [4X[25Xgap>[125X [27Xa := GeneratorsOfGroup(A)[1];;[127X[104X
    [4X[25Xgap>[125X [27Xact := GroupHomomorphismByImages( F, A, [x], [a^2] );;[127X[104X
    [4X[25Xgap>[125X [27XX0 := XModByBoundaryAndAction( z, act );;[127X[104X
    [4X[25Xgap>[125X [27XX1 := XModByBoundaryAndAction( id, act );;[127X[104X
    [4X[25Xgap>[125X [27XXSF := PreCrossedSquareByPreXMods( X0, X0, X1, X1, X0, h );; [127X[104X
    [4X[25Xgap>[125X [27XIsCrossedSquare( XSF ); [127X[104X
    [4X[28Xtrue[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  
  [1X8.3 [33X[0;0YSubstructures of Crossed Squares[133X[101X
  
  [33X[0;0YTo specify a sub-crossed square of [22XcalS[122X we may specify four subgroups of the
  four  groups  in  [22XcalS[122X.  If these define five sub-crossed modules, and these
  comc bine together satisfactorily, then a crossed square is produced.[133X
  
  [1X8.3-1 SubCrossedSquare[101X
  
  [33X[1;0Y[29X[2XSubCrossedSquare[102X( [3XXS[103X, [3Xul[103X, [3Xur[103X, [3Xdl[103X, [3Xdr[103X ) [32X operation[133X
  [33X[1;0Y[29X[2XIsSubCrossedSquare[102X( [3XXS[103X, [3XsubXS[103X ) [32X operation[133X
  [33X[1;0Y[29X[2XSubPreCrossedSquare[102X( [3XXS[103X, [3Xul[103X, [3Xur[103X, [3Xdl[103X, [3Xdr[103X ) [32X operation[133X
  [33X[1;0Y[29X[2XIsSubPreCrossedSquare[102X( [3XXS[103X, [3XsubXS[103X ) [32X operation[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XDisplay( XS20 ); [127X[104X
    [4X[28X[  c5d -> d10a ][128X[104X
    [4X[28X[   |      |   ][128X[104X
    [4X[28X[ d10b -> d20  ][128X[104X
    [4X[25Xgap>[125X [27Xp5 := p1^5*p2;;  [p2,p12,p5];[127X[104X
    [4X[28X[ (2,10)(3,9)(4,8)(5,7), (1,10)(2,9)(3,8)(4,7)(5,6), [128X[104X
    [4X[28X  (1,6)(2,5)(3,4)(7,10)(8,9) ][128X[104X
    [4X[25Xgap>[125X [27XL1 := TrivialSubgroup( c5d );;[127X[104X
    [4X[25Xgap>[125X [27XM1 := Subgroup( d10a, [ p2 ] );;[127X[104X
    [4X[25Xgap>[125X [27XN1 := Subgroup( d10b, [ p5 ] );;[127X[104X
    [4X[25Xgap>[125X [27XP1 := Subgroup( d20, [ p2, p5 ] );;[127X[104X
    [4X[25Xgap>[125X [27Xsub20 := SubCrossedSquare( XS20, L1, M1, N1, P1 );[127X[104X
    [4X[28Xcrossed square with crossed modules:[128X[104X
    [4X[28X      up = [Group( () ) -> Group( [ ( 2,10)( 3, 9)( 4, 8)( 5, 7) ] )][128X[104X
    [4X[28X    left = [Group( () ) -> Group( [ ( 1, 6)( 2, 5)( 3, 4)( 7,10)( 8, 9) ] )][128X[104X
    [4X[28X   right = [Group( [ ( 2,10)( 3, 9)( 4, 8)( 5, 7) ] ) -> Group( [128X[104X
    [4X[28X[ ( 2,10)( 3, 9)( 4, 8)( 5, 7), ( 1, 6)( 2, 5)( 3, 4)( 7,10)( 8, 9) ] )][128X[104X
    [4X[28X    down = [Group( [ ( 1, 6)( 2, 5)( 3, 4)( 7,10)( 8, 9) ] ) -> Group( [128X[104X
    [4X[28X[ ( 2,10)( 3, 9)( 4, 8)( 5, 7), ( 1, 6)( 2, 5)( 3, 4)( 7,10)( 8, 9) ] )][128X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27Xsxp := CrossedPairing( sub20 );;[127X[104X
    [4X[25Xgap>[125X [27Xsxp( p5, p2 );[127X[104X
    [4X[28X()[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X8.3-2 TrivialSub3DimensionalGroup[101X
  
  [33X[1;0Y[29X[2XTrivialSub3DimensionalGroup[102X( [3X3dgp[103X ) [32X operation[133X
  [33X[1;0Y[29X[2XTrivialSubCrossedSquare[102X( [3XXS[103X ) [32X attribute[133X
  [33X[1;0Y[29X[2XTrivialSubPreCrossedSquare[102X( [3XXS[103X ) [32X attribute[133X
  
  [33X[0;0YA  special  case  of  the  previous  operation is when all the subgroups are
  trivial.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XTC2ab := TrivialSubCat2Group( C2ab );[127X[104X
    [4X[28X(pre-)cat2-group with generating (pre-)cat1-groups:[128X[104X
    [4X[28X1 : [Group( () ) => Group( () )][128X[104X
    [4X[28X2 : [Group( () ) => Group( () )][128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  
  [1X8.4 [33X[0;0YMorphisms of crossed squares[133X[101X
  
  [33X[0;0YThis   section   describes   an   initial  implementation  of  morphisms  of
  (pre-)crossed squares.[133X
  
  [1X8.4-1 CrossedSquareMorphism[101X
  
  [33X[1;0Y[29X[2XCrossedSquareMorphism[102X( [3Xargs[103X ) [32X function[133X
  [33X[1;0Y[29X[2XCrossedSquareMorphismByXModMorphisms[102X( [3Xsrc[103X, [3Xrng[103X, [3Xmors[103X ) [32X operation[133X
  [33X[1;0Y[29X[2XCrossedSquareMorphismByGroupHomomorphisms[102X( [3Xsrc[103X, [3Xrng[103X, [3Xhoms[103X ) [32X operation[133X
  [33X[1;0Y[29X[2XPreCrossedSquareMorphismByPreXModMorphisms[102X( [3Xsrc[103X, [3Xrng[103X, [3Xmors[103X ) [32X operation[133X
  [33X[1;0Y[29X[2XPreCrossedSquareMorphismByGroupHomomorphisms[102X( [3Xsrc[103X, [3Xrng[103X, [3Xhoms[103X ) [32X operation[133X
  
  [1X8.4-2 Source[101X
  
  [33X[1;0Y[29X[2XSource[102X( [3Xmap[103X ) [32X attribute[133X
  [33X[1;0Y[29X[2XRange[102X( [3Xmap[103X ) [32X attribute[133X
  [33X[1;0Y[29X[2XUp2DimensionalMorphism[102X( [3Xmap[103X ) [32X attribute[133X
  [33X[1;0Y[29X[2XLeft2DimensionalMorphism[102X( [3Xmap[103X ) [32X attribute[133X
  [33X[1;0Y[29X[2XDown2DimensionalMorphism[102X( [3Xmap[103X ) [32X attribute[133X
  [33X[1;0Y[29X[2XRight2DimensionalMorphism[102X( [3Xmap[103X ) [32X attribute[133X
  
  [33X[0;0YMorphisms  of  [10X3dObjects[110X are implemented as [10X3dMappings[110X. These have a pair of
  3d-groups  as  source  and  range,  together  with four 2d-morphisms mapping
  between  the four pairs of crossed modules on the four sides of the squares.
  These functions return [10Xfail[110X when invalid data is supplied.[133X
  
  [1X8.4-3 IsCrossedSquareMorphism[101X
  
  [33X[1;0Y[29X[2XIsCrossedSquareMorphism[102X( [3Xmap[103X ) [32X property[133X
  [33X[1;0Y[29X[2XIsPreCrossedSquareMorphism[102X( [3Xmap[103X ) [32X property[133X
  [33X[1;0Y[29X[2XIsBijective[102X( [3Xmor[103X ) [32X method[133X
  [33X[1;0Y[29X[2XIsEndomorphism3dObject[102X( [3Xmor[103X ) [32X property[133X
  [33X[1;0Y[29X[2XIsAutomorphism3dObject[102X( [3Xmor[103X ) [32X property[133X
  
  [33X[0;0YA morphism [10Xmor[110X between two pre-crossed squares [22XcalS_1[122X and [22XcalS_2[122X consists of
  four  crossed  module  morphisms  [10XUp2DimensionalMorphism(mor)[110X,  mapping  the
  [10XUp2DimensionalGroup[110X      of      [22XcalS_1[122X      to      that     of     [22XcalS_2[122X,
  [10XLeft2DimensionalMorphism(mor)[110X,       [10XRight2DimensionalMorphism(mor)[110X      and
  [10XDown2DimensionalMorphism(mor)[110X.  These four morphisms are required to commute
  with  the  four boundary maps and to preserve the rest of the structure. The
  current version of [10XIsCrossedSquareMorphism[110X does not perform all the required
  checks.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27Xad20 := GroupHomomorphismByImages( d20, d20, [p1,p2], [p1,p2^p1] );;[127X[104X
    [4X[25Xgap>[125X [27Xad10a := GroupHomomorphismByImages( d10a, d10a, [p1^2,p2], [p1^2,p2^p1] );;[127X[104X
    [4X[25Xgap>[125X [27Xad10b := GroupHomomorphismByImages( d10b, d10b, [p1^2,p12], [p1^2,p12^p1] );;[127X[104X
    [4X[25Xgap>[125X [27Xidc5d := IdentityMapping( c5d );;[127X[104X
    [4X[25Xgap>[125X [27Xup := Up2DimensionalGroup( XSconj );;[127X[104X
    [4X[25Xgap>[125X [27Xlt := Left2DimensionalGroup( XSconj );; [127X[104X
    [4X[25Xgap>[125X [27Xrt := Right2DimensionalGroup( XSconj );; [127X[104X
    [4X[25Xgap>[125X [27Xdn := Down2DimensionalGroup( XSconj );; [127X[104X
    [4X[25Xgap>[125X [27Xmup := XModMorphismByGroupHomomorphisms( up, up, idc5d, ad10a );[127X[104X
    [4X[28X[[c5d->d10a] => [c5d->d10a]][128X[104X
    [4X[25Xgap>[125X [27Xmlt := XModMorphismByGroupHomomorphisms( lt, lt, idc5d, ad10b );[127X[104X
    [4X[28X[[c5d->d10b] => [c5d->d10b]][128X[104X
    [4X[25Xgap>[125X [27Xmrt := XModMorphismByGroupHomomorphisms( rt, rt, ad10a, ad20 );[127X[104X
    [4X[28X[[d10a->d20] => [d10a->d20]][128X[104X
    [4X[25Xgap>[125X [27Xmdn := XModMorphismByGroupHomomorphisms( dn, dn, ad10b, ad20 );[127X[104X
    [4X[28X[[d10b->d20] => [d10b->d20]][128X[104X
    [4X[25Xgap>[125X [27Xautoconj := CrossedSquareMorphism( XSconj, XSconj, [mup,mlt,mrt,mdn] );; [127X[104X
    [4X[25Xgap>[125X [27Xord := Order( autoconj );;[127X[104X
    [4X[25Xgap>[125X [27XDisplay( autoconj );[127X[104X
    [4X[28XMorphism of crossed squares :- [128X[104X
    [4X[28X: Source = [c5d->d10a,d10b->d20][128X[104X
    [4X[28X: Range = [c5d->d10a,d10b->d20][128X[104X
    [4X[28X:     order = 5[128X[104X
    [4X[28X:    up-left: [ [ ( 1, 3, 5, 7, 9)( 2, 4, 6, 8,10) ], [128X[104X
    [4X[28X  [ ( 1, 3, 5, 7, 9)( 2, 4, 6, 8,10) ] ][128X[104X
    [4X[28X:   up-right: [128X[104X
    [4X[28X[ [ ( 1, 3, 5, 7, 9)( 2, 4, 6, 8,10), ( 2,10)( 3, 9)( 4, 8)( 5, 7) ], [128X[104X
    [4X[28X  [ ( 1, 3, 5, 7, 9)( 2, 4, 6, 8,10), ( 1, 3)( 4,10)( 5, 9)( 6, 8) ] ][128X[104X
    [4X[28X:  down-left: [128X[104X
    [4X[28X[ [ ( 1, 3, 5, 7, 9)( 2, 4, 6, 8,10), ( 1,10)( 2, 9)( 3, 8)( 4, 7)( 5, 6) ], [128X[104X
    [4X[28X  [ ( 1, 3, 5, 7, 9)( 2, 4, 6, 8,10), ( 1, 2)( 3,10)( 4, 9)( 5, 8)( 6, 7) ] ][128X[104X
    [4X[28X: down-right: [128X[104X
    [4X[28X[ [ ( 1, 2, 3, 4, 5, 6, 7, 8, 9,10), ( 2,10)( 3, 9)( 4, 8)( 5, 7) ], [128X[104X
    [4X[28X  [ ( 1, 2, 3, 4, 5, 6, 7, 8, 9,10), ( 1, 3)( 4,10)( 5, 9)( 6, 8) ] ][128X[104X
    [4X[25Xgap>[125X [27XIsAutomorphismHigherDimensionalDomain( autoconj );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27Xkpo := KnownPropertiesOfObject( autoconj );;[127X[104X
    [4X[25Xgap>[125X [27XSet( kpo );[127X[104X
    [4X[28X[ "CanEasilyCompareElements", "CanEasilySortElements", [128X[104X
    [4X[28X  "IsAutomorphismHigherDimensionalDomain", "IsCrossedSquareMorphism", [128X[104X
    [4X[28X  "IsEndomorphismHigherDimensionalDomain", "IsInjective", [128X[104X
    [4X[28X  "IsPreCrossedSquareMorphism", "IsSingleValued", "IsSurjective", "IsTotal" ][128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X8.4-4 InclusionMorphismHigherDimensionalDomains[101X
  
  [33X[1;0Y[29X[2XInclusionMorphismHigherDimensionalDomains[102X( [3Xobj[103X, [3Xsub[103X ) [32X operation[133X
  
  
  [1X8.5 [33X[0;0YDefinitions and constructions for cat[22X^2[122X[101X[1X-groups and their morphisms[133X[101X
  
  [33X[0;0YWe  give  here three equivalent definitions of cat[22X^2[122X-groups. When we come to
  define cat[22X^n[122X-groups we shall give a similar set of definitions.[133X
  
  [33X[0;0YFirstly, we take the definition of a cat[22X^2[122X-group from Section 5 of Brown and
  Loday     [BL87],     suitably    modified.    A    cat[22X^2[122X-group    [22XcalC    =
  (C_[2],C_{2},C_{1},C_∅)[122X  comprises  four groups (one for each of the subsets
  of [22X[2][122X) and [22X15[122X homomorphisms, as shown in the following diagram:[133X
  
  
  [24X[33X[0;6Y\vcenter{\xymatrix{     &     C_{[2]}     \ar[ddd]     <-1.2ex>     \ar[ddd]
  <-2.0ex>_{\ddot{t}_2,\ddot{h}_2}       \ar[rrr]       <+1.2ex>      \ar[rrr]
  <+2.0ex>^{\ddot{t}_1,\ddot{h}_1}     \ar[dddrrr]     <-0.2ex>    \ar[dddrrr]
  <-1.0ex>_(0.55){t_{[2]},h_{[2]}}    &&&    C_{\{2\}}   \ar[lll]^{\ddot{e}_1}
  \ar[ddd]<+1.2ex>  \ar[ddd]  <+2.0ex>^{\dot{t}_2,\dot{h}_2}  \\ \calC \quad =
  \quad  & &&& \\ & &&& \\ & C_{\{1\}} \ar[uuu]_{\ddot{e}_2} \ar[rrr] <-1.2ex>
  \ar[rrr]        <-2.0ex>_{\dot{t}_1,\dot{h}_1}       &&&       C_{\emptyset}
  \ar[uuu]^{\dot{e}_2}  \ar[lll]_{\dot{e}_1} \ar[uuulll] <-1.0ex>_{e_{[2]}} \\
  }}[133X
  
  [124X
  
  [33X[0;0YThe following axioms are satisfied by these homomorphisms:[133X
  
  [30X    [33X[0;6Ythe four sides of the square (up, left, right, down) are cat[22X^1[122X-groups,
        denoted [22XddotcalC_1, ddotcalC_2, dotcalC_1, dotcalC_2[122X;[133X
  
  [30X    [33X[0;6Y[22Xdott_1∘ddoth_2  = doth_2∘ddott_1, ~ dott_2∘ddoth_1 = doth_1∘ddott_2, ~
        dote_1∘dott_2  = ddott_2∘ddote_1, ~ dote_2∘dott_1 = ddott_1∘ddote_2, ~
        dote_1∘doth_2 = ddoth_2∘ddote_1, ~ dote_2∘doth_1 = ddoth_1∘ddote_2;[122X[133X
  
  [30X    [33X[0;6Y[22Xdott_1∘ddott_2   =   dott_2∘ddott_1   =   t_[2],  ~  doth_1∘ddoth_2  =
        doth_2∘ddoth_1  =  h_[2],  ~  dote_1∘ddote_2 = dote_2∘ddote_1 = e_[2],[122X
        making  the diagonal a pre-cat[22X^1[122X-group [22X(e_[2]; t_[2], h_[2] : C_[2] ->
        C_∅)[122X.[133X
  
  [33X[0;0YIt  follows from these identities that [22X(ddott_1,dott_1),(ddoth_1,doth_1)[122X and
  [22X(ddote_1,dote_1)[122X  are  morphisms  of  cat[22X^1[122X-groups,  and  similarly  in  the
  vertical direction.[133X
  
  [33X[0;0YSecondly,  we  give  the  simplest  of  the  three definitions, adapted from
  Ellis-Steiner  [ES87].  A cat[22X^2[122X-group [22XcalC[122X consists of groups [22XG, R_1,R_2[122X and
  six homomorphisms [22Xt_1,h_1 : G -> R_2,~ e_1 : R_2 -> G,~ t_2,h_2 : G -> R_1,~
  e_2  :  R_1  ->  G[122X,  satisfying  the  following  axioms for all [22X1 leqslant i
  leqslant 2[122X,[133X
  
  [30X    [33X[0;6Y[22X(t_i  ∘  e_i)r  =  r,~ (h_i ∘ e_i)r = r,~ ∀ r ∈ R_[2] ∖ {i}, quad [ker
        t_i, ker h_i] = 1,[122X[133X
  
  [30X    [33X[0;6Y[22X(e_1  ∘  t_1)  ∘  (e_2 ∘ t_2) = (e_2 ∘ t_2) ∘ (e_1 ∘ t_1), quad (e_1 ∘
        h_1) ∘ (e_2 ∘ h_2) = (e_2 ∘ h_2) ∘ (e_1 ∘ h_1),[122X[133X
  
  [30X    [33X[0;6Y[22X(e_1  ∘  t_1)  ∘  (e_2 ∘ h_2) = (e_2 ∘ h_2) ∘ (e_1 ∘ t_1), quad (e_2 ∘
        t_2) ∘ (e_1 ∘ h_1) = (e_1 ∘ h_1) ∘ (e_2 ∘ t_2).[122X[133X
  
  [33X[0;0YOur   third   definition   defines   a  cat[22X^2[122X-group  as  a  "cat[22X^1[122X-group  of
  cat[22X^1[122X-groups".  A  cat[22X^2[122X-group  [22XcalC[122X  consists  of two cat[22X^1[122X-groups [22XcalC_1 =
  (e_1;t_1,h_1  :  G_1  ->  R_1)[122X  and  [22XcalC_2 = (e_2;t_2,h_2 : G_2 -> R_2)[122X and
  cat[22X^1[122X-morphisms  [22Xt  = (ddott,dott), h = (ddoth,doth) : calC_1 -> calC_2, e =
  (ddote,dote) : calC_2 -> calC_1[122X, subject to the following conditions:[133X
  
  
  [24X[33X[0;6Y(t  \circ  e)  ~\mbox{and}~ (h \circ e) ~\mbox{are the identity mapping on}~
  \calC_2, \qquad [\ker t, \ker h] = \{ 1_{\calC_1} \},[133X
  
  [124X
  
  [33X[0;0Ywhere [22Xker t = (ker ddott, ker dott)[122X, and similarly for [22Xker h[122X.[133X
  
  [33X[0;0YIn  a  recent  paper  [13XComputing  3-Dimensional  Groups : Crossed Squares and
  Cat2-Groups[113X, by Arvasi, Odabas and Wensley [AOW23], there are tables listing
  the  numbers  of  isomorphism  classes of cat[22X^2[122X-groups on groups of order at
  most [22X30[122X – a total of [22X1007[122X cat[22X^2[122X-groups.[133X
  
  [33X[0;0YAs  with cat[22X^1[122X-groups, there is no requirement for the various tail and head
  maps  to  be endomorphisms, but most of the cat[22X^2[122X-groups constructed by this
  package  are  of  this  type,  so  that  groups  [22XC_{2},C_{1}[122X and [22XC_∅[122X are all
  subgroups of [22XC_[2][122X.[133X
  
  [1X8.5-1 Cat2Group[101X
  
  [33X[1;0Y[29X[2XCat2Group[102X( [3Xargs[103X ) [32X function[133X
  [33X[1;0Y[29X[2XPreCat2Group[102X( [3Xargs[103X ) [32X function[133X
  [33X[1;0Y[29X[2XIsCat2Group[102X( [3XC[103X ) [32X property[133X
  [33X[1;0Y[29X[2XPreCat2GroupByPreCat1Groups[102X( [3XL[103X ) [32X operation[133X
  
  [33X[0;0YFollowing  the  second  definition above, the global functions [10XCat2Group[110X and
  [10XPreCat2Group[110X  are normally called with two arguments - the generating up and
  left  cat[22X^1[122X-groups  [22XcalC_1[122X and [22XcalC_2[122X. In this case the groups [22XC_[2], C_{2},
  C_{1}[122X  are  the  common source and the ranges of [22XcalC_1,calC_2[122X, while [22XC_∅[122X is
  the range of [22X(e_1 ∘ t_1) ∘ (e_2 ∘ t_2) = (e_2 ∘ t_2) ∘ (e_1 ∘ t_1)[122X.[133X
  
  [33X[0;0YAlternatively,  they may be called with a single argument which is a crossed
  square.[133X
  
  [33X[0;0YThe operation [10XPreCat2GroupByPreCat1Groups[110X has five arguments - the up, left,
  right, down and diagonal cat[22X^1[122X-groups.[133X
  
  [33X[0;0YThe  two  cat[22X^2[122X-groups  [10XC2a,  C2b[110X  constructed  in the following example are
  isomorphic. They differ in the down-right group [10XP[110X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27Xa := (1,2,3,4,5,6);;  b := (2,6)(3,5);; [127X[104X
    [4X[25Xgap>[125X [27XG := Group( a, b );;  SetName( G, "d12" );[127X[104X
    [4X[25Xgap>[125X [27Xt1 := GroupHomomorphismByImages( G, G, [a,b], [a^3,b] );; [127X[104X
    [4X[25Xgap>[125X [27Xup := PreCat1GroupByEndomorphisms( t1, t1 );;[127X[104X
    [4X[25Xgap>[125X [27Xt2 := GroupHomomorphismByImages( G, G, [a,b], [a^4,b] );; [127X[104X
    [4X[25Xgap>[125X [27Xleft := PreCat1GroupByEndomorphisms( t2, t2 );;[127X[104X
    [4X[25Xgap>[125X [27XC2a := Cat2Group( up, left );[127X[104X
    [4X[28X(pre-)cat2-group with generating (pre-)cat1-groups:[128X[104X
    [4X[28X1 : [d12 => Group( [ (1,4)(2,5)(3,6), (2,6)(3,5) ] )][128X[104X
    [4X[28X2 : [d12 => Group( [ (1,5,3)(2,6,4), (2,6)(3,5) ] )][128X[104X
    [4X[25Xgap>[125X [27XIsCat2Group( C2a );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XgenR := [ (1,4)(2,5)(3,6), (2,6)(3,5) ];;[127X[104X
    [4X[25Xgap>[125X [27XR := Subgroup( G, genR );; [127X[104X
    [4X[25Xgap>[125X [27XgenQ := [ (1,3,5)(2,4,6), (2,6)(3,5) ];; [127X[104X
    [4X[25Xgap>[125X [27XQ := Subgroup( G, genQ );; [127X[104X
    [4X[25Xgap>[125X [27XPa := Group( b );;  SetName( Pa, "c2a" ); [127X[104X
    [4X[25Xgap>[125X [27XPb := Group( (7,8) );;  SetName( Pb, "c2b" ); [127X[104X
    [4X[25Xgap>[125X [27Xt3 := GroupHomomorphismByImages( R, P, genR, [(),(7,8)] );; [127X[104X
    [4X[25Xgap>[125X [27Xe3 := GroupHomomorphismByImages( P, R, [(7,8)], [(2,6)(3,5)] );; [127X[104X
    [4X[25Xgap>[125X [27Xright := PreCat1GroupByTailHeadEmbedding( t3, t3, e3 );;[127X[104X
    [4X[25Xgap>[125X [27Xt4 := GroupHomomorphismByImages( Q, P, genQ, [(),(7,8)] );; [127X[104X
    [4X[25Xgap>[125X [27Xe4 := GroupHomomorphismByImages( P, Q, [(7,8)], [(2,6)(3,5)] );; [127X[104X
    [4X[25Xgap>[125X [27Xdown := PreCat1GroupByTailHeadEmbedding( t4, t4, e4 );;[127X[104X
    [4X[25Xgap>[125X [27Xt0 := t1 * t3;; [127X[104X
    [4X[25Xgap>[125X [27Xe0 := GroupHomomorphismByImages( P, G, [(7,8)], [(2,6)(3,5)] );; [127X[104X
    [4X[25Xgap>[125X [27Xdiag := PreCat1GroupByTailHeadEmbedding( t0, t0, e0 );;[127X[104X
    [4X[25Xgap>[125X [27XC2b := PreCat2GroupByPreCat1Groups( up, left, right, down, diag ); [127X[104X
    [4X[28X(pre-)cat2-group with generating (pre-)cat1-groups:[128X[104X
    [4X[28X1 : [d12 => Group( [ (1,4)(2,5)(3,6), (2,6)(3,5) ] )][128X[104X
    [4X[28X2 : [d12 => Group( [ (1,5,3)(2,6,4), (2,6)(3,5) ] )][128X[104X
    [4X[25Xgap>[125X [27XC2a = C2b;[127X[104X
    [4X[28Xfalse[128X[104X
    [4X[25Xgap>[125X [27XGroupsOfHigherDimensionalGroup( C2a )[4];[127X[104X
    [4X[28XGroup([ (), (2,6)(3,5) ])[128X[104X
    [4X[25Xgap>[125X [27XGroupsOfHigherDimensionalGroup( C2b )[4];[127X[104X
    [4X[28XGroup([ (7,8) ])[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X8.5-2 Up2DimensionalGroup[101X
  
  [33X[1;0Y[29X[2XUp2DimensionalGroup[102X( [3XC2G[103X ) [32X attribute[133X
  [33X[1;0Y[29X[2XLeft2DimensionalGroup[102X( [3XC2G[103X ) [32X attribute[133X
  [33X[1;0Y[29X[2XDown2DimensionalGroup[102X( [3XC2G[103X ) [32X attribute[133X
  [33X[1;0Y[29X[2XRight2DimensionalGroup[102X( [3XC2G[103X ) [32X attribute[133X
  [33X[1;0Y[29X[2XDiagonal2DimensionalGroup[102X( [3XC2G[103X ) [32X attribute[133X
  
  [33X[0;0YThese  six  attributes were defined for crossed squares but apply equally to
  cat[22X^2[122X-groups.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XDiagonal2DimensionalGroup( C2a );[127X[104X
    [4X[28X[d12 => Group( [ (), (2,6)(3,5) ] )][128X[104X
    [4X[25Xgap>[125X [27XDiagonal2DimensionalGroup( C2b );[127X[104X
    [4X[28X[d12 => Group( [ (7,8) ] )][128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X8.5-3 DirectProduct[101X
  
  [33X[1;0Y[29X[2XDirectProduct[102X( [3XC2a[103X, [3XC2b[103X ) [32X operation[133X
  
  [33X[0;0YThe  direct product [22XcalC_1 × calC_2[122X has as its four up, left, right and down
  cat[22X^1[122X-groups  the  direct  products  of  those  in  [22XcalC_1[122X  and  [22XcalC_2[122X. The
  embeddings  and projections are constructed automatically, and placed in the
  [10XDirectProductInfo[110X  attribute,  together  with  the  two  [13Xobjects[113X  [22XcalC_1[122X and
  [22XcalC_2[122X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XC2ab := DirectProductOp( [ C2a, C2b ], C2a ); [127X[104X
    [4X[28X(pre-)cat2-group with generating (pre-)cat1-groups:[128X[104X
    [4X[28X1 : [Group( [ (1,2,3,4,5,6), (2,6)(3,5), ( 7, 8, 9,10,11,12), ( 8,12)( 9,11) [128X[104X
    [4X[28X ] ) => Group( [ (1,4)(2,5)(3,6), (2,6)(3,5), ( 7,10)( 8,11)( 9,12), [128X[104X
    [4X[28X  ( 8,12)( 9,11) ] )][128X[104X
    [4X[28X2 : [Group( [ (1,2,3,4,5,6), (2,6)(3,5), ( 7, 8, 9,10,11,12), ( 8,12)( 9,11) [128X[104X
    [4X[28X ] ) => Group( [ (1,5,3)(2,6,4), (2,6)(3,5), ( 7, 9,11)( 8,10,12), [128X[104X
    [4X[28X  ( 8,12)( 9,11) ] )][128X[104X
    [4X[25Xgap>[125X [27XStructureDescription( C2ab );  [127X[104X
    [4X[28X[ "C2 x C2 x S3 x S3", "C2 x C2 x C2 x C2", "S3 x S3", "C2 x C2" ][128X[104X
    [4X[25Xgap>[125X [27XSetName( C2ab, "C2ab" );[127X[104X
    [4X[25Xgap>[125X [27XEmbedding( C2ab, 1 );   [127X[104X
    [4X[28X<mapping: (pre-)cat2-group with generating (pre-)cat1-groups:[128X[104X
    [4X[28X1 : [d12 => Group( [ (1,4)(2,5)(3,6), (2,6)(3,5) ] )][128X[104X
    [4X[28X2 : [d12 => Group( [ (1,5,3)(2,6,4), (2,6)(3,5) ] )] -> C2ab >[128X[104X
    [4X[25Xgap>[125X [27XProjection( C2ab, 2 );[127X[104X
    [4X[28X<mapping: C2ab -> (pre-)cat2-group with generating (pre-)cat1-groups:[128X[104X
    [4X[28X1 : [d12 => Group( [ (1,4)(2,5)(3,6), (2,6)(3,5) ] )][128X[104X
    [4X[28X2 : [d12 => Group( [ (1,5,3)(2,6,4), (2,6)(3,5) ] )] >[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X8.5-4 DisplayLeadMaps[101X
  
  [33X[1;0Y[29X[2XDisplayLeadMaps[102X( [3XC0[103X ) [32X operation[133X
  
  [33X[0;0YThis  operation  provides an alternative to [10XDisplay[110X giving a shorter output.
  Generators of the up-left group are output, together with their images under
  the up and left tail and head maps.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XDisplayLeadMaps( C2b );[127X[104X
    [4X[28X(pre-)cat2-group with up-left group: [ (1,2,3,4,5,6), (2,6)(3,5) ][128X[104X
    [4X[28X   up tail=head images: [ (1,4)(2,5)(3,6), (2,6)(3,5) ][128X[104X
    [4X[28X left tail=head images: [ (1,5,3)(2,6,4), (2,6)(3,5) ][128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X8.5-5 Transpose3DimensionalGroup[101X
  
  [33X[1;0Y[29X[2XTranspose3DimensionalGroup[102X( [3XS0[103X ) [32X attribute[133X
  
  [33X[0;0YThe [13Xtranspose[113X of a cat[22X^2[122X-group [22XcalC[122X with groups [22X[G,R,Q,P][122X is the cat[22X^2[122X-group
  [22XtildecalC[122X with groups [22X[G,Q,R,P][122X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XTC2a := Transpose3DimensionalGroup( C2a );[127X[104X
    [4X[28X(pre-)cat2-group with generating (pre-)cat1-groups:[128X[104X
    [4X[28X1 : [d12 => Group( [ (1,5,3)(2,6,4), (2,6)(3,5) ] )][128X[104X
    [4X[28X2 : [d12 => Group( [ (1,4)(2,5)(3,6), (2,6)(3,5) ] )][128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X8.5-6 Cat2GroupMorphism[101X
  
  [33X[1;0Y[29X[2XCat2GroupMorphism[102X( [3Xargs[103X ) [32X function[133X
  [33X[1;0Y[29X[2XCat2GroupMorphismByCat1GroupMorphisms[102X( [3Xsrc[103X, [3Xrng[103X, [3Xupmor[103X, [3Xltmor[103X ) [32X operation[133X
  [33X[1;0Y[29X[2XCat2GroupMorphismByGroupHomomorphisms[102X( [3Xsrc[103X, [3Xrng[103X, [3Xhoms[103X ) [32X operation[133X
  [33X[1;0Y[29X[2XPreCat2GroupMorphism[102X( [3Xargs[103X ) [32X function[133X
  [33X[1;0Y[29X[2XPreCat2GroupMorphismByPreCat1GroupMorphisms[102X( [3Xsrc[103X, [3Xrng[103X, [3Xupmor[103X, [3Xltmor[103X ) [32X operation[133X
  [33X[1;0Y[29X[2XPreCat2GroupMorphismByGroupHomomorphisms[102X( [3Xsrc[103X, [3Xrng[103X, [3Xhoms[103X ) [32X operation[133X
  
  [33X[0;0YA  (pre-)cat[22X^2[122X-group  morphism [22Xμ : calC = (G,R,Q,P) -> calC' = (G',R',Q',P')[122X
  is  a  list of four group homomorphisms [22Xγ : G -> G',~ ρ : R -> R',~ ξ : Q ->
  Q'[122X  and [22Xπ : P -> P'[122X which commute with all the tail, head and embedding maps
  so that [22X(γ,ρ), (γ,ξ), (ρ,π)[122X and [22X(ξ,π)[122X are all (pre-)cat[22X^1[122X-group morphisms.[133X
  
  [33X[0;0YFor  the  operations [10X(Pre)Cat2GroupMorphismByPreCat1GroupMorphisms[110X the third
  and fourth parameters [10Xupmor, ltmor[110X are two cat[22X^1[122X-group morphisms with source
  the up and left cat[22X^1[122X-groups in [22XcalC[122X.[133X
  
  [33X[0;0YFor  the  operations  [10X(Pre)Cat2GroupMorphismByGroupHomomorphisms[110X  the  third
  parameter [10Xmors[110X is the list [22X[γ,ρ,ξ,π][122X.[133X
  
  [33X[0;0YThe  example  constructs  an  automorphism of [10Xc2a[110X is two ways, using the two
  methods  described  above, an d verifies that the result is the same in each
  case.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27Xgamma := GroupHomomorphismByImages( G, G, [a,b], [a^-1,b] );;[127X[104X
    [4X[25Xgap>[125X [27Xrho := IdentityMapping( R );;[127X[104X
    [4X[25Xgap>[125X [27Xxi := GroupHomomorphismByImages( Q, Q, [a^2,b], [a^-2,b] );;[127X[104X
    [4X[25Xgap>[125X [27Xpi := IdentityMapping( Pa );;[127X[104X
    [4X[25Xgap>[125X [27Xhoms := [ gamma, rho, xi, pi ];;[127X[104X
    [4X[25Xgap>[125X [27Xmor1 := Cat2GroupMorphismByGroupHomomorphisms( C2a, C2a, homs );   [127X[104X
    [4X[28X<mapping: (pre-)cat2-group with generating (pre-)cat1-groups:[128X[104X
    [4X[28X1 : [d12 => Group( [ (1,4)(2,5)(3,6), (2,6)(3,5) ] )][128X[104X
    [4X[28X2 : [d12 => Group( [ (1,5,3)(2,6,4), (2,6)(3,5) ] )] -> (pre-)cat[128X[104X
    [4X[28X2-group with generating (pre-)cat1-groups:[128X[104X
    [4X[28X1 : [d12 => Group( [ (1,4)(2,5)(3,6), (2,6)(3,5) ] )][128X[104X
    [4X[28X2 : [d12 => Group( [ (1,5,3)(2,6,4), (2,6)(3,5) ] )] >[128X[104X
    [4X[25Xgap>[125X [27Xupmor := Cat1GroupMorphism( up, up, gamma, rho );; [127X[104X
    [4X[25Xgap>[125X [27Xltmor := Cat1GroupMorphism( left, left, gamma, xi );; [127X[104X
    [4X[25Xgap>[125X [27Xmor2 := Cat2GroupMorphismByCat1GroupMorphisms( C2a, C2a, upmor, ltmor );; [127X[104X
    [4X[25Xgap>[125X [27Xmor1 = mor2; [127X[104X
    [4X[28Xtrue[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X8.5-7 Cat2GroupOfCrossedSquare[101X
  
  [33X[1;0Y[29X[2XCat2GroupOfCrossedSquare[102X( [3Xxsq[103X ) [32X attribute[133X
  [33X[1;0Y[29X[2XCrossedSquareOfCat2Group[102X( [3XCC[103X ) [32X attribute[133X
  
  [33X[0;0YThese   functions   provide  for  conversion  between  crossed  squares  and
  cat[22X^2[122X-groups.  (They  are  the  3-dimensional equivalents of [2XCat1GroupOfXMod[102X
  ([14X2.5-3[114X)  and  [2XXModOfCat1Group[102X  ([14X2.5-3[114X).)  The actor crossed square [10XXSact[110X was
  constructed in section [2XActorCrossedSquare[102X ([14X8.2-5[114X).[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XxsC2a := CrossedSquareOfCat2Group( C2a );[127X[104X
    [4X[28Xcrossed square with crossed modules:[128X[104X
    [4X[28X      up = [Group( () ) -> Group( [ (1,4)(2,5)(3,6) ] )][128X[104X
    [4X[28X    left = [Group( () ) -> Group( [ (1,3,5)(2,4,6) ] )][128X[104X
    [4X[28X   right = [Group( [ (1,4)(2,5)(3,6) ] ) -> Group( [ (2,6)(3,5) ] )][128X[104X
    [4X[28X    down = [Group( [ (1,3,5)(2,4,6) ] ) -> Group( [ (2,6)(3,5) ] )][128X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XIdGroup( xsC2a );[127X[104X
    [4X[28X[ [ 1, 1 ], [ 2, 1 ], [ 3, 1 ], [ 2, 1 ] ][128X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XSetName( Source( Right2DimensionalGroup( XSact ) ), "c5:c4" );[127X[104X
    [4X[25Xgap>[125X [27XSetName( Range( Right2DimensionalGroup( XSact ) ), "c5:c4" );[127X[104X
    [4X[25Xgap>[125X [27XName( XSact );[127X[104X
    [4X[28X"[d10a->c5:c4,d20->c5:c4]"[128X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XC2act := Cat2GroupOfCrossedSquare( XSact );             [127X[104X
    [4X[28X(pre-)cat2-group with generating (pre-)cat1-groups:[128X[104X
    [4X[28X1 : [((c5:c4 |X c5:c4) |X (d20 |X d10a))=>(c5:c4 |X c5:c4)][128X[104X
    [4X[28X2 : [((c5:c4 |X c5:c4) |X (d20 |X d10a))=>(c5:c4 |X d20)][128X[104X
    [4X[25Xgap>[125X [27XSize3d( C2act );[127X[104X
    [4X[28X[ 80000, 400, 400, 20 ][128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X8.5-8 Subdiagonal2DimensionalGroup[101X
  
  [33X[1;0Y[29X[2XSubdiagonal2DimensionalGroup[102X( [3Xobj[103X ) [32X attribute[133X
  
  [33X[0;0YThe  diagonal  of  a  crossed  square  is  always  a crossed module, but the
  diagonal of a cat[22X^2[122X-group need only be a pre-cat[22X^1[122X-group. There is, however,
  a  sub-cat[22X^1[122X-group  of  this  diagonal  which,  in the case of a cat[22X^2[122X-group
  constructed  from  a  crossed  square,  is  [22X(P  ⋉ L => P)[122X. (The name of this
  operation is very provisional.)[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XG24 := SmallGroup( 24, 10 );; [127X[104X
    [4X[25Xgap>[125X [27Xw := G24.1;; x := G24.2;; y := G24.3;; z := G24.4;; o := One(G24);; [127X[104X
    [4X[25Xgap>[125X [27XR := Subgroup( G24, [x,y] );; [127X[104X
    [4X[25Xgap>[125X [27Xtxy := GroupHomomorphismByImages( G24, R, [w,x,y,z], [o,x,y,o] );; [127X[104X
    [4X[25Xgap>[125X [27Xexy := GroupHomomorphismByImages( R, G24, [x,y], [x,y] );; [127X[104X
    [4X[25Xgap>[125X [27XC1xy := PreCat1GroupByTailHeadEmbedding( txy, txy, exy );; [127X[104X
    [4X[25Xgap>[125X [27XQ := Subgroup( G24, [w,y] );; [127X[104X
    [4X[25Xgap>[125X [27Xtwy := GroupHomomorphismByImages( G24, Q, [w,x,y,z], [w,o,y,o] );; [127X[104X
    [4X[25Xgap>[125X [27Xewy := GroupHomomorphismByImages( Q, G24, [w,y], [w,y] );; [127X[104X
    [4X[25Xgap>[125X [27XC1wy := PreCat1GroupByTailHeadEmbedding( twy, twy, ewy );; [127X[104X
    [4X[25Xgap>[125X [27XC2wxy := PreCat2Group( C1xy, C1xy );; [127X[104X
    [4X[25Xgap>[125X [27Xdg := Diagonal2DimensionalGroup( C2wxy );;[127X[104X
    [4X[25Xgap>[125X [27XC1sub := Subdiagonal2DimensionalGroup( C2wxy );; [127X[104X
    [4X[25Xgap>[125X [27X[ IsCat1Group(dg), IsCat1Group(C1sub), IsSub2DimensionalGroup(dg,C1sub) ];[127X[104X
    [4X[28X[ false, true, true ][128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X8.5-9 SubCat2Group[101X
  
  [33X[1;0Y[29X[2XSubCat2Group[102X( [3XC2G[103X, [3Xul[103X, [3Xur[103X, [3Xdl[103X ) [32X operation[133X
  [33X[1;0Y[29X[2XIsSubCat2Group[102X( [3XC2G[103X, [3XsubC2G[103X ) [32X operation[133X
  [33X[1;0Y[29X[2XSubPreCat2Group[102X( [3XC2G[103X, [3Xul[103X, [3Xur[103X, [3Xdl[103X ) [32X operation[133X
  [33X[1;0Y[29X[2XIsSubPreCat2Group[102X( [3XC2G[103X, [3XsubC2G[103X ) [32X operation[133X
  
  [33X[0;0YAs with crossed squares, we may construct sub-structures of cat[22X^2[122X-groups. In
  this  case we need only prescribe three subgroups, rather than four, so that
  the   up   and   left  sub-cat[22X^1[122X-groups  can  be  specified.  The  remaining
  sub-cat[22X^1[122X-groups are then calculated automatically.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27Xgps := GroupsOfHigherDimensionalGroup( C2ab );;[127X[104X
    [4X[25Xgap>[125X [27Xc6c2 := Subgroup( gps[1], [ (1,2,3,4,5,6), (8,12)(9,11) ] );;[127X[104X
    [4X[25Xgap>[125X [27Xc2c2 := Subgroup( gps[2], [ (1,4)(2,5)(3,6), (8,12)(9,11) ] );;[127X[104X
    [4X[25Xgap>[125X [27Xc3c2 := Subgroup( gps[3], [ (1,5,3)(2,6,4), (8,12)(9,11) ] );;[127X[104X
    [4X[25Xgap>[125X [27XSC2ab := SubCat2Group( C2ab, c6c2, c2c2, c3c2 );;[127X[104X
    [4X[25Xgap>[125X [27XDisplay( SC2ab );              [127X[104X
    [4X[28X(pre-)cat2-group with groups: [ Group( [ (1,2,3,4,5,6), ( 8,12)( 9,11) ] ), [128X[104X
    [4X[28X  Group( [ (1,4)(2,5)(3,6), ( 8,12)( 9,11) ] ), [128X[104X
    [4X[28X  Group( [ (1,5,3)(2,6,4), ( 8,12)( 9,11) ] ), [128X[104X
    [4X[28X  Group( [ (), ( 8,12)( 9,11) ] ) ][128X[104X
    [4X[28X   up tail=head: [ [ (1,2,3,4,5,6), ( 8,12)( 9,11) ], [128X[104X
    [4X[28X  [ (1,4)(2,5)(3,6), ( 8,12)( 9,11) ] ][128X[104X
    [4X[28X left tail=head: [ [ (1,2,3,4,5,6), ( 8,12)( 9,11) ], [128X[104X
    [4X[28X  [ (1,5,3)(2,6,4), ( 8,12)( 9,11) ] ][128X[104X
    [4X[28Xright tail=head: [ [ (1,4)(2,5)(3,6), ( 8,12)( 9,11) ], [128X[104X
    [4X[28X  [ (), ( 8,12)( 9,11) ] ][128X[104X
    [4X[28X down tail=head: [ [ (1,5,3)(2,6,4), ( 8,12)( 9,11) ], [ (), ( 8,12)( 9,11) ] [128X[104X
    [4X[28X ][128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X8.5-10 TrivialSubCat2Group[101X
  
  [33X[1;0Y[29X[2XTrivialSubCat2Group[102X( [3XC2G[103X ) [32X attribute[133X
  [33X[1;0Y[29X[2XTrivialSubPreCat2Group[102X( [3XC2G[103X ) [32X attribute[133X
  
  [33X[0;0YA  special  case  of  the  previous  operation is when all the subgroups are
  trivial.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XTC2ab := TrivialSubCrossedSquare( C2ab );[127X[104X
    [4X[28Xcrossed square with crossed modules:[128X[104X
    [4X[28X      up = [Group( () ) -> Group( () )][128X[104X
    [4X[28X    left = [Group( () ) -> Group( () )][128X[104X
    [4X[28X   right = [Group( () ) -> Group( () )][128X[104X
    [4X[28X    down = [Group( () ) -> Group( () )][128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  
  [1X8.6 [33X[0;0YEnumerating cat[22X^2[122X[101X[1X-groups with a given source[133X[101X
  
  [33X[0;0YThis  section  mirrors that for cat[22X^1[122X-groups ([14X2.6[114X). As the size of a group [22XG[122X
  increases,  the  number  of  cat[22X^2[122X-groups  with  source [22XG[122X increases rapidly.
  However,  one  is  usually  only  interested  in  the isomorphism classes of
  cat[22X^2[122X-groups  with  source [22XG[122X. An iterator [10XAllCat2GroupsIterator[110X is provided,
  which  runs  through the various cat[22X^2[122X-groups. This iterator finds, for each
  unordered   pair   of   subgroups   [22XR,Q[122X   of   [22XG[122X,   the  cat[22X^2[122X-groups  whose
  [10XUp2DimensionalGroup[110X  has  range [22XR[122X, and whose [10XLeft2DimensionalGroup[110X has range
  [22XQ[122X.        It        does        this        by        running        through
  [10XUnoderedPairsIterator(AllSubgroupsIterator(G))[110X   provided   by   the   [5XUtils[105X
  package, and then using the iterator [10XAllCat2GroupsWithImagesIterator(G,R,Q)[110X.[133X
  
  [1X8.6-1 AllCat2GroupsWithImagesIterator[101X
  
  [33X[1;0Y[29X[2XAllCat2GroupsWithImagesIterator[102X( [3XG[103X, [3XR[103X, [3XQ[103X ) [32X operation[133X
  [33X[1;0Y[29X[2XAllCat2GroupsWithImagesNumber[102X( [3XG[103X, [3XR[103X, [3XQ[103X ) [32X attribute[133X
  [33X[1;0Y[29X[2XAllCat2GroupsWithImages[102X( [3XG[103X, [3XR[103X, [3XQ[103X ) [32X operation[133X
  [33X[1;0Y[29X[2XAllCat2GroupsWithImagesUpToIsomorphism[102X( [3XG[103X, [3XR[103X, [3XQ[103X ) [32X operation[133X
  
  [33X[0;0YThe  iterator  [10XAllCat2GroupsWithImagesIterator(G)[110X  iterates  through all the
  cat[22X^2[122X-groups  with  source  [10XG[110X and generating cat[22X^1[122X-groups [10X(G=>R)[110X and [10X(G=>Q)[110X.
  The attribute [10XAllCat2GroupsWithImagesNumber(G)[110X runs through this iterator to
  determine    the   number   [22Xn[122X   of   these   cat[22X^2[122X-groups.   The   operation
  [10XAllCat2GroupsWithImages(G)[110X  returns  a list containing these [22Xn[122X cat[22X^2[122X-groups.
  Since  these lists can get very long, this operation should only be used for
  simple   cases.   The   operation  [10XAllCat2GroupsWithImagesUpToIsomorphism(G)[110X
  returns representatives of the isomorphism classes of these cat[22X^2[122X-groups.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XG8 := Group( (1,2), (3,4), (5,6) );;[127X[104X
    [4X[25Xgap>[125X [27XA := Subgroup( G8, [ (1,2) ] );; [127X[104X
    [4X[25Xgap>[125X [27XB := Subgroup( G8, [ (3,4) ] );;[127X[104X
    [4X[25Xgap>[125X [27XAllCat2GroupsWithImagesNumber( G8, A, A );[127X[104X
    [4X[28X4[128X[104X
    [4X[25Xgap>[125X [27Xall := AllCat2GroupsWithImages( G8, A, A );;     [127X[104X
    [4X[25Xgap>[125X [27Xfor C2 in all do DisplayLeadMaps( C2 ); od;[127X[104X
    [4X[28X(pre-)cat2-group with up-left group: [ (1,2), (3,4), (5,6) ][128X[104X
    [4X[28X   up tail=head images: [ (1,2), (1,2), () ][128X[104X
    [4X[28X left tail=head images: [ (1,2), (1,2), () ][128X[104X
    [4X[28X(pre-)cat2-group with up-left group: [ (1,2), (3,4), (5,6) ][128X[104X
    [4X[28X   up tail=head images: [ (1,2), (), () ][128X[104X
    [4X[28X left tail=head images: [ (1,2), (), () ][128X[104X
    [4X[28X(pre-)cat2-group with up-left group: [ (1,2), (3,4), (5,6) ][128X[104X
    [4X[28X   up tail=head images: [ (1,2), (), (1,2) ][128X[104X
    [4X[28X left tail=head images: [ (1,2), (), (1,2) ][128X[104X
    [4X[28X(pre-)cat2-group with up-left group: [ (1,2), (3,4), (5,6) ][128X[104X
    [4X[28X   up tail=head images: [ (1,2), (1,2), (1,2) ][128X[104X
    [4X[28X left tail=head images: [ (1,2), (1,2), (1,2) ][128X[104X
    [4X[25Xgap>[125X [27XAllCat2GroupsWithImagesNumber( G8, A, B );[127X[104X
    [4X[28X16[128X[104X
    [4X[25Xgap>[125X [27Xiso := AllCat2GroupsWithImagesUpToIsomorphism( G8, A, B );;[127X[104X
    [4X[25Xgap>[125X [27Xfor C2 in iso do DisplayLeadMaps( C2 ); od;[127X[104X
    [4X[28X(pre-)cat2-group with up-left group: [ (1,2), (3,4), (5,6) ][128X[104X
    [4X[28X   up tail=head images: [ (1,2), (), () ][128X[104X
    [4X[28X left tail=head images: [ (), (3,4), () ][128X[104X
    [4X[28X(pre-)cat2-group with up-left group: [ (1,2), (3,4), (5,6) ][128X[104X
    [4X[28X   up tail=head images: [ (1,2), (), () ][128X[104X
    [4X[28X left tail/head images: [ (), (3,4), () ], [ (), (3,4), (3,4) ][128X[104X
    [4X[28X(pre-)cat2-group with up-left group: [ (1,2), (3,4), (5,6) ][128X[104X
    [4X[28X   up tail/head images: [ (1,2), (), () ], [ (1,2), (), (1,2) ][128X[104X
    [4X[28X left tail/head images: [ (), (3,4), () ], [ (), (3,4), (3,4) ][128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X8.6-2 AllCat2GroupsWithFixedUp[101X
  
  [33X[1;0Y[29X[2XAllCat2GroupsWithFixedUp[102X( [3XC[103X ) [32X operation[133X
  [33X[1;0Y[29X[2XAllCat2GroupsWithFixedUpAndLeftRange[102X( [3XC[103X, [3XR[103X ) [32X operation[133X
  
  [33X[0;0YThe  operation  [10XAllCat2GroupsWithFixedUp(C)[110X  constructs all the cat[22X^2[122X-groups
  with  a  fixed  [10XUp2DimensionalGroup[110X  [22XC[122X. In the second operation the user may
  also specify the range of the [10XLeft2DimensionalGroup[110X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27Xup := Up2DimensionalGroup( iso[1] );                [127X[104X
    [4X[28X[Group( [ (1,2), (3,4), (5,6) ] )=>Group( [ (1,2), (), () ] )][128X[104X
    [4X[25Xgap>[125X [27XAllCat2GroupsWithFixedUp( up );;                    [127X[104X
    [4X[25Xgap>[125X [27XLength(last);                                       [127X[104X
    [4X[28X28[128X[104X
    [4X[25Xgap>[125X [27XL := AllCat2GroupsWithFixedUpAndLeftRange( up, B );;[127X[104X
    [4X[25Xgap>[125X [27Xfor C in L do DisplayLeadMaps( C ); od;             [127X[104X
    [4X[28X(pre-)cat2-group with up-left group: [ (1,2), (3,4), (5,6) ][128X[104X
    [4X[28X   up tail=head images: [ (1,2), (), () ][128X[104X
    [4X[28X left tail=head images: [ (), (3,4), () ][128X[104X
    [4X[28X(pre-)cat2-group with up-left group: [ (1,2), (3,4), (5,6) ][128X[104X
    [4X[28X   up tail=head images: [ (1,2), (), () ][128X[104X
    [4X[28X left tail/head images: [ (), (3,4), () ], [ (), (3,4), (3,4) ][128X[104X
    [4X[28X(pre-)cat2-group with up-left group: [ (1,2), (3,4), (5,6) ][128X[104X
    [4X[28X   up tail=head images: [ (1,2), (), () ][128X[104X
    [4X[28X left tail/head images: [ (), (3,4), (3,4) ], [ (), (3,4), () ][128X[104X
    [4X[28X(pre-)cat2-group with up-left group: [ (1,2), (3,4), (5,6) ][128X[104X
    [4X[28X   up tail=head images: [ (1,2), (), () ][128X[104X
    [4X[28X left tail=head images: [ (), (3,4), (3,4) ][128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X8.6-3 AllCat2GroupsMatrix[101X
  
  [33X[1;0Y[29X[2XAllCat2GroupsMatrix[102X( [3XG[103X ) [32X attribute[133X
  
  [33X[0;0YThe  operation  [10XAllCat2GroupsMatrix(G)[110X  constructs a symmetric matrix [22XM[122X with
  rows  and  columns labelled by the cat[22X^1[122X-groups [22XC_i[122X on [22XG[122X, where [22XM_ij[122X is [22X1[122X if
  [22XC_i,C_j[122X  combine  to  form  a  cat[22X^2[122X-group,  and  [22X0[122X otherwise. The matrix is
  automatically printed out with dots in place of zeroes.[133X
  
  [33X[0;0YIn  the  example we see that the dihedral group [22XD_12[122X has [22X12[122X cat[22X^1[122X-groups and
  [22X41[122X cat[22X^2[122X-groups, [22X12[122X of which are symmetric. This operation is intended to be
  used to illustrate how cat[22X^2[122X-groups are formed, and should only be used with
  groups of low order.[133X
  
  [33X[0;0YThe   attribute   [10XAllCat2GroupsNumber(G)[110X  returns  the  number  [22Xn[122X  of  these
  cat[22X^2[122X-groups.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XAllCat2GroupsMatrix(d12);;                [127X[104X
    [4X[28Xnumber of cat2-groups found = 41[128X[104X
    [4X[28X1.....1..1.1[128X[104X
    [4X[28X.1.....1.1.1[128X[104X
    [4X[28X..1.....11.1[128X[104X
    [4X[28X...1....1.11[128X[104X
    [4X[28X....1.1...11[128X[104X
    [4X[28X.....1.1..11[128X[104X
    [4X[28X1...1.1..111[128X[104X
    [4X[28X.1...1.1.111[128X[104X
    [4X[28X..11....1111[128X[104X
    [4X[28X111...1111.1[128X[104X
    [4X[28X...111111.11[128X[104X
    [4X[28X111111111111[128X[104X
    [4X[25Xgap>[125X [27XAllCat2GroupsNumber(d12); [127X[104X
    [4X[28X41[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X8.6-4 AllCat2GroupsIterator[101X
  
  [33X[1;0Y[29X[2XAllCat2GroupsIterator[102X( [3XG[103X ) [32X operation[133X
  [33X[1;0Y[29X[2XAllCat2Groups[102X( [3XG[103X ) [32X operation[133X
  [33X[1;0Y[29X[2XAllCat2GroupsUpToIsomorphism[102X( [3XG[103X ) [32X operation[133X
  [33X[1;0Y[29X[2XAllCat2GroupFamilies[102X( [3XG[103X ) [32X operation[133X
  [33X[1;0Y[29X[2XCatnGroupNumbers[102X( [3XG[103X ) [32X attribute[133X
  [33X[1;0Y[29X[2XCatnGroupLists[102X( [3XG[103X ) [32X attribute[133X
  
  [33X[0;0YThe  iterator [10XAllCat2GroupsIterator(G)[110X iterates through all the cat[22X^2[122X-groups
  with  source  [10XG[110X.  The  operation  [10XAllCat2Groups(G)[110X returns a list containing
  these  [22Xn[122X  cat[22X^2[122X-groups.  Since these lists can get very long, this operation
  should     only    be    used    for    simple    cases.    The    operation
  [10XAllCat2GroupsUpToIsomorphism(G)[110X  returns  representatives of the isomorphism
  classes  of these subgroups. The operation [10XAllCat2GroupFamilies(G)[110X returns a
  list  of  lists. The [22Xk[122X-th list contains the positions of the cat[22X^2[122X-groups in
  [10XAllCat2Groups(G)[110X  which  are  isomorphic to the [22Xk[122X-th representative. So, for
  [10Xd12[110X, the [22X41[122X cat[22X^2[122X-groups form [22X10[122X classes, and the sizes of these classes are
  [10X[6,6,6,6,3,6,3,2,2,1][110X. Four of these classes contain symmetric cat[22X^2[122X-groups.[133X
  
  [33X[0;0YThe field [10XCatnGroupNumbers(G).cat2[110X is the number of cat[22X^2[122X-groups on [22XG[122X, while
  [10XCatnGroupNumbers(G).iso2[110X  is  the  number  of  isomorphism  classes of these
  cat[22X^2[122X-groups.  Also  [10XCatnGroupNumbers(G).symm[110X  is the number of cat[22X^2[122X-groups
  whose  [10XUp2DimensionalGroup[110X  is  the same as the [10XLeft2DimensionalGroup[110X, while
  [10XCatnGroupNumbers(G).siso[110X  is  the  number  of  isomorphism  classes of these
  symmetric cat[22X^2[122X-groups.[133X
  
  [33X[0;0YProvided  that  [10XCatnGroupLists(G).omit[110X  is  not set to [10Xtrue[110X, [13Xsorted[113X lists of
  generating pairs, and of the classes they belong to, are added to the record
  [10XCatnGroupLists[110X.  For  example  [10X[5,7][110X  in  these lists for [10Xd12[110X indicates that
  there  is  a cat[22X^2[122X-group generated by the fifth and seventh cat[22X^1[122X-groups and
  that  this  is  in  the  second class whose representative is [10X[1,7][110X. Classes
  [10X[1,5,8,10][110X contain symmetric cat[22X^2[122X-groups.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XAllCat2GroupsNumber( d12 );[127X[104X
    [4X[28X41[128X[104X
    [4X[25Xgap>[125X [27Xreps2 := AllCat2GroupsUpToIsomorphism( d12 );;[127X[104X
    [4X[25Xgap>[125X [27XLength( reps2 );[127X[104X
    [4X[28X10[128X[104X
    [4X[25Xgap>[125X [27XList( reps2, C -> StructureDescription( C ) );[127X[104X
    [4X[28X[ [ "D12", "C2", "C2", "C2" ], [ "D12", "C2", "C2 x C2", "C2" ], [128X[104X
    [4X[28X  [ "D12", "C2", "S3", "C2" ], [ "D12", "C2", "D12", "C2" ], [128X[104X
    [4X[28X  [ "D12", "C2 x C2", "C2 x C2", "C2 x C2" ], [ "D12", "C2 x C2", "S3", "C2" ][128X[104X
    [4X[28X    , [ "D12", "C2 x C2", "D12", "C2 x C2" ], [ "D12", "S3", "S3", "S3" ], [128X[104X
    [4X[28X  [ "D12", "S3", "D12", "S3" ], [ "D12", "D12", "D12", "D12" ] ][128X[104X
    [4X[25Xgap>[125X [27Xfams := AllCat2GroupFamilies( d12 );[127X[104X
    [4X[28X[ [ 1, 2, 3, 4, 5, 6 ], [ 7, 8, 10, 11, 13, 14 ], [ 16, 17, 18, 23, 24, 25 ], [128X[104X
    [4X[28X  [ 30, 31, 32, 33, 34, 35 ], [ 9, 12, 15 ], [ 19, 20, 21, 26, 27, 28 ], [128X[104X
    [4X[28X  [ 36, 37, 38 ], [ 22, 29 ], [ 39, 40 ], [ 41 ] ][128X[104X
    [4X[25Xgap>[125X [27XCatnGroupNumbers( d12 );[127X[104X
    [4X[28Xrec( cat1 := 12, cat2 := 41, idem := 21, iso1 := 4, iso2 := 10, [128X[104X
    [4X[28X  isopredg := 0, predg := 0, siso := 4, symm := 12 )[128X[104X
    [4X[25Xgap>[125X [27XCatnGroupLists( d12 );[127X[104X
    [4X[28Xrec( allcat2pos := [ 1, 7, 9, 16, 19, 22, 30, 36, 39, 41 ],[128X[104X
    [4X[28X  cat2classes := [128X[104X
    [4X[28X    [ [ [ 1, 1 ], [ 2, 2 ], [ 3, 3 ], [ 4, 4 ], [ 5, 5 ], [ 6, 6 ] ], [128X[104X
    [4X[28X      [ [ 1, 7 ], [ 5, 7 ], [ 2, 8 ], [ 6, 8 ], [ 3, 9 ], [ 4, 9 ] ], [128X[104X
    [4X[28X      [ [ 1, 10 ], [ 2, 10 ], [ 3, 10 ], [ 4, 11 ], [ 5, 11 ], [ 6, 11 ] ], [128X[104X
    [4X[28X      [ [ 1, 12 ], [ 2, 12 ], [ 3, 12 ], [ 4, 12 ], [ 5, 12 ], [ 6, 12 ] ], [128X[104X
    [4X[28X      [ [ 7, 7 ], [ 8, 8 ], [ 9, 9 ] ], [128X[104X
    [4X[28X      [ [ 7, 10 ], [ 8, 10 ], [ 9, 10 ], [ 7, 11 ], [ 8, 11 ], [ 9, 11 ] ], [128X[104X
    [4X[28X      [ [ 7, 12 ], [ 8, 12 ], [ 9, 12 ] ], [ [ 10, 10 ], [ 11, 11 ] ], [128X[104X
    [4X[28X      [ [ 10, 12 ], [ 11, 12 ] ], [ [ 12, 12 ] ] ], [128X[104X
    [4X[28X  cat2pairs := [ [ 1, 1 ], [ 1, 7 ], [ 1, 10 ], [ 1, 12 ], [ 2, 2 ], [128X[104X
    [4X[28X      [ 2, 8 ], [ 2, 10 ], [ 2, 12 ], [ 3, 3 ], [ 3, 9 ], [ 3, 10 ], [128X[104X
    [4X[28X      [ 3, 12 ], [ 4, 4 ], [ 4, 9 ], [ 4, 11 ], [ 4, 12 ], [ 5, 5 ], [128X[104X
    [4X[28X      [ 5, 7 ], [ 5, 11 ], [ 5, 12 ], [ 6, 6 ], [ 6, 8 ], [ 6, 11 ], [128X[104X
    [4X[28X      [ 6, 12 ], [ 7, 7 ], [ 7, 10 ], [ 7, 11 ], [ 7, 12 ], [ 8, 8 ], [128X[104X
    [4X[28X      [ 8, 10 ], [ 8, 11 ], [ 8, 12 ], [ 9, 9 ], [ 9, 10 ], [ 9, 11 ], [128X[104X
    [4X[28X      [ 9, 12 ], [ 10, 10 ], [ 10, 12 ], [ 11, 11 ], [ 11, 12 ], [ 12, 12 ] ],[128X[104X
    [4X[28X  omit := false, pisopos := [  ], sisopos := [ 1, 5, 8, 10 ] )[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
