Goto Chapter: Top 1 2 3 4 5 6 7 8 9 Bib Ind
 [Top of Book]  [Contents]   [Previous Chapter]   [Next Chapter] 

7 Double Groupoids
 7.1 Double groupoid squares
 7.2 Double groupoids with more than one piece
 7.3 Generators of a double groupoid
 7.4 Starting with two groupoids
 7.5 Double groupoid homomorphisms

7 Double Groupoids

A double groupoid is a double category in which all the category structures are groupoids. For the most general type of double groupoid there is also an associated pre-crossed module. In this package we consider only basic double groupoids, which do not involve pre-crossed modules. The more general case will be discussed in the XMod package.

In a double groupoid, as well as objects and arrows, we need a set of squares. A square is bounded by four arrows, two horizontal and two vertical, and there is a horizontal groupoid structure and a vertical groupoid structure on these squares.

Double groupoids can be considered where the vertical arrows come from one groupoid, and the horizontal arrows from another. The double groupoids constructed here are special in that all four arrows come from the same groupoid. We call these edge-symmetric double groupoids.

This addition to the package is very experimental, and will be extended as time permits.

7.1 Double groupoid squares

Let \(G\) be a connected groupoid with object set \(\Omega\). Let \(\Box(G)\) be the set of squares with objects from \(\Omega\) at each corner; plus two vertical arrows and two horizontal arrows from Arr\((G)\). The following picture illustrates a square \(s_1\):

\[ \vcenter{\xymatrix @=4pc{ u_1 \ar[r]^{a_1} \ar[d]_{b_1} & v_1 \ar[d]^{c_1} \\ w_1 \ar[r]_{d_1} & x_1 }} \]

We name the four arrows UpArrow(s), LeftArrow(s), RightArrow(s) and DownArrow(s).

We think of the square \(s_1\) being based at the bottom, right-hand corner, \(x_1\).

The boundary of the square is the loop \((x_1, d_1^{-1}b_1^{-1}a_1c_1, x_1) = (x_1,\delta(s_1),x_1)\).

7.1-1 SinglePieceBasicDoubleGroupoid
‣ SinglePieceBasicDoubleGroupoid( gpd )( operation )
‣ DoubleGroupoid( args )( function )
‣ SquareOfArrows( gpd, up, lt, rt, dn )( operation )
‣ UpArrow( sq )( attribute )
‣ LeftArrow( sq )( attribute )
‣ RightArrow( sq )( attribute )
‣ DownArrow( sq )( attribute )
‣ BoundaryOfSquare( sq )( operation )
‣ DoubleGroupoidOfSquare( sq )( operation )

The operation SinglePieceBasicDoubleGroupoid constructs the double groupoid \(\Box(G)\) on a groupoid \(G\). The number of squares in this double groupoid is the product of the number of objects with the size of the group all raised to the fourth power. When viewing or printing a square, the boundary element is shown in the centre.

The global function DoubleGroupoid may be used instead of this operation, and will work with various other input parameters.


gap> DGd8 := SinglePieceBasicDoubleGroupoid( Gd8 );; 
gap> DGd8!.groupoid;
Gd8
gap> DGd8!.objects;
[ -9, -8, -7 ]
gap> [ Size(DGd8), (3*8)^4 ]; 
[ 331776, 331776 ]
gap> SetName( DGd8, "DGd8" );
gap> a1 := Arrow( Gd8, (5,7), -7, -8 );;
gap> b1 := Arrow( Gd8, (6,8), -7, -7 );;
gap> c1 := Arrow( Gd8, (5,6)(7,8), -8, -9 );;
gap> d1 := Arrow( Gd8, (5,6,7,8), -7, -9 );;
gap> bdy1 := d1^-1 * b1^-1 * a1 * c1;
[(6,8) : -9 -> -9]
gap> sq1 := SquareOfArrows( DGd8, a1, b1, c1, d1 ); 
[-7] ------- (5,7) ------> [-8]
  |                          |
(6,8)        (6,8)        (5,6)(7,8)
  V                          V
