  
  [1X7 [33X[0;0YCrossed squares and their morphisms[133X[101X
  
  [33X[0;0YCrossed  squares  were  introduced  by  Guin-Wal\'ery  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 [22XmathcalS[122X consists of the following:[133X
  
  [30X    [33X[0;6YGroups [22XS_J[122X for each of the four subsets [22XJ ⊆ [2][122X;[133X
  
  [30X    [33X[0;6Ya commutative diagram of group homomorphisms:[133X
  
  
              [33X[1;12Y[24X [33X[0;6Y\ddot{\partial}_1 : S_{[2]} \to S_{\{2\}}, \quad
              \ddot{\partial}_2 : S_{[2]} \to S_{\{1\}}, \quad
              \dot{\partial}_1 : S_{\{1\}} \to S_{\emptyset}, \quad
              \dot{\partial}_2 : S_{\{2\}} \to S_{\emptyset};[133X [124X[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;0YThe following axioms must be satisfied for all [22Xl ∈ S_[2], m,m_1,m_2 ∈ S_{1},
  n,n_1,n_2 ∈ S_{2}, p ∈ S_∅[122X:[133X
  
  [30X    [33X[0;6Ythe homomorphisms [22Xddot∂_1, ddot∂_2[122X preserve the action of [22XS_∅[122X~;[133X
  
  [30X    [33X[0;6Yeach of[133X
  
  
              [33X[1;12Y[24X [33X[0;6Y\ddot{\mathcal{S}}_1 = (\ddot{\partial}_1 : S_{[2]} \to
              S_{\{2\}}), \ddot{\mathcal{S}}_2 = (\ddot{\partial}_2 : S_{[2]}
              \to S_{\{1\}}), \dot{\mathcal{S}}_1 = (\dot{\partial}_1 :
              S_{\{1\}} \to S_{\emptyset}), \dot{\mathcal{S}}_2 =
              (\dot{\partial}_2 : S_{\{2\}} \to S_{\emptyset}),[133X [124X[133X
  
  
        [33X[0;6Yand the diagonal[133X
  
  
              [33X[1;12Y[24X [33X[0;6Y\mathcal{S}_{12} = (\partial_{12} :=
              \dot{\partial}_1\ddot{\partial}_2 =
              \dot{\partial}_2\ddot{\partial}_1 : S_{[2]} \to S_{\emptyset})[133X [124X[133X
  
  
        [33X[0;6Yare crossed modules (with actions via [22XS_∅[122X);[133X
  
  [30X    [33X[0;6Y[22X⊠[122X is a [13Xcrossed pairing[113X:[133X
  
        [30X    [33X[0;12Y[22X(m_1m_2 ⊠ n) = (m_1 ⊠ n)^m_2 (m_2 ⊠ n)[122X,[133X
  
        [30X    [33X[0;12Y[22X(m ⊠ n_1n_2) = (m ⊠ n_2) (m ⊠ n_1)^n_2[122X,[133X
  
        [30X    [33X[0;12Y[22X(m ⊠ n)^p = (m^p ⊠ n^p)[122X;[133X
  
  [30X    [33X[0;6Y[22Xddot∂_1  (m ⊠ n) = (n^-1)^m n[122X \quad \mbox{and} \quad [22Xddot∂_2 (m ⊠ n) =
        m^-1 m^n[122X,[133X
  
  [30X    [33X[0;6Y[22X(m  ⊠ ddot∂_1 l) = (l^-1)^m l[122X \quad \mbox{and} \quad [22X(ddot∂_2 l ⊠ n) =
        l^-1 l^n[122X.[133X
  
  [33X[0;0YNote  that  the  actions  of  [22XS_{1}[122X  on [22XS_{2}[122X and [22XS_{2}[122X on [22XS_{1}[122X via [22XS_∅[122X are
  compatible since[133X
  
  
        [33X[1;6Y[24X[33X[0;0Y{m_1}^{(n^m)} \;=\; {m_1}^{\dot{\partial}_2(n^m)} \;=\;
        {m_1}^{m^{-1}(\dot{\partial}_2 n)m} \;=\; (({m_1}^{m^{-1}})^n)^m.[133X [124X[133X
  
  
  
  [1X7.1 [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. When times allows, cat2-groups will also be
  implemented,  with  conversion  between  the  two  types  of structure. Some
  standard  constructions  of  crossed squares are listed below. At present, a
  limited  number  of  constructions  are  implemented.  Morphisms  of crossed
  squares have also been implemented, though there is a lot still to do.[133X
  
  [1X7.1-1 XSq[101X
  
  [29X[2XXSq[102X( [3Xargs[103X ) [32X function
  [29X[2XXSqByNormalSubgroups[102X( [3XP[103X, [3XN[103X, [3XM[103X, [3XL[103X ) [32X operation
  [29X[2XActorXSq[102X( [3XX0[103X ) [32X operation
  [29X[2XTranspose3dGroup[102X( [3XS0[103X ) [32X attribute
  [29X[2XName[102X( [3XS0[103X ) [32X attribute
  
  [33X[0;0YHere are some standard examples of crossed squares.[133X
  
  [30X    [33X[0;6YIf  [22XM,  N[122X  are  normal subgroups of a group [22XP[122X, and [22XL = M ∩ N[122X, then the
        four  inclusions, [22XL -> N,~ L -> M,~ M -> P,~ N -> P[122X, together with the
        actions  of  [22XP[122X  on  [22XM,  N[122X  and [22XL[122X given by conjugation, and the crossed
        pairing[133X
  
  
              [33X[1;12Y[24X [33X[0;6Y\boxtimes \;:\; M \times N \to M\cap N, \quad (m,n) \mapsto
              [m,n] \,=\, m^{-1}n^{-1}mn \,=\,(n^{-1})^mn \,=\, m^{-1}m^n[133X [124X[133X
  
  
        [33X[0;6Yis   a   crossed   square.   This   construction   is  implemented  as
        [10XXSqByNormalSubgroups(P,N,M,L);[110X.[133X
  
  [30X    [33X[0;6YThe actor [22XmathcalA(mathcalX_0)[122X of a crossed module [22XmathcalX_0[122X has been
        described in Chapter 5. The crossed pairing is given by[133X
  
  
              [33X[1;12Y[24X [33X[0;6Y\boxtimes \;:\; R \times W \,\to\, S, \quad (r,\chi)
              \,\mapsto\, \chi r~.[133X [124X[133X
  
  
        [33X[0;6YThis is implemented as [10XActorXSq( X0 );[110X.[133X
  
  [30X    [33X[0;6YThe  [13Xtranspose[113X  of  [22XmathcalS[122X  is  the  crossed  square  [22XtildemathcalS}[122X
        obtained  by interchanging [22XS_{1}[122X with [22XS_{2}[122X, [22Xddot∂_1[122X with [22Xddot∂_2[122X, and
        [22Xdot∂_1[122X with [22Xdot∂_2[122X. The crossed pairing is given by[133X
  
  
              [33X[1;12Y[24X [33X[0;6Y\tilde{\boxtimes} \;:\; S_{\{2\}} \times S_{\{1\}} \to S_{[2]},
              \quad (n,m) \;\mapsto\; n\,\tilde{\boxtimes}\,m := (m \boxtimes
              n)^{-1}~.[133X [124X[133X
  
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27Xc := (11,12,13,14,15,16);;[127X[104X
    [4X[25Xgap>[125X [27Xd := (12,16)(13,15);;[127X[104X
    [4X[25Xgap>[125X [27Xcd := c*d;;[127X[104X
    [4X[25Xgap>[125X [27Xd12 := Group( [ c, d ] );;[127X[104X
    [4X[25Xgap>[125X [27Xs3a := Subgroup( d12, [ c^2, d ] );;[127X[104X
    [4X[25Xgap>[125X [27Xs3b := Subgroup( d12, [ c^2, cd ] );;[127X[104X
    [4X[25Xgap>[125X [27Xc3 := Subgroup( d12, [ c^2 ] );;[127X[104X
    [4X[25Xgap>[125X [27XSetName( d12, "d12");  SetName( s3a, "s3a" );[127X[104X
    [4X[25Xgap>[125X [27XSetName( s3b, "s3b" );  SetName( c3, "c3" );[127X[104X
    [4X[25Xgap>[125X [27XXSconj := XSqByNormalSubgroups( d12, s3b, s3a, c3 );[127X[104X
    [4X[28X[  c3 -> s3b ][128X[104X
    [4X[28X[  |      |  ][128X[104X
    [4X[28X[ s3a -> d12 ][128X[104X
    [4X[25Xgap>[125X [27XName( XSconj );[127X[104X
    [4X[28X"[c3->s3b,s3a->d12]"[128X[104X
    [4X[25Xgap>[125X [27XXStrans := Transpose3dGroup( XSconj );[127X[104X
    [4X[28X[  c3 -> s3a ][128X[104X
    [4X[28X[  |      |  ][128X[104X
    [4X[28X[ s3b -> d12 ][128X[104X
    [4X[25Xgap>[125X [27XX12 := XModByNormalSubgroup( d12, s3a );[127X[104X
    [4X[28X[s3a->d12][128X[104X
    [4X[25Xgap>[125X [27XXSact := ActorXSq( X12 );[127X[104X
    [4X[28Xcrossed square with:[128X[104X
    [4X[28X      up = Whitehead[s3a->d12][128X[104X
    [4X[28X    left = [s3a->d12][128X[104X
    [4X[28X    down = Norrie[s3a->d12][128X[104X
    [4X[28X   right = Actor[s3a->d12][128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X7.1-2 IsXSq[101X
  
  [29X[2XIsXSq[102X( [3Xobj[103X ) [32X property
  [29X[2XIs3dObject[102X( [3Xobj[103X ) [32X property
  [29X[2XIsPerm3dObject[102X( [3Xobj[103X ) [32X property
  [29X[2XIsPc3dObject[102X( [3Xobj[103X ) [32X property
  [29X[2XIsFp3dObject[102X( [3Xobj[103X ) [32X property
  [29X[2XIsPreXSq[102X( [3Xobj[103X ) [32X property
  
  [33X[0;0YThese  are  the  basic  properties  for  3d-groups,  and  crossed squares in
  particular.[133X
  
  [1X7.1-3 Up2dGroup[101X
  
  [29X[2XUp2dGroup[102X( [3XXS[103X ) [32X attribute
  [29X[2XLeft2dGroup[102X( [3XXS[103X ) [32X attribute
  [29X[2XDown2dGroup[102X( [3XXS[103X ) [32X attribute
  [29X[2XRight2dGroup[102X( [3XXS[103X ) [32X attribute
  [29X[2XDiagonalAction[102X( [3XXS[103X ) [32X attribute
  [29X[2XXPair[102X( [3XXS[103X ) [32X attribute
  [29X[2XImageElmXPair[102X( [3XXS[103X, [3Xpair[103X ) [32X operation
  
  [33X[0;0YIn  this implementation the attributes used in the construction of a crossed
  square  [10XXS[110X  are  the  four  crossed  modules (2d-groups) on the sides of the
  square; the diagonal action of [22XP[122X on [22XL[122X, and the crossed pairing.[133X
  
  [33X[0;0YThe  [5XGAP[105X  development  team  have  suggested that crossed pairings should be
  implemented  as  a  special case of [10XBinaryMappings[110X -- a structure which does
  not  yet  exist  in  [5XGAP[105X. As a temporary measure, crossed pairings have been
  implemented using [10XMapping2ArgumentsByFunction[110X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XUp2dGroup( XSconj );[127X[104X
    [4X[28X[c3->s3b][128X[104X
    [4X[25Xgap>[125X [27XRight2dGroup( XSact );[127X[104X
    [4X[28XActor[s3a->d12][128X[104X
    [4X[25Xgap>[125X [27Xxpconj := XPair( XSconj );;[127X[104X
    [4X[25Xgap>[125X [27XImageElmXPair( xpconj, [ (12,16)(13,15), (11,16)(12,15)(13,14) ] );[127X[104X
    [4X[28X(11,15,13)(12,16,14)[128X[104X
    [4X[25Xgap>[125X [27Xdiag := DiagonalAction( XSact );[127X[104X
    [4X[28X[ (2,3)(5,6), (1,2)(4,6) ] -> [128X[104X
    [4X[28X[ [ (11,13,15)(12,14,16), (12,16)(13,15) ] -> [ (11,15,13)(12,16,14), [128X[104X
    [4X[28X      (12,16)(13,15) ], [ (11,13,15)(12,14,16), (12,16)(13,15) ] -> [128X[104X
    [4X[28X    [ (11,15,13)(12,16,14), (11,13)(14,16) ] ][128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  
  [1X7.2 [33X[0;0YMorphisms of crossed squares[133X[101X
  
  [33X[0;0YThis   section   describes   an   initial  implementation  of  morphisms  of
  (pre-)crossed squares.[133X
  
  [1X7.2-1 Source[101X
  
  [29X[2XSource[102X( [3Xmap[103X ) [32X attribute
  [29X[2XRange[102X( [3Xmap[103X ) [32X attribute
  [29X[2XUp2dMorphism[102X( [3Xmap[103X ) [32X attribute
  [29X[2XLeft2dMorphism[102X( [3Xmap[103X ) [32X attribute
  [29X[2XDown2dMorphism[102X( [3Xmap[103X ) [32X attribute
  [29X[2XRight2dMorphism[102X( [3Xmap[103X ) [32X attribute
  
  [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
  
  [1X7.2-2 IsXSqMorphism[101X
  
  [29X[2XIsXSqMorphism[102X( [3Xmap[103X ) [32X property
  [29X[2XIsPreXSqMorphism[102X( [3Xmap[103X ) [32X property
  [29X[2XIsBijective[102X( [3Xmor[103X ) [32X property
  [29X[2XIsEndomorphism3dObject[102X( [3Xmor[103X ) [32X property
  [29X[2XIsAutomorphism3dObject[102X( [3Xmor[103X ) [32X property
  
  [33X[0;0YA  morphism  [10Xmor[110X  between  two pre-crossed squares [22XmathcalS_1[122X and [22XmathcalS_2[122X
  consists  of  four crossed module morphisms [10XUp2dMorphism( mor )[110X, mapping the
  [10XUp2dGroup[110X  of  [22XmathcalS_1[122X  to  that  of  [22XmathcalS_2[122X,  [10XLeft2dMorphism( mor )[110X,
  [10XDown2dMorphism(  mor  )[110X and [10XRight2dMorphism( 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 [10XIsXSqMorphism[110X does not perform all the
  required checks.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27Xad12 := GroupHomomorphismByImages( d12, d12, [c,d], [c,d^c] );;[127X[104X
    [4X[25Xgap>[125X [27Xas3a := GroupHomomorphismByImages( s3a, s3a, [c^2,d], [c^2,d^c] );;[127X[104X
    [4X[25Xgap>[125X [27Xas3b := GroupHomomorphismByImages( s3b, s3b, [c^2,cd], [c^2,cd^c] );;[127X[104X
    [4X[25Xgap>[125X [27Xidc3 := IdentityMapping( c3 );;[127X[104X
    [4X[25Xgap>[125X [27Xupconj := Up2dGroup( XSconj );;[127X[104X
    [4X[25Xgap>[125X [27Xleftconj := Left2dGroup( XSconj );; [127X[104X
    [4X[25Xgap>[125X [27Xdownconj := Down2dGroup( XSconj );; [127X[104X
    [4X[25Xgap>[125X [27Xrightconj := Right2dGroup( XSconj );; [127X[104X
    [4X[25Xgap>[125X [27Xup := XModMorphismByHoms( upconj, upconj, idc3, as3b );[127X[104X
    [4X[28X[[c3->s3b] => [c3->s3b]][128X[104X
    [4X[25Xgap>[125X [27Xleft := XModMorphismByHoms( leftconj, leftconj, idc3, as3a );[127X[104X
    [4X[28X[[c3->s3a] => [c3->s3a]][128X[104X
    [4X[25Xgap>[125X [27Xdown := XModMorphismByHoms( downconj, downconj, as3a, ad12 );[127X[104X
    [4X[28X[[s3a->d12] => [s3a->d12]][128X[104X
    [4X[25Xgap>[125X [27Xright := XModMorphismByHoms( rightconj, rightconj, as3b, ad12 );[127X[104X
    [4X[28X[[s3b->d12] => [s3b->d12]][128X[104X
    [4X[25Xgap>[125X [27Xautoconj := XSqMorphism( XSconj, XSconj, up, left, down, right );; [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 = [c3->s3b,s3a->d12][128X[104X
    [4X[28X:     Range = [c3->s3b,s3a->d12][128X[104X
    [4X[28X:     order = 3[128X[104X
    [4X[28X:    up-left: [ [ (11,13,15)(12,14,16) ], [ (11,13,15)(12,14,16) ] ][128X[104X
    [4X[28X:   up-right: [ [ (11,13,15)(12,14,16), (11,16)(12,15)(13,14) ],[128X[104X
    [4X[28X  [ (11,13,15)(12,14,16), (11,12)(13,16)(14,15) ] ][128X[104X
    [4X[28X:  down-left: [ [ (11,13,15)(12,14,16), (12,16)(13,15) ],[128X[104X
    [4X[28X  [ (11,13,15)(12,14,16), (11,13)(14,16) ] ][128X[104X
    [4X[28X: down-right: [ [ (11,12,13,14,15,16), (12,16)(13,15) ],[128X[104X
    [4X[28X  [ (11,12,13,14,15,16), (11,13)(14,16) ] ][128X[104X
    [4X[25Xgap>[125X [27XKnownPropertiesOfObject( autoconj );[127X[104X
    [4X[28X[ "IsTotal", "IsSingleValued", "IsInjective", "IsSurjective", "Is3dMapping",[128X[104X
    [4X[28X  "IsPreXSqMorphism", "IsXSqMorphism", "IsEndomorphism3dObject" ][128X[104X
    [4X[25Xgap>[125X [27XIsAutomorphism3dObject( autoconj );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
