Goto Chapter: Top 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Bib Ind
 [Top of Book]  [Contents]   [Previous Chapter]   [Next Chapter] 

11 Double Groupoids
 11.1 Double groupoid squares
 11.2 Basic double groupoids
 11.3 Commutative double groupoids

11 Double Groupoids

A double groupoid is a double category in which all the category structures are groupoids. There is also a pre-crossed module associated to the double groupoid. In a double groupoid, as well as objects and arrows we need a set of squares. A square is bounded by four arrows, two horizantal and two vertical, and there is a horizantal groupoid structure and a vertical groupoid structure on these squares. An element of the source of the pre-crossed module is located at the centre of the square, and its image under the boundary map is equal to the boundary of the square.

The double groupoids constructed here are special in that all four arrows come from the same groupoid. We call these edge-symmetric double groupoids.

It is assumed in this chapter that the reader is familiar with constructions for groupoids given in the Groupoids package, such as SinglePieceBasicDoubleGroupoid. Such groupoids are basic, in that there is no pre-crossed module involvement.

This chapter is experimental, and will be extended as soon as possible.

11.1 Double groupoid squares

Let G be a groupoid with object set . Let be the set of squares with objects from at each corner; plus two vertical arrows and two horizantal arrows from Arr(G). Further, let calP = (∂ : S -> R) be a pre-crossed module, and let m_1 ∈ S be placed at the centre of the square. The following picture illustrates the situation:

\vcenter{\xymatrix @=4pc{ u_1 \ar[r]^{a_1} \ar[d]_{d_1}\ar@{}[dr] |{m_1} & u_2 \ar[d]^{e_1} \\ v_1 \ar[r]_{b_1} & v_2 }}

We think of the square being based at the bottom, right-hand corner, v_2. The boundary of the square is the loop (v_2, b_1^-1d_1^-1a_1e_1,v_2) = (v_2,p_1,v_2). The boundary condition which m_1 has to satisfy is that ∂ m_1 = p_1. When defining a horizantal composition, as illustrated by

\vcenter{\xymatrix @=4pc{ u_1 \ar[r]^{a_1} \ar[d]_{d_1} \ar@{}[dr]|{m_1} & u_2 \ar[r]^{a_2} \ar[d]^{e_1} \ar@{}[dr]|{m_2} & u_3 \ar[d]^{f_1} \ar@{}[dr]|= & u_1 \ar[r]^{a_1a_2} \ar[d]_{d_1} \ar@{}[dr]|{m_1^{b_2}m_2} & u_3 \ar[d]^{f_1} \\ v_1 \ar[r]_{b_1} & v_2 \ar[r]_{b_2} & v_3 & v_1 \ar[r]_{b_1b_2} & v_3 }}

we have to move m_1, based at v_2, to the new base v_3, and we do this by using the action of the pre-crossed module of b_2 on m_1. Notice that the boundary condition is satisfied, since the first pre-crossed module axiom applies:

\partial(m_1^{b_2}m_2) ~=~ \partial(m_1^{b_2}) (\partial m_2) ~=~ b_2^{-1}(b_1^{-1}d_1^{-1}a_1e_1)b_2(b_2^{-1}e_1^{-1}a_2f_1) ~=~ (b_1b_2)^{-1}d_1^{-1}(a_1a_2)f_1.

Similarly, vertical composition is illustrated by

\vcenter{\xymatrix @=2pc{ u_1 \ar[rr]^{a_1} \ar[dd]_{d_1} \ar@{}[ddrr]|{m_1} && u_2 \ar[dd]^{e_1} & & && \\ && & & u_1 \ar[rr]^{a_1} \ar[dd]_{d_1d_2} \ar@{}[ddrr]|{m_3m_1^{e_2}} && u_2 \ar[dd]^{e_1e_2} \\ v_1 \ar[rr]_{b_1} \ar[dd]_{d_2} \ar@{}[ddrr]|{m_3} && v_2 \ar[dd]^{e_2} &=& && \\ && & & w_1 \ar[rr]_{c_1} && w_2 \\ w_1 \ar[rr]_{c_1} && w_2 }}