[-7] ----- (5,6,7,8) ----> [-9]
gap> sq1 in DGd8;
true
gap> UpArrow( sq1 );
[(5,7) : -7 -> -8]
gap> LeftArrow( sq1 );
[(6,8) : -7 -> -7]
gap> RightArrow( sq1 );
[(5,6)(7,8) : -8 -> -9]
gap> DownArrow( sq1 );
[(5,6,7,8) : -7 -> -9]
gap> BoundaryOfSquare( sq1 );
[(6,8) : -9 -> -9]
gap> DoubleGroupoidOfSquare( sq1 );
DGd8

7.1-2 IsCommutingSquare
‣ IsCommutingSquare( sq )( property )

The square \(s_1\) is commuting if \(a_1*c_1 = b_1*d_1\), so that its boundary is the identity. The set of commutative squares in \(\Box(G)\) forms the commutative sub-double groupoid of \(\Box(G)\).


gap> a2 := Arrow( Gd8, (6,8), -8, -9 );;
gap> c2 := Arrow( Gd8, (5,7)(6,8), -9, -8);;
gap> d2 := Arrow( Gd8, (5,6,7,8), -9, -8 );; 
gap> sq2 := SquareOfArrows( DGd8, a2, c1, c2, d2 );
[-8] -------- (6,8) -------> [-9]
  |                            |
(5,6)(7,8)        ()        (5,7)(6,8)
  V                            V
[-9] ------ (5,6,7,8) -----> [-8]
gap> bdy2 := BoundaryOfSquare( sq2 );
[() : -8 -> -8]
gap> [ IsCommutingSquare(sq1), IsCommutingSquare(sq2) ]; 
[ false, true ]

7.1-3 TransposedSquare
‣ TransposedSquare( sq )( operation )
‣ IsClosedUnderTransposition( sq )( property )

The transpose of the square \(s_1\), as with matrix transposition, is obtained by interchanging \(a_1\) with \(b_1\) and \(c_1\) with \(d_1\). Its boundary is the inverse of the boundary of \(s_1\).


gap> tsq1 := TransposedSquare( sq1 );
[-7] ------- (6,8) ------> [-7]
  |                         |
(5,7)        (6,8)        (5,6,7,8)
  V                         V
[-8] ---- (5,6)(7,8) ---> [-9]
gap> IsClosedUnderTransposition( sq1 );  
false

7.1-4 HorizontalProduct
‣ HorizontalProduct( sq1, sq2 )( operation )

When RightArrow\((s_1)\) = LeftArrow\((s_2)\) we may compose \(s_1\) and \(s_2\) horizontally to form the square \(s_1 (\rightarrow) s_2\) = HorizontalProduct\((s_1,s_2)\) as illustrated here:

\[ \vcenter{\xymatrix @=4pc{ u_1 \ar[r]^{a_1} \ar[d]_{b_1} & v_1 \ar[r]^{a_2} \ar[d]^{c_1} & v_2 \ar[d]^{c_2} \ar@{}[dr]|= & u_1 \ar[r]^{a_1a_2} \ar[d]_{b_1} & v_2 \ar[d]^{c_2} \\ w_1 \ar[r]_{d_1} & x_1 \ar[r]_{d_2} & x_2 & w_1 \ar[r]_{d_1d_2} & x_2 }} \]

Notice that the boundary of the composite satisfies the identity:

\[ \delta(s_1 (\rightarrow) s_2) ~=~ (d_1d_2)^{-1}b_1^{-1}(a_1a_2)c_2 ~=~ d_2^{-1}(d_1^{-1}b_1^{-1}a_1c_1)d_2(d_2^{-1}c_1^{-1}a_2c_2) ~=~ (\delta s_1)^{d_2} (\delta s_2). \]

(This operation was called LeftRightProduct in versions up to 1.76.)


gap> LeftArrow( sq2 ) = RightArrow( sq1 ); 
true
gap> sq12 := HorizontalProduct( sq1, sq2 );
[-7] ----- (5,7)(6,8) ----> [-9]
  |                          |
(6,8)        (5,7)        (5,7)(6,8)
  V                          V
[-7] ----- (5,7)(6,8) ----> [-8]
gap> bdy12 := BoundaryOfSquare( sq12 );
[(5,7) : -8 -> -8]
gap> (bdy1^d2) * bdy2 = bdy12;
true

7.1-5 VerticalProduct
‣ VerticalProduct( sq1, sq3 )( operation )

When DownArrow\((s_1)\) = UpArrow\((s_3)\) we may compose \(s_1\) and \(s_3\) vertically to form \(s_1 (\downarrow) s_3\) = VerticalProduct\((s_1,s_3)\) illustrated by:

\[ \vcenter{\xymatrix @=2pc{ u_1 \ar[rr]^{a_1} \ar[dd]_{b_1} && v_1 \ar[dd]^{c_1} & & && \\ && & & u_1 \ar[rr]^{a_1} \ar[dd]_{b_1b_3} && v_1 \ar[dd]^{c_1c_3} \\ w_1 \ar[rr]_{d_1} \ar[dd]_{b_3} && x_1 \ar[dd]^{c_3} &=& && \\ && & & w_3 \ar[rr]_{d_3} && x_3 \\ w_3 \ar[rr]_{d_3} && x_3 }} \]

This time the boundary condition satisfies the identity:

\[ \delta(s_1 (\downarrow) s_3) ~=~ d_3^{-1}(b_1b_3)^{-1}a_1(c_1c_3) ~=~ (d_3^{-1}b_3^{-1}d_1c_3)c_3^{-1}(d_1^{-1}b_1^{-1}a_1c_1)c_3 ~=~ (\delta s_3)(\delta s_1)^{c_3}. \]

(This operation was called UpDownProduct in versions up to 1.76.)


gap> b3 := Arrow( Gd8, (5,7), -7, -9 );;
gap> c3 := Arrow( Gd8, (6,8), -9, -8);;
gap> d3 := Arrow( Gd8, (5,8)(6,7), -9, -8 );; 
gap> sq3 := SquareOfArrows( DGd8, d1, b3, c3, d3 );
[-7] ---- (5,6,7,8) ---> [-9]
  |                        |
(5,7)       (6,8)       (6,8)
  V                        V
[-9] ---- (5,8)(6,7) ---> [-8]
gap> bdy3 := BoundaryOfSquare( sq3 );
[(6,8) : -8 -> -8]
gap> UpArrow( sq3 ) = DownArrow( sq1 ); 
true
gap> sq13 := VerticalProduct( sq1, sq3 );
[-7] -------- (5,7) -------> [-8]
  |                           |
(5,7)(6,8)        ()        (5,8,7,6)
  V                           V
[-9] ----- (5,8)(6,7) ----> [-8]


Vertical and horizontal compositions commute, so we may construct products such as:

\[ \vcenter{\xymatrix @=2pc{ u_1 \ar[rr]^{a_1} \ar[dd]_{b_1} && v_1 \ar[rr]^{a_2} \ar[dd]|{c_1} && v_2 \ar[dd]^{c_2} & & &&& \\ && && & & u_1 \ar[rrr]^{a_1a_2} \ar[dd]_{b_1b_3} &&& v_2 \ar[dd]^{c_2c_4} \\ w_1 \ar[rr]|{d_1} \ar[dd]_{b_3} && x_1 \ar[rr]|{d_2} \ar[dd]|{c_3} && x_2 \ar[dd]^{c_4} &=& &&& \\ && && & & w_3 \ar[rrr]_{d_3d_4} &&& x_4 \\ w_3 \ar[rr]_{d_3} && x_3 \ar[rr]_{d_4} && x_4 }} \]

In our example, after adding \(c_4\) and \(d_4\), it is routine to check that the two ways of computing the product of four squares give the same answer.

\[ \vcenter{\xymatrix @=2pc{ -7 \ar[rr]^{(5,7)} \ar[dd]_{(6,8)} && -8 \ar[rr]^{(6,8)} \ar[dd]|{(5,6)(7,8)} && -9 \ar[dd]^{(5,7)(6,8)} & & &&& \\ && && & & -7 \ar[rrr]^{(5,7)(6,8)} \ar[dd]^{(5,7)(6,8)} &&& -9 \ar[dd]_{(5,8,7,6)} \\ -7 \ar[rr]|{(5,6,7,8)} \ar[dd]_{(5,7)} && -9 \ar[rr]|{(5,6,7,8)} \ar[dd]|{(6,8)} && -8 \ar[dd]^{(5,6,7,8)} &=& &&& \\ && && & & -9 \ar[rrr]_{(5,7)(6,8)} &&& -7 \\ -9 \ar[rr]_{(5,8)(6,7)} && -8 \ar[rr]_{(5,6)(7,8)} && -7 }} \]


gap> c4 := Arrow( Gd8, (5,6,7,8), -8, -7);;
gap> d4 := Arrow( Gd8, (5,6)(7,8), -8, -7 );; 
gap> sq4 := SquareOfArrows( DGd8, d2, c3, c4, d4 );
[-9] ------- (5,6,7,8) ------> [-8]
  |                             |
(6,8)        (5,6,7,8)        (5,6,7,8)
  V                             V
[-8] ------ (5,6)(7,8) -----> [-7]
gap> UpArrow( sq4 ) = DownArrow( sq2 );
true
gap> LeftArrow( sq4 ) = RightArrow( sq3 ); 
true

gap> sq34 := HorizontalProduct( sq3, sq4 );
[-7] ------- (5,7)(6,8) ------> [-8]
  |                              |
(5,7)        (5,8)(6,7)        (5,6,7,8)
  V                              V
[-9] ------- (5,7)(6,8) ------> [-7]

gap> sq1234 := VerticalProduct( sq12, sq34 );
[-7] --------- (5,7)(6,8) --------> [-9]
  |                                  |
(5,7)(6,8)        (5,6,7,8)        (5,8,7,6)
  V                                  V
[-9] --------- (5,7)(6,8) --------> [-7]

gap> sq24 := VerticalProduct( sq2, sq4 ); 
[-8] ----------- (6,8) ----------> [-9]
  |                                 |
(5,8,7,6)        (5,6,7,8)        (5,8,7,6)
  V                                 V
[-8] -------- (5,6)(7,8) -------> [-7]

gap> sq1324 := HorizontalProduct( sq13, sq24 );;
gap> sq1324 = sq1234;
true

7.1-6 HorizontalIdentities
‣ HorizontalIdentities( sq )( operation )
‣ VerticalIdentities( sq )( operation )
‣ HorizontalInverses( sq )( operation )
‣ VerticalInverses( sq )( operation )

There is no single identity for the operations HorizontalProduct and VerticalProduct but there are, for each square, a left identity, a right identity, an up identity and a down identity. The composite of the three squares shown below is equal to the central square \(s\), and the other two squares are the left identity \(1_L(s)\) and the right identity \(1_R(s)\) for \(s\).

\[ \vcenter{\xymatrix @=4pc{ u \ar[r]^{1} \ar[d]_{b} & u \ar[r]^{a} \ar[d]^{b} & v \ar[r]^{1} \ar[d]_{c} & v \ar[d]^{c} \\ w \ar[r]_{1} & w \ar[r]_{d} & x \ar[r]_{1} & x }} \]


gap> hid := HorizontalIdentities( sq24 );;
gap> hid[1]; Print("\n"); hid[2];                    
[-8] --------- () --------> [-8]
  |                          |
(5,8,7,6)        ()        (5,8,7,6)
  V                          V
[-8] --------- () --------> [-8]

[-9] --------- () --------> [-9]
  |                          |
(5,8,7,6)        ()        (5,8,7,6)
  V                          V
[-7] --------- () --------> [-7]
gap> HorizontalProduct( hid[1], sq24 ) = sq24;
true
gap> HorizontalProduct( sq24, hid[2] ) = sq24;      
true

Similarly, here are the up identity \(1_U(s)\) and the down identity \(1_D(s)\) of \(s\):

\[ \vcenter{\xymatrix @=4pc{ u \ar[r]^{a} \ar[d]_{1} & v \ar[d]^{1} & w \ar[r]^{d} \ar[d]_{1} & x \ar[d]^{1} \\ u \ar[r]_{a} & v & w \ar[r]_{d} & x }} \]


gap> vid := VerticalIdentities( sq24 );;  
gap> vid[1]; Print("\n"); vid[2];                    
[-8] ---- (6,8) ---> [-9]
  |                   |
()         ()         ()
  V                   V
[-8] ---- (6,8) ---> [-9]

[-8] ---- (5,6)(7,8) ---> [-7]
  |                        |
()            ()            ()
  V                        V
[-8] ---- (5,6)(7,8) ---> [-7]
gap> VerticalProduct( vid[1], sq24 ) = sq24;
true
gap> VerticalProduct( sq24, vid[2] ) = sq24;
true

Confusingly, \(s\) has a horizontal inverse \(s^{-1}_{H}\) whose product with \(s\) is the left identity or right identity:

\[ s (\rightarrow) s^{-1}_{H} ~=~ 1_L(s), \qquad s^{-1}_{H} (\rightarrow) s ~=~ 1_R(s). \]

The boundary of \(s^{-1}_{H}\) is \(dc^{-1}a^{-1}b = (\delta(s)^{-1})^{d^{-1}}\). Here are the two products:

\[ \vcenter{\xymatrix @=4pc{ u \ar[r]^{a} \ar[d]_{b} & v \ar[r]^{a^{-1}} \ar[d]^{c} & u \ar[d]^{b} & v \ar[r]^{a^{-1}} \ar[d]_{c} & u \ar[r]^{a} \ar[d]^{b} & v \ar[d]^{c} \\ w \ar[r]_{d} & x \ar[r]_{d^{-1}} & w & x \ar[r]_{d^{-1}} & w \ar[r]_{d} & x }} \]


gap> hinv := HorizontalInverse( sq24 ); 
[-9] ----------- (6,8) ----------> [-8]
  |                                 |
(5,8,7,6)        (5,6,7,8)        (5,8,7,6)
  V                                 V
[-7] -------- (5,6)(7,8) -------> [-8]
gap> HorizontalProduct( hinv, sq24 ) = hid[2];
true
gap> HorizontalProduct( sq24, hinv ) = hid[1];      
true

Similarly, \(s\) has a vertical inverse \(s^{-1}_{V}\) whose product with \(s\) is an up or down identity: \(s (\downarrow) s^{-1}_{V} = 1_U(s)\) and \(s^{-1}_{V} (\downarrow) s = 1_D(s)\). The boundary is \(a^{-1}bdc^{-1} = (\delta(s)^{-1})^{c^{-1}}\).

\[ \vcenter{\xymatrix @=4pc{ w \ar[r]^{d} \ar[d]_{b^{-1}} & x \ar[d]^{c^{-1}} \\ u \ar[r]_{a} & v }} \]


gap> vinv := VerticalInverse( sq24 );
[-8] -------- (5,6)(7,8) -------> [-7]
  |                                 |
(5,6,7,8)        (5,8,7,6)        (5,6,7,8)
  V                                 V
[-8] ----------- (6,8) ----------> [-9]
gap> VerticalProduct( vinv, sq24 ) = vid[2];
true
gap> VerticalProduct( sq24, vinv ) = vid[1];   
true

7.1-7 Horizontal and vertical groupoids in \(\Box(G)\)

Now \(\Box(G)\) is the maximal double groupoid determined by \(G\), but in general many substructures may be formed.

The horizontal groupoid structure \(\Box_{H}(G)\) on \(\Box(G)\) has the vertical arrows as objects, and considers the usual square \(s\)

\[ \vcenter{\xymatrix @=4pc{ u \ar[r]^{a} \ar[d]_{b} & v \ar[d]^{c} \\ w \ar[r]_{d} & x }} \]

as an arrow from \(b\) to \(c\). So the arrows in \(\Box_{H}(G)\) are effectively pairs of horizontal arrows \([a,d]\). The vertex groups are isomorphic to \(G \times G\); the identity arrow at \(b\) is \(1_L(s)\); and the inverse arrow of \(s\) is \(s^{-1}_{H}\).

Similarly the vertical groupoid structure \(\Box_{V}(G)\) on \(\Box(G)\) has the horizontal arrows as objects and pairs of vertical arrows as arrows. The identity arrow at \(a\) is \(1_U(s)\), and the inverse arrow of \(s\) is \(s^{-1}_{V}\).

7.2 Double groupoids with more than one piece

As with groupoids, double groupoids may comprise a union of single piece double groupoids with disjoint object sets.

7.2-1 UnionOfPieces
‣ UnionOfPieces( pieces )( operation )
‣ Pieces( dgpd )( attribute )

The operation UnionOfPieces and the attribute Pieces, introduced in section 2.5, are also used for double groupoids. The pieces are sorted by the least object in their object lists. The ObjectList is the sorted concatenation of the objects in the pieces.

The example shows that, as well as taking the union of two double groupoids, the same object may be constructed directly from the underlying groupoids.


gap> DGc6 := SinglePieceBasicDoubleGroupoid( Gc6 );; 
gap> DGa4 := SinglePieceBasicDoubleGroupoid( Ga4 );; 
gap> DGc6s4 := DoubleGroupoid( [ DGc6, DGa4 ] );
double groupoid having 2 pieces :-
1: single piece double groupoid with:
 groupoid = Ga4
    group = a4
  objects = [ -15 .. -11 ]
2: single piece double groupoid with:
 groupoid = Gc6
    group = c6
  objects = [ -10 ]

gap> DGa4c6 := DoubleGroupoid( [ Ga4, Gc6 ] );;
gap> Pieces( DGa4c6 );
[ single piece double groupoid with:
     groupoid = Ga4
        group = a4
      objects = [ -15 .. -11 ], single piece double groupoid with:
     groupoid = Gc6
        group = c6
      objects = [ -10 ] ]

7.3 Generators of a double groupoid

Before considering the general case we investigate two special cases:

7.3-1 DoubleGroupoidWithTrivialGroup
‣ DoubleGroupoidWithTrivialGroup( obs )( operation )

When \(|\Omega|=n\) the double groupoid with trivial permutation group on these \(n\) objects contains \(n^4\) squares of the form:

\[ \vcenter{\xymatrix @=4pc{ u \ar[r]^{()} \ar[d]_{()} & v \ar[d]^{()} \\ w \ar[r]_{()} & x }} \]


gap> DGtriv := DoubleGroupoidWithTrivialGroup( [-19..-17] );
single piece double groupoid with:
 groupoid = single piece groupoid: < Group( [ () ] ), [ -19 .. -17 ] >
    group = Group( [ () ] )
  objects = [ -19 .. -17 ]

gap> Size(DGtriv);                                          
81

7.3-2 DoubleGroupoidWithSingleObject
‣ DoubleGroupoidWithSingleObject( gp, obj )( operation )

Given a group \(G\) we can form the corresponding groupoid with a single object, and from that a double groupoid on that object. The number of squares is \(|G|^4\).


gap> DGc4 := DoubleGroupoidWithSingleObject( Group((1,2,3,4)), 0 );
single piece double groupoid with:
 groupoid = single piece groupoid: < Group( [ (1,2,3,4) ] ), [ 0 ] >
    group = Group( [ (1,2,3,4) ] )
  objects = [ 0 ]

gap> Size( DGc4 );                                                 
256

7.3-3 What is the double groupoid generated by a set of squares?

This is a very experimental section. Let us consider the following list of three squares \([s_U(a,u,v),~ 1_U(v,u),~ s_U(a,u,u)]\). What is generated by the single square \(s_U(a,u,v)\)?

\[ \vcenter{\xymatrix @=4pc{ u \ar[r]^{a} \ar[d]_{1} & v \ar[d]^{1} & v \ar[r]^{1} \ar[d]_{1} & u \ar[d]_{1} & u \ar[r]^{a} \ar[d]_{1} & u \ar[d]_{1} \\ u \ar[r]_{1} & v & v \ar[r]_{1} & u & u \ar[r]_{1} & u }} \]

The first square does not compose with itself, so cannot generate anything. When constructing a group from generators there is never any need to include an identity - that is always assumed to be included. Perhaps, when constructing a double groupoid, it should be assumed that the DoubleGroupoidWithTrivialGroup on the given objects should be automatically included? In that case the square \(1_U(v,u)\) is available and can compose on the right to give \(s_U(a,u,u)\). This then composes with itself to produce squares \(s_U(a^i,u,u)\). Then, composing with identities, we obtain SinglePieceBasicDoubleGroupoid(G) where \(G\) is the groupoid with group \(\langle a \rangle\) and objects \([u,v]\). More work on this area is required!

7.4 Starting with two groupoids

In the literature on double groupoids the construction often starts with two groupoids \(G_1, G_2\), and squares have horizontal arrows chosen from \(G_1\) and vertical arrows chosen from \(G_2\). When that is the case, the boundary of a square is not defined, since arrows from \(G_1\) do not compose with those from \(G_2\). This situation may be modelled here by constructing the direct product groupoid \(G = G_1 \times G_2\) and forming a double groupoid on \(G\) in which squares have the form:

\[ \vcenter{\xymatrix @=4pc{ [u_1,u_2] \ar[r]^{[a,1]} \ar[d]_{[1,b]} & [v_1,v_2] \ar[d]^{[1,c]} \\ [w_1,w_2] \ar[r]_{[d,1]} & [x_1,x_2] }} \]


gap> Gd8c6 := DirectProduct( Gd8, Gc6 );
single piece groupoid: < Group( [ (1,2,3,4), (1,3), (5,6,7)(8,9) ] ), 
[ [ -9, -10 ], [ -8, -10 ], [ -7, -10 ] ] >
gap> SetName( Gd8c6, "Gd8c6" );
gap> DGd8c6 := SinglePieceBasicDoubleGroupoid( Gd8c6 );
single piece double groupoid with:
 groupoid = Gd8c6
    group = Group( [ (1,2,3,4), (1,3), (5,6,7)(8,9) ] )
  objects = [ [ -9, -10 ], [ -8, -10 ], [ -7, -10 ] ]

gap> emb1 := Embedding( Gd8c6, 1 );;
gap> emb2 := Embedding( Gd8c6, 2 );;
gap> a5 := Arrow( Gd8, (5,7), -9, -7 );;
gap> a6 := ImageElm( emb1, a5 );
[(1,3) : [ -9, -10 ] -> [ -7, -10 ]]
gap> d5 := Arrow( Gd8, (6,8), -9, -8 );;
gap> d6 := ImageElm( emb1, d5 );
[(2,4) : [ -9, -10 ] -> [ -8, -10 ]]
gap> b5 := Arrow( Gc6, (11,12,13), -10, -10 );;
gap> b6 := ImageElm( emb2, b5 );
[(5,6,7) : [ -9, -10 ] -> [ -9, -10 ]]
gap> c6 := Arrow( Gd8c6, (8,9), [-7,-10], [-8,-10] );;
gap> sq := SquareOfArrows( DGd8c6, a6, b6, c6, d6 );
[[ -9, -10 ]] ----- (1,3) ----> [[ -7, -10 ]]
  |                                        |
(5,6,7)        (1,3)(2,4)(5,7,6)(8,9)        (8,9)
  V                                        V
[[ -9, -10 ]] ----- (2,4) ----> [[ -8, -10 ]]

7.5 Double groupoid homomorphisms

7.5-1 DoubleGroupoidHomomorphism
‣ DoubleGroupoidHomomorphism( src, rng, hom )( operation )

A homomorphism of double groupoids is determined by a homomorphism mor between the underlying groupoids since mor determines the images of the four arrows in every square.

In the example we take the endomorphism md8 of Gd8, constructed in section 5.2-1, to produce an endomorphism of DGd8.


gap> ad8 := GroupHomomorphismByImages( d8, d8,
>               [ (5,6,7,8), (5,7) ], [ (5,8,7,6), (6,8) ] );;
gap> md8 := GroupoidHomomorphism( Gd8, Gd8, ad8, 
>               [-7,-9,-8], [(),(5,7),(6,8)] );;
gap> endDGd8 := DoubleGroupoidHomomorphism( DGd8, DGd8, md8 );
double groupoid homomorphism : DGd8 -> DGd8
gap> Display( endDGd8 );
double groupoid homomorphism: [ DGd8 ] -> [ DGd8 ]
with underlying groupoid homomorphism:
 groupoid mapping: [ Gd8 ] -> [ Gd8 ]
root homomorphism: [ [ (5,6,7,8), (5,7) ], [ (5,8,7,6), (6,8) ] ]
images of objects: [ -7, -9, -8 ]
   images of rays: [ [() : -7 -> -7], [(5,7) : -7 -> -9], [(6,8) : -7 -> -8] ]
gap> sq1;
[-7] ------- (5,7) ------> [-8]
  |                          |
(6,8)        (6,8)        (5,6)(7,8)
  V                          V
[-7] ----- (5,6,7,8) ----> [-9]
gap> ImageElm( endDGd8, sq1 );
[-8] ------- (5,7) ------> [-9]
  |                         |
(5,7)        (5,7)        (5,8,7,6)
  V                         V
[-8] ---- (5,8)(6,7) ---> [-7]

 [Top of Book]  [Contents]   [Previous Chapter]   [Next Chapter] 
Goto Chapter: Top 1 2 3 4 5 6 7 8 9 Bib Ind

generated by GAPDoc2HTML