Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/GAP/pkg/groupoids/doc/   (Algebra von RWTH Aachen Version 4.15.1©)  Datei vom 11.8.2025 mit Größe 26 kB image not shown  

Quelle  double.xml   Sprache: XML

 
<?xml version="1.0" encoding="UTF-8"?>

<Chapter Label="chap-double">
<Heading>Double Groupoids</Heading>

A <E>double groupoid</E> is a <E>double category</E> 
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 <E>basic double groupoids</E>, 
which do not involve pre-crossed modules. 
The more general case will be discussed in the 
<Package>XMod</Package> package. 
<P/> 
In a double groupoid, as well as objects and arrows, we need a set of <E>squares</E>.  
A square is bounded by four arrows, two horizontal and two vertical, 
and there is a <E>horizontal</E> groupoid structure  
and a <E>vertical</E> groupoid structure on these squares. 
<P/> 
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 <E>edge-symmetric</E> double groupoids.
<P/> 
This addition to the package is very experimental,
and will be extended as time permits.

<Section Label="sec-sdgpd">
<Heading>Single piece double groupoids</Heading>

<ManSection>
   <Oper Name="SinglePieceBasicDoubleGroupoid"
         Arg="gpd" />
   <Func Name="DoubleGroupoid"
         Arg="args" />
   <Filt Name="IsDoubleGroupoid" 
         Arg='mwo' Type='Category'/>
   <Filt Name="IsBasicDoubleGroupoid" 
         Arg='dgpd' Type='Category'/>
<Description>
Let <M>G</M> be a connected groupoid with object set <M>\Omega</M>. 
The double groupoid <M>\Box(G)</M> on <M>G</M> is constructed by the operation
<C>SinglePieceBasicDoubleGroupoid(G)</C>.
<P/>
The global function <C>DoubleGroupoid</C> may be used instead of 
this operation, and will work with various other input parameters.
<P/>
</Description>
</ManSection>
<Example>
<![CDATA[
gap> DGd8 := SinglePieceBasicDoubleGroupoid( Gd8 );; 
gap> DGd8!.groupoid;
Gd8
gap> DGd8!.objects;
[ -9, -8, -7 ]
gap> SetName( DGd8, "DGd8" );
gap> [ IsDoubleGroupoid( DGd8 ), IsBasicDoubleGroupoid( DGd8 ) ];
[ true, true ]
]]>
</Example>


<ManSection>
   <Oper Name="SquareOfArrows"
         Arg="gpd, up, lt, rt, dn" />
   <Attr Name="UpArrow"
         Arg="sq" />
   <Attr Name="LeftArrow"
         Arg="sq" />
   <Attr Name="RightArrow"
         Arg="sq" />
   <Attr Name="DownArrow"
         Arg="sq" />
   <Oper Name="BoundaryOfSquare"
         Arg="sq" />
   <Oper Name="DoubleGroupoidOfSquare"
         Arg="sq" />
   <Filt Name="IsDoubleGroupoidElement" 
         Arg='arrow' Type='Category'/>
<Description>
Let <M>\Box(G)</M> be the set of <E>squares</E>
with objects from <M>\Omega</M> at each corner;
plus two vertical arrows and two horizontal arrows from Arr<M>(G)</M>. 
The following picture illustrates a square <M>s_1</M>: 
<Display
<!--  \label{square1} \def\labelstyle{\textstyle} -->
<![CDATA[
\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 
}} 
]]>
</Display

We name the four arrows <C>UpArrow(s)</C>, <C>LeftArrow(s)</C>,
<C>RightArrow(s)</C> and <C>DownArrow(s)</C>.
<P/>
We think of the square <M>s_1</M> being <E>based</E> at the bottom, 
right-hand corner, <M>x_1</M>. 
<P/>
The <E>boundary</E> of the square is the loop 
<M>(x_1, d_1^{-1}b_1^{-1}a_1c_1, x_1) = (x_1,\delta(s_1),x_1)</M>. 

The number of squares in a 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.
<P/>
</Description>
</ManSection>
<Example>
<![CDATA[
gap> [ Size( DGd8 ), (3*8)^4 ]; 
[ 331776, 331776 ]
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
gap> IsDoubleGroupoidElement( sq1 );
true
]]>
</Example>







<ManSection>
   <Prop Name="IsCommutingSquare"
         Arg="sq" />
<Description>
The square <M>s_1</M> is <E>commuting</E> if <M>a_1*c_1 = b_1*d_1</M>, 
so that its boundary is the identity. 
The set of commutative squares in <M>\Box(G)</M> 
forms the <E>commutative sub-double groupoid</E> of <M>\Box(G)</M>. 
<P/>
</Description>
</ManSection>
<Example>
<![CDATA[
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 ]
]]>
</Example>

<ManSection>
   <Oper Name="TransposedSquare"
         Arg="sq" />
   <Prop Name="IsClosedUnderTransposition"
         Arg="sq" />
<Description>
The transpose of the square <M>s_1</M>, as with matrix transposition, 
is obtained by interchanging <M>a_1</M> with <M>b_1</M> 
and <M>c_1</M> with <M>d_1</M>.
Its boundary is the inverse of the boundary of <M>s_1</M>. 
<P/>
</Description>
</ManSection>
<Example>
<![CDATA[
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
]]>
</Example>

<ManSection>
   <Oper Name="HorizontalProduct"
         Arg="sq1, sq2" />
<Description>
When <C>RightArrow</C><M>(s_1)</M> = <C>LeftArrow</C><M>(s_2)</M>
we may compose <M>s_1</M> and <M>s_2</M> <E>horizontally</E>
to form the square
<M>s_1 (\rightarrow) s_2</M> = <C>HorizontalProduct</C><M>(s_1,s_2)</M>
as illustrated here: 
<Display
<!--  \label{Horizontalproduct} \def\labelstyle{\textstyle} -->
<![CDATA[
\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 
}} 
]]>
</Display
Notice that the boundary of the composite satisfies the identity: 
<Display>
\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).
</Display
<P/>
(This operation was called <C>LeftRightProduct</C> in versions up to 1.76.)
<P/>
</Description>
</ManSection>
<Example>
<![CDATA[
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
]]>
</Example>

<ManSection>
   <Oper Name="VerticalProduct"
         Arg="sq1, sq3" />
<Description>
When <C>DownArrow</C><M>(s_1)</M> = <C>UpArrow</C><M>(s_3)</M>
we may compose <M>s_1</M> and <M>s_3</M> <E>vertically</E>
to form <M>s_1 (\downarrow) s_3</M> = <C>VerticalProduct</C><M>(s_1,s_3)</M>
illustrated by:
<Display
<!--  \label{Verticalproduct} \def\labelstyle{\textstyle} -->
<![CDATA[
\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
}} 
]]>
</Display

This time the boundary condition satisfies the identity: 
<Display
\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}. 
</Display
<P/>
(This operation was called <C>UpDownProduct</C> in versions up to 1.76.)
<P/>
</Description>
</ManSection>
<Example>
<![CDATA[
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]

]]>
</Example>

<P/>
Vertical and horizontal compositions commute, 
so we may construct products such as: 
<Display
<!--  \label{composite4theory} \def\labelstyle{\textstyle} -->
<![CDATA[
\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 
}} 
]]>
</Display

In our example, after adding <M>c_4</M> and <M>d_4</M>,
it is routine to check that the two ways of 
computing the product of four squares give the same answer.

<Display
<!--  \label{composite4example} \def\labelstyle{\textstyle} -->
<![CDATA[
\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
}} 
]]>
</Display

<Example>
<![CDATA[
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
]]>
</Example>

<ManSection>
   <Oper Name="HorizontalIdentities"
         Arg="sq" />
   <Oper Name="VerticalIdentities"
         Arg="sq" />
   <Oper Name="HorizontalInverses"
         Arg="sq" />
   <Oper Name="VerticalInverses"
         Arg="sq" />
<Description>
There is no single identity for the operations <C>HorizontalProduct</C>
and <C>VerticalProduct</C> but there are, for each square, 
a <E>left identity</E>, a <E>right identity</E>, an <E>up identity</E> 
and a <E>down identity</E>.
The composite of the three squares shown below 
is equal to the central square <M>s</M>, and the other two squares
are the left identity <M>1_L(s)</M> and the right identity <M>1_R(s)</M>
for <M>s</M>.
<Display
<!--  \label{Horizontalidentities} \def\labelstyle{\textstyle} -->
<![CDATA[
\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
}} 
]]>
</Display

<P/>
</Description>
</ManSection>
<Example>
<![CDATA[
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
]]>
</Example>

Similarly, here are the up identity <M>1_U(s)</M>
and the down identity <M>1_D(s)</M> of <M>s</M>:
<Display
<!--  \label{Verticalidentities} \def\labelstyle{\textstyle} -->
<![CDATA[
\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
}} 
]]>
</Display

<Example>
<![CDATA[
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
]]>
</Example>

Confusingly, <M>s</M> has a <E>horizontal inverse</E> <M>s^{-1}_{H}</M>
whose product with <M>s</M> is the left identity or right identity:
<Display>
s (\rightarrow) s^{-1}_{H} ~=~  1_L(s),  \qquad  
s^{-1}_{H} (\rightarrow) s ~=~ 1_R(s). 
</Display>
The boundary of <M>s^{-1}_{H}</M> is 
<M>dc^{-1}a^{-1}b = (\delta(s)^{-1})^{d^{-1}}</M>.
Here are the two products:
<Display
<!--  \label{Horizontalinverse} \def\labelstyle{\textstyle} -->
<![CDATA[
\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
}} 
]]>
</Display

<Example>
<![CDATA[
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
]]>
</Example>

Similarly, <M>s</M> has a <E>vertical inverse</E> <M>s^{-1}_{V}</M>
whose product with <M>s</M> is an up or down identity:
<M>s (\downarrow) s^{-1}_{V} = 1_U(s)</M>  
and <M>s^{-1}_{V} (\downarrow) s = 1_D(s)</M>. 
The boundary is <M>a^{-1}bdc^{-1} = (\delta(s)^{-1})^{c^{-1}}</M>.
<Display
<!--  \label{Verticalinverse} \def\labelstyle{\textstyle} -->
<![CDATA[
\vcenter{\xymatrix @=4pc{  
   w \ar[r]^{d}  \ar[d]_{b^{-1}}  
     & x \ar[d]^{c^{-1}} \\ 
   u \ar[r]_{a} 
     & v 
}} 
]]>
</Display

<Example>
<![CDATA[
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
]]>
</Example>

<Subsection Label="sec-horiz-vert">
<Heading>Horizontal and vertical groupoids in <M>\Box(G)</M></Heading>
Now <M>\Box(G)</M> is the maximal double groupoid determined by <M>G</M>, 
but in general many substructures may be formed. 
The <E>horizontal groupoid</E> <Index Key="horizontal groupoid"></Index>
structure <M>\Box_{H}(G)</M> on <M>\Box(G)</M> has the vertical arrows
as objects, and considers the usual square <M>s</M>
<Display
<!--  \label{horizontal-gpd} \def\labelstyle{\textstyle} -->
<![CDATA[
\vcenter{\xymatrix @=4pc{  
   u \ar[r]^{a}  \ar[d]_{b}  
     & v \ar[d]^{c} \\ 
   w \ar[r]_{d} 
     & x 
}} 
]]>
</Display
as an arrow from <M>b</M> to <M>c</M>.
So the arrows in <M>\Box_{H}(G)</M> are effectively pairs of
horizontal arrows <M>[a,d]</M>.
The vertex groups are isomorphic to <M>G \times G</M>;
the identity arrow at <M>b</M> is <M>1_L(s)</M>;
and the inverse arrow of <M>s</M> is <M>s^{-1}_{H}</M>.
<P/>
Similarly the <E>vertical groupoid</E> <Index Key="vertical groupoid"></Index>
structure <M>\Box_{V}(G)</M> on <M>\Box(G)</M> has the horizontal arrows 
as objects and pairs of vertical arrows as arrows.
The identity arrow at <M>a</M> is <M>1_U(s)</M>,
and the inverse arrow of <M>s</M> is <M>s^{-1}_{V}</M>.
<P/>
These groupoid structures have not been implemented in this package.
</Subsection>

</Section>


<Section Label="sec-double-pieces">
<Heading>Double groupoids with more than one piece</Heading>

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

<ManSection Label="sec-union-dgpds">
   <Oper Name="UnionOfPieces" 
         Arg="pieces" Label="for double groupoids" />
   <Attr Name="Pieces"
         Arg="dgpd" Label="for double groupoids" />
<Description>
The operation <C>UnionOfPieces</C> and the attribute <C>Pieces</C>,  
introduced in section <Ref Sect="sec-pieces"/>,
are also used for double groupoids. 
The pieces are sorted by the least object in their object lists. 
The <C>ObjectList</C> is the sorted concatenation of the objects in the pieces.
<P/>
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.
<P/>
</Description>
</ManSection>
<Example>
<![CDATA[
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 ] ]
]]>
</Example>

</Section>


<Section Label="sec-double-gens">
<Heading>Generators of a double groupoid</Heading>

Before considering the general case we investigate two special cases:
<List>
<Item>
a basic double groupoid with identity group;
</Item>
<Item>
a basic double groupoid with a single object.
</Item>
</List>

<ManSection>
   <Oper Name="DoubleGroupoidWithTrivialGroup"
         Arg="obs" />
<Description>
When <M>|\Omega|=n</M> the double groupoid with trivial permutation group 
on these <M>n</M> objects contains <M>n^4</M> squares of the form:
<Display
<!--  \label{trivial-squares} \def\labelstyle{\textstyle} -->
<![CDATA[
\vcenter{\xymatrix @=4pc{  
   u \ar[r]^{()}  \ar[d]_{()}  
     & v \ar[d]^{()} \\ 
   w \ar[r]_{()} 
     & x
}} 
]]>
</Display
<P/>
</Description>
</ManSection>
<Example>
<![CDATA[
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
]]>
</Example>

<ManSection>
   <Oper Name="DoubleGroupoidWithSingleObject"
         Arg="gp, obj" />
<Description>
Given a group <M>G</M> we can form the corresponding groupoid with
a single object, and from that a double groupoid on that object.
The number of squares is <M>|G|^4</M>.
<P/>
</Description>
</ManSection>
<Example>
<![CDATA[
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
]]>
</Example>

<Subsection Label="sec-generating">
<Heading>What is the double groupoid generated by a set of squares?</Heading>
This is a very experimental section.
Let us consider the following list of three squares 
<M>[s_U(a,u,v),~ 1_U(v,u),~ s_U(a,u,u)]</M>.
What is generated by the single square <M>s_U(a,u,v)</M>?
<Display
<!--  \label{square-a111} \def\labelstyle{\textstyle} -->
<![CDATA[
\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
}} 
]]>
</Display
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 <C>DoubleGroupoidWithTrivialGroup</C> on the given objects
should be automatically included?
In that case the square <M>1_U(v,u)</M> is available and can compose
on the right to give <M>s_U(a,u,u)</M>.
This then composes with itself to produce squares <M>s_U(a^i,u,u)</M>.
Then, composing with identities, we obtain 
<C>SinglePieceBasicDoubleGroupoid(G)</C> where <M>G</M> is the groupoid
with group <M>\langle a \rangle</M> and objects <M>[u,v]</M>.
More work on this area is required!

</Subsection>


</Section>



<Section Label="sec-double-product">
<Heading>Starting with two groupoids</Heading>

In the literature on double groupoids the construction often starts 
with two groupoids <M>G_1, G_2</M>, 
and squares have horizontal arrows chosen from <M>G_1</M> 
and vertical arrows chosen from <M>G_2</M>. 
When that is the case, the boundary of a square is not defined, 
since arrows from <M>G_1</M> do not compose with those from <M>G_2</M>. 

This situation may be modelled here by constructing the direct product 
groupoid <M>G = G_1 \times G_2</M> 
and forming a double groupoid on <M>G</M> in which squares have the form: 
<Display
<!--  \label{product-square} \def\labelstyle{\textstyle} -->
<![CDATA[
\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] 
}} 
]]>
</Display
<P/>

<Example>
<![CDATA[
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 ]]
]]>
</Example>

</Section>


<Section Label="sec-dgpd-hom">
<Heading>Double groupoid homomorphisms</Heading>

<ManSection>
   <Oper Name="DoubleGroupoidHomomorphism"
         Arg="src rng hom" />
   <Filt Name="IsDoubleGroupoidHomomorphism" 
         Arg='mwohom' Type='Category'/>
<Description>
A homomorphism of double groupoids is determined by a homomorphism <C>mor</C>
between the underlying groupoids since <C>mor</C> determines the images of
the four arrows in every square.
<P/>
In the example we take the endomorphism <C>md8</C> of <C>Gd8</C>,
constructed in section <Ref Sect="subsec-prop-homs"/>,
to produce an endomorphism of <C>DGd8</C>.
</Description>
</ManSection>
<Example>
<![CDATA[
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 );;
gap> Display( endDGd8 );            
double groupoid homomorphism: [ DGd8 ] -> [ DGd8 ]
with underlying groupoid homomorphism:
homomorphism to single piece groupoid: Gd8 -> Gd8
root group homomorphism:
(5,6,7,8) -> (5,8,7,6)
(5,7) -> (6,8)
object map: [ -9, -8, -7 ] -> [ -7, -9, -8 ]
ray images: [ (), (5,7), (6,8) ]
gap> IsDoubleGroupoidHomomorphism( endDGd8 );
true
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]
]]>
</Example>

</Section>

</Chapter>

93%


¤ Dauer der Verarbeitung: 0.19 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung ist noch experimentell.