Again the boundary condition is satisfied:

\partial(m_3m_1^{e_2}) ~=~ (\partial m_3) \partial(m_1^{e_2}) ~=~ (c_1^{-1}d_2^{-1}b_1e_2)e_2^{-1}(b_1^{-1}d_1^{-1}a_1e_1)e_2 ~=~ c_1^{-1}(d_1d_2)^{-1}a_1(e_1e_2).

These two compositions commute, so we may construct products such as:

\vcenter{\xymatrix @=2pc{ u_1 \ar[rr]^{a_1} \ar[dd]_{d_1} \ar@{}[ddrr]|{m_1} && u_2 \ar[rr]^{a_2} \ar[dd]|{e_1} \ar@{}[ddrr]|{m_2} && u_3 \ar[dd]^{f_1} & & &&& \\ && && & & u_1 \ar[rrr]^{a_1a_2} \ar[dd]_{d_1d_2} \ar@{}[ddrrr]|{m_3^{c_2}m_4\left(m_1^{b_2}m_2\right)^{f_2}} &&& u_3 \ar[dd]^{f_1f_2} \\ v_1 \ar[rr]|{b_1} \ar[dd]_{d_2} \ar@{}[ddrr]|{m_3} && v_2 \ar[rr]|{b_2} \ar[dd]|{e_2} \ar@{}[ddrr]|{m_4} && v_3 \ar[dd]^{f_2} &=& &&& \\ && && & & w_1 \ar[rrr]_{c_1c_2 } &&& w_3 \\ w_1 \ar[rr]_{c_1} && w_2 \ar[rr]_{c_2} && w_3 }}

where

m_3^{c_2}m_4 (m_1^{b_2}m_2)^{f_2} ~=~ (m_3m_1^{e_2})^{c_2} m_4m_2^{f_2} ~=~ (c_1c_2)^{-1}(d_1d_2)^{-1}(a_1a_2)(f_1f_2).

For an example we take for our groupoid the product of the group S_3 = ⟨ (7,8), (7,9) ⟩ with the complete graph on [-6 ... -1] and, for our pre-crossed module, the X12, isomorphic to (D_12 -> S_3), constructed using XModByCentralExtension (2.1-5). The source of X12 has generating set { g = (11,12,13,14,15,16),~ h = (12,16)(13,15) }. We check that the two ways of computing the product of four squares below agree.

\vcenter{\xymatrix @=2pc{ -6 \ar[rr]^{(7,8)} \ar[dd]_{(7,9)} \ar@{}[ddrr]|{gh} && -5 \ar[rr]^{(8,9)} \ar[dd]|{(8,9)} \ar@{}[ddrr]|{g^2} && -4 \ar[dd]^{(7,8)} & & &&& \\ && && & & -6 \ar[rrr]^{(7,9,8)} \ar[dd]_{(7,8,9)} \ar@{}[ddrrr]|{(11,15,13)(12,16,14)} &&& -4 \ar[dd]^{(7,9,8)} \\ -1 \ar[rr]|{(7,8,9)} \ar[dd]_{(8,9)} \ar@{}[ddrr]|{g} && -3 \ar[rr]|{(7,9)} \ar[dd]|{(7,9,8)} \ar@{}[ddrr]|{h} && -4 \ar[dd]^{(8,9)} &=& &&& \\ && && & & -2 \ar[rrr]_{(7,9,8)} &&& -3 \\ -2 \ar[rr]_{(7,9)} && -2 \ar[rr]_{(7,8)} && -3 }}


gap> g := (11,12,13,14,15,16);;  h := (12,16)(13,15);;
gap> gend12 := [ g, h ];;
gap> d12 := Group( gend12 );;
gap> SetName( d12, "d12" ); 
gap> gens3 := [ (7,8,9), (8,9) ];;
gap> s3 := Group( gens3 );;
gap> SetName( s3, "s3" ); 
gap> pr12 := GroupHomomorphismByImages( d12, s3, gend12, gens3 );;
gap> X12 := XModByCentralExtension( pr12 );; 
gap> SetName( X12, "X12" ); 
gap> Display( X12 ); 

Crossed module X12 :- 
: Source group d12 has generators:
  [ (11,12,13,14,15,16), (12,16)(13,15) ]
: Range group s3 has generators:
  [ (7,8,9), (8,9) ]
: Boundary homomorphism maps source generators to:
  [ (7,8,9), (8,9) ]
: Action homomorphism maps range generators to automorphisms:
  (7,8,9) --> { source gens --> [ (11,12,13,14,15,16), (11,13)(14,16) ] }
  (8,9) --> { source gens --> [ (11,16,15,14,13,12), (12,16)(13,15) ] }
  These 2 automorphisms generate the group of automorphisms.

gap> Gs3 := Groupoid( s3, [-6..-1] );;
gap> SetName( Gs3, "Gs3" ); 
gap> D1 := SinglePieceDoubleGroupoid( Gs3, X12 );; 
gap> D1!.groupoid;
Gs3
gap> D1!.prexmod;
X12
gap> a1 := Arrow(Gs3,(7,8),-6,-5);;    a2 := Arrow(Gs3,(8,9),-5,-4);;
gap> b1 := Arrow(Gs3,(7,8,9),-1,-3);;  b2 := Arrow(Gs3,(7,9),-3,-4 );; 
gap> c1 := Arrow(Gs3,(7,9),-2,-2);;    c2 := Arrow(Gs3,(7,8),-2,-3);; 
gap> d1 := Arrow(Gs3,(7,9),-6,-1);;    d2 := Arrow(Gs3,(8,9),-1,-2);; 
gap> e1 := Arrow(Gs3,(8,9),-5,-3);;    e2 := Arrow(Gs3,(7,9,8),-3,-2);; 
gap> f1 := Arrow(Gs3,(7,8),-4,-4);;    f2 := Arrow(Gs3,(8,9),-4,-3);; 
gap> ## now define four squares 
gap> sq1 := SquareOfArrows( D1, g*h, a1, d1, e1, b1 ); 
[-6] ---- (7,8) ---> [-5]
  |                         |
(7,9)    (11,16)(12,15)(13,14)    (8,9)
  V                         V
[-1] ---- (7,8,9) ---> [-3]
gap> sq2 := SquareOfArrows( D1, g^2, a2, e1, f1, b2 );;  
gap> sq3 := SquareOfArrows( D1, g, b1, d2, e2, c1 );;
gap> sq4 := SquareOfArrows( D1, h, b2, e2, f2, c2 );;
gap> ## then form two horizontal and two vertical products:
gap> sq12 := LeftRightProduct( D1, sq1, sq2 );;
gap> sq34 := LeftRightProduct( D1, sq3, sq4 );;
gap> sq13 := UpDownProduct( D1, sq1, sq3 );; 
gap> sq24 := UpDownProduct( D1, sq2, sq4 );; 
gap> ## combine in two ways to get a single square:
gap> sq1324 := LeftRightProduct( D1, sq13, sq24 );
[-6] ---- (7,9,8) ---> [-4]
  |                         |
(7,8,9)    (11,15,13)(12,16,14)    (7,9,8)
  V                         V
[-2] ---- (7,9,8) ---> [-3]
gap> sq1234 := UpDownProduct( D1, sq12, sq34 );;
gap> sq1324 = sq1234;
true

11.2 Basic double groupoids

As mentioned earlier, double groupoids were introduced in the Groupoids package, but these were basic double groupoids, without any pre-crossed module. The element of a square was simply its boundary. Here we introduce an operation which converts such a basic double groupoid into the more general case considered in this package.

11.2-1 EnhancedBasicDoubleGroupoid
‣ EnhancedBasicDoubleGroupoid( bdg )( operation )

We need to add a pre-crossed module to the definition of such a double groupoid. We choose (G -> G) where G is the root group of the underlying groupoid. (This is only valid for groupoids which are the direct product with a complete graph.) The example is taken from section 7.1 of the Groupoids package, converting basic B0 to D0, and we check that the same square is produced in each case.


gap> g := (1,2,3,4);;  h := (1,3);;
gap> gend8 := [ g, h ];;
gap> d8 := Group( gend8 );;
gap> SetName( d8, "d8" ); 
gap> Gd8 := Groupoid( d8, [-9..-7] );;
gap> SetName( Gd8, "Gd8" ); 
gap> B0 := SinglePieceBasicDoubleGroupoid( Gd8 );; 
gap> B0!.groupoid;
Gd8
gap> B0!.objects;
[ -9 .. -7 ]
gap> a0 := Arrow(Gd8,(),-9,-7);;         b0 := Arrow(Gd8,(2,4),-9,-8);;  
gap> d0 := Arrow(Gd8,g,-9,-9);;          e0 := Arrow(Gd8,(1,3),-7,-8);;      
gap> bdy0 := b0![1]^-1 * d0![1]^-1 * a0![1] * e0![1];; 
gap> bsq0 := SquareOfArrows( B0, bdy0, a0, d0, e0, b0 ); 
[-9] ---- () ---> [-7]
  |                         |
(1,2,3,4)    (1,4,3,2)    (1,3)
  V                         V
[-9] ---- (2,4) ---> [-8]

gap> D0 := EnhancedBasicDoubleGroupoid( B0 );;
gap> D0!.prexmod;
[d8->d8]
gap> bsq0 = SquareOfArrows( D0, bdy0, a0, d0, e0, b0 ); 
true

11.3 Commutative double groupoids

A double groupoid square

\vcenter{\xymatrix @=4pc{ u_1 \ar[r]^{a_1} \ar[d]_{d_1}\ar@{}[dr] |{1} & u_2 \ar[d]^{e_1} \\ v_1 \ar[r]_{b_1} & v_2 }}

is commutative if a_1e_1 = d_1b_1, which means that its boundary is the identity. So a double groupoid which consists only of commutative squares must have a pre-crossed module with zero boundary. Commutative squares compose horizantally and vertically provided only that they have the correct common arrow.

11.3-1 DoubleGroupoidWithZeroBoundary
‣ DoubleGroupoidWithZeroBoundary( gpd, src )( operation )

The data for a double groupoid of commutative squares therefore consists of a groupoid and a source group. We may use the operation PreXModWithTrivialRange (2.3-1) to provide a pre-crossed module. We take for our example the groupoid Gd8 and the pre-crossed module Q16 of section 2.3. We introduce a new right arrow to construct a square which commutes.


gap> D16 := DoubleGroupoidWithZeroBoundary( Gs3, d16 );;
gap> D16!.prexmod;
[d16->Group( [ () ] )]
gap> e16 := Arrow( Gs3, (7,9,8), -5, -3 );;
gap> sq16 := SquareOfArrows( D16, (), a1, d1, e16, b1 );
[-6] ---- (7,8) ---> [-5]
  |                         |
(7,9)    ()    (7,9,8)
  V                         V
[-1] ---- (7,8,9) ---> [-3]
gap> D16 := DoubleGroupoidWithZeroBoundary( Gs3, d16 );;
gap> D16!.prexmod;
[d16->Group( [ () ] )]
gap> e16 := Arrow( Gs3, (7,9,8), -5, -3 );;
gap> sq16 := SquareOfArrows( D16, (), a1, d1, e16, b1 );
[-6] ---- (7,8) ---> [-5]
  |                         |
(7,9)    ()    (7,9,8)
  V                         V
[-1] ---- (7,8,9) ---> [-3]

 [Top of Book]  [Contents]   [Previous Chapter]   [Next Chapter] 
Goto Chapter: Top 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Bib Ind

generated by GAPDoc2HTML