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 45 kB image not shown  

Quelle  chap8.html   Sprache: HTML

 
 products/Sources/formale Sprachen/GAP/pkg/groupoids/doc/chap8.html


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

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>GAP (groupoids) - Chapter 8: Double Groupoids</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<meta name="generator" content="GAPDoc2HTML" />
<link rel="stylesheet" type="text/css" href="manual.css" />
<script src="manual.js" type="text/javascript"></script>
<script type="text/javascript">overwriteStyle();</script>
</head>
<body class="chap8"  onload="jscontent()">


<div class="chlinktop"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a>  <a href="chap1.html">1</a>  <a href="chap2.html">2</a>  <a href="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chap5.html">5</a>  <a href="chap6.html">6</a>  <a href="chap7.html">7</a>  <a href="chap8.html">8</a>  <a href="chap9.html">9</a>  <a href="chap10.html">10</a>  <a href="chapBib.html">Bib</a>  <a href="chapInd.html">Ind</a>  </div>

<div class="chlinkprevnexttop"> <a href="chap0.html">[Top of Book]</a>   <a href="chap0.html#contents">[Contents]</a>    <a href="chap7.html">[Previous Chapter]</a>    <a href="chap9.html">[Next Chapter]</a>   </div>

<p id="mathjaxlink" class="pcenter"><a href="chap8_mj.html">[MathJax on]</a></p>
<p><a id="X83B7E8A287C9284A" name="X83B7E8A287C9284A"></a></p>
<div class="ChapSects"><a href="chap8.html#X83B7E8A287C9284A">8 <span class="Heading">Double Groupoids</span></a>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap8.html#X780DA94780938851">8.1 <span class="Heading">Single piece double groupoids</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap8.html#X7F5D722C83CB9139">8.1-1 SinglePieceBasicDoubleGroupoid</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap8.html#X823A3A7481B90EB7">8.1-2 SquareOfArrows</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap8.html#X83DF8EEE7BA72AA3">8.1-3 IsCommutingSquare</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap8.html#X7F99A468819D7759">8.1-4 TransposedSquare</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap8.html#X7D3737FA7E9E3ECA">8.1-5 HorizontalProduct</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap8.html#X873F01287A2DC41F">8.1-6 VerticalProduct</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap8.html#X79E6E4E97A23C257">8.1-7 HorizontalIdentities</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap8.html#X7B8DEF5A7B5AEC46">8.1-8 <span class="Heading">Horizontal and vertical groupoids in <span class="SimpleMath">□(G)</span></span></a>
</span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap8.html#X7F319AA17ED13024">8.2 <span class="Heading">Double groupoids with more than one piece</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap8.html#X8589EFAE7935BEA6">8.2-1 UnionOfPieces</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap8.html#X78E24657817C4D30">8.3 <span class="Heading">Generators of a double groupoid</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap8.html#X80009143808725D5">8.3-1 DoubleGroupoidWithTrivialGroup</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap8.html#X7D135AFB83995A32">8.3-2 DoubleGroupoidWithSingleObject</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap8.html#X85A6C1A685357E66">8.3-3 <span class="Heading">What is the double groupoid generated by a set of squares?</span></a>
</span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap8.html#X80E0318F78D2AD28">8.4 <span class="Heading">Starting with two groupoids</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap8.html#X83F6AFC185148621">8.5 <span class="Heading">Double groupoid homomorphisms</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap8.html#X87752436787B199D">8.5-1 DoubleGroupoidHomomorphism</a></span>
</div></div>
</div>

<h3>8 <span class="Heading">Double Groupoids</span></h3>

<p>A <em>double groupoid</em> is a <em>double category</em> 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 <em>basic double groupoids</em>, which do not involve pre-crossed modules. The more general case will be discussed in the <strong class="pkg">XMod</strong> package.</p>

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

<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 <em>edge-symmetric</em> double groupoids.</p>

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

<p><a id="X780DA94780938851" name="X780DA94780938851"></a></p>

<h4>8.1 <span class="Heading">Single piece double groupoids</span></h4>

<p><a id="X7F5D722C83CB9139" name="X7F5D722C83CB9139"></a></p>

<h5>8.1-1 SinglePieceBasicDoubleGroupoid</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ SinglePieceBasicDoubleGroupoid</code>( <var class="Arg">gpd</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ DoubleGroupoid</code>( <var class="Arg">args</var> )</td><td class="tdright">( function )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsDoubleGroupoid</code>( <var class="Arg">mwo</var> )</td><td class="tdright">( category )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsBasicDoubleGroupoid</code>( <var class="Arg">dgpd</var> )</td><td class="tdright">( category )</td></tr></table></div>
<p>Let <span class="SimpleMath">G</span> be a connected groupoid with object set <span class="SimpleMath">Ω</span>. The double groupoid <span class="SimpleMath">□(G)</span> on <span class="SimpleMath">G</span> is constructed by the operation <code class="code">SinglePieceBasicDoubleGroupoid(G)</code>.</p>

<p>The global function <code class="code">DoubleGroupoid</code> may be used instead of this operation, and will work with various other input parameters.</p>


<div class="example"><pre>

<span class="GAPprompt">gap></span> <span class="GAPinput">DGd8 := SinglePieceBasicDoubleGroupoid( Gd8 );; </span>
<span class="GAPprompt">gap></span> <span class="GAPinput">DGd8!.groupoid;</span>
Gd8
<span class="GAPprompt">gap></span> <span class="GAPinput">DGd8!.objects;</span>
[ -9, -8, -7 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">SetName( DGd8, "DGd8" );</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">[ IsDoubleGroupoid( DGd8 ), IsBasicDoubleGroupoid( DGd8 ) ];</span>
[ true, true ]

</pre></div>

<p><a id="X823A3A7481B90EB7" name="X823A3A7481B90EB7"></a></p>

<h5>8.1-2 SquareOfArrows</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ SquareOfArrows</code>( <var class="Arg">gpd</var>, <var class="Arg">up</var>, <var class="Arg">lt</var>, <var class="Arg">rt</var>, <var class="Arg">dn</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ UpArrow</code>( <var class="Arg">sq</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ LeftArrow</code>( <var class="Arg">sq</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ RightArrow</code>( <var class="Arg">sq</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ DownArrow</code>( <var class="Arg">sq</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ BoundaryOfSquare</code>( <var class="Arg">sq</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ DoubleGroupoidOfSquare</code>( <var class="Arg">sq</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsDoubleGroupoidElement</code>( <var class="Arg">arrow</var> )</td><td class="tdright">( category )</td></tr></table></div>
<p>Let <span class="SimpleMath">□(G)</span> be the set of <em>squares</em> with objects from <span class="SimpleMath">Ω</span> at each corner; plus two vertical arrows and two horizontal arrows from Arr<span class="SimpleMath">(G)</span>. The following picture illustrates a square <span class="SimpleMath">s_1</span>:</p>

<p class="pcenter"


\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 
}} 

</p>

<p>We name the four arrows <code class="code">UpArrow(s)</code>, <code class="code">LeftArrow(s)</code>, <code class="code">RightArrow(s)</code> and <code class="code">DownArrow(s)</code>.</p>

<p>We think of the square <span class="SimpleMath">s_1</span> being <em>based</em> at the bottom, right-hand corner, <span class="SimpleMath">x_1</span>.</p>

<p>The <em>boundary</em> of the square is the loop <span class="SimpleMath">(x_1, d_1^-1b_1^-1a_1c_1, x_1) = (x_1,δ(s_1),x_1)</span>. 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>


<div class="example"><pre>

<span class="GAPprompt">gap></span> <span class="GAPinput">[ Size( DGd8 ), (3*8)^4 ]; </span>
[ 331776, 331776 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">a1 := Arrow( Gd8, (5,7), -7, -8 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">b1 := Arrow( Gd8, (6,8), -7, -7 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">c1 := Arrow( Gd8, (5,6)(7,8), -8, -9 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">d1 := Arrow( Gd8, (5,6,7,8), -7, -9 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">bdy1 := d1^-1 * b1^-1 * a1 * c1;</span>
[(6,8) : -9 -> -9]
<span class="GAPprompt">gap></span> <span class="GAPinput">sq1 := SquareOfArrows( DGd8, a1, b1, c1, d1 ); </span>
[-7] ------- (5,7) ------> [-8]
  |                          |
(6,8)        (6,8)        (5,6)(7,8)
  V                          V
[-7] ----- (5,6,7,8) ----> [-9]
<span class="GAPprompt">gap></span> <span class="GAPinput">sq1 in DGd8;</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">UpArrow( sq1 );</span>
[(5,7) : -7 -> -8]
<span class="GAPprompt">gap></span> <span class="GAPinput">LeftArrow( sq1 );</span>
[(6,8) : -7 -> -7]
<span class="GAPprompt">gap></span> <span class="GAPinput">RightArrow( sq1 );</span>
[(5,6)(7,8) : -8 -> -9]
<span class="GAPprompt">gap></span> <span class="GAPinput">DownArrow( sq1 );</span>
[(5,6,7,8) : -7 -> -9]
<span class="GAPprompt">gap></span> <span class="GAPinput">BoundaryOfSquare( sq1 );</span>
[(6,8) : -9 -> -9]
<span class="GAPprompt">gap></span> <span class="GAPinput">DoubleGroupoidOfSquare( sq1 );</span>
DGd8
<span class="GAPprompt">gap></span> <span class="GAPinput">IsDoubleGroupoidElement( sq1 );</span>
true

</pre></div>

<p><a id="X83DF8EEE7BA72AA3" name="X83DF8EEE7BA72AA3"></a></p>

<h5>8.1-3 IsCommutingSquare</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsCommutingSquare</code>( <var class="Arg">sq</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>The square <span class="SimpleMath">s_1</span> is <em>commuting</em> if <span class="SimpleMath">a_1*c_1 = b_1*d_1</span>, so that its boundary is the identity. The set of commutative squares in <span class="SimpleMath">□(G)</span> forms the <em>commutative sub-double groupoid</em> of <span class="SimpleMath">□(G)</span>.</p>


<div class="example"><pre>

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

</pre></div>

<p><a id="X7F99A468819D7759" name="X7F99A468819D7759"></a></p>

<h5>8.1-4 TransposedSquare</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ TransposedSquare</code>( <var class="Arg">sq</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsClosedUnderTransposition</code>( <var class="Arg">sq</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>The transpose of the square <span class="SimpleMath">s_1</span>, as with matrix transposition, is obtained by interchanging <span class="SimpleMath">a_1</span> with <span class="SimpleMath">b_1</span> and <span class="SimpleMath">c_1</span> with <span class="SimpleMath">d_1</span>. Its boundary is the inverse of the boundary of <span class="SimpleMath">s_1</span>.</p>


<div class="example"><pre>

<span class="GAPprompt">gap></span> <span class="GAPinput">tsq1 := TransposedSquare( sq1 );</span>
[-7] ------- (6,8) ------> [-7]
  |                         |
(5,7)        (6,8)        (5,6,7,8)
  V                         V
[-8] ---- (5,6)(7,8) ---> [-9]
<span class="GAPprompt">gap></span> <span class="GAPinput">IsClosedUnderTransposition( sq1 );  </span>
false

</pre></div>

<p><a id="X7D3737FA7E9E3ECA" name="X7D3737FA7E9E3ECA"></a></p>

<h5>8.1-5 HorizontalProduct</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ HorizontalProduct</code>( <var class="Arg">sq1</var>, <var class="Arg">sq2</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>When <code class="code">RightArrow</code><span class="SimpleMath">(s_1)</span> = <code class="code">LeftArrow</code><span class="SimpleMath">(s_2)</span> we may compose <span class="SimpleMath">s_1</span> and <span class="SimpleMath">s_2</span> <em>horizontally</em> to form the square <span class="SimpleMath">s_1 (→) s_2</span> = <code class="code">HorizontalProduct</code><span class="SimpleMath">(s_1,s_2)</span> as illustrated here:</p>

<p class="pcenter"


\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 
}} 

</p>

<p>Notice that the boundary of the composite satisfies the identity:</p>

<p class="pcenter">
\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).
</p>

<p>(This operation was called <code class="code">LeftRightProduct</code> in versions up to 1.76.)</p>


<div class="example"><pre>

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

</pre></div>

<p><a id="X873F01287A2DC41F" name="X873F01287A2DC41F"></a></p>

<h5>8.1-6 VerticalProduct</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ VerticalProduct</code>( <var class="Arg">sq1</var>, <var class="Arg">sq3</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>When <code class="code">DownArrow</code><span class="SimpleMath">(s_1)</span> = <code class="code">UpArrow</code><span class="SimpleMath">(s_3)</span> we may compose <span class="SimpleMath">s_1</span> and <span class="SimpleMath">s_3</span> <em>vertically</em> to form <span class="SimpleMath">s_1 (↓) s_3</span> = <code class="code">VerticalProduct</code><span class="SimpleMath">(s_1,s_3)</span> illustrated by:</p>

<p class="pcenter"


\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
}} 

</p>

<p>This time the boundary condition satisfies the identity:</p>

<p class="pcenter"
\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}. 
</p>

<p>(This operation was called <code class="code">UpDownProduct</code> in versions up to 1.76.)</p>


<div class="example"><pre>

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


</pre></div>

<p>Vertical and horizontal compositions commute, so we may construct products such as:</p>

<p class="pcenter"


\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 
}} 

</p>

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

<p class="pcenter"


\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
}} 

</p>


<div class="example"><pre>

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

<span class="GAPprompt">gap></span> <span class="GAPinput">sq34 := HorizontalProduct( sq3, sq4 );</span>
[-7] ------- (5,7)(6,8) ------> [-8]
  |                              |
(5,7)        (5,8)(6,7)        (5,6,7,8)
  V                              V
[-9] ------- (5,7)(6,8) ------> [-7]

<span class="GAPprompt">gap></span> <span class="GAPinput">sq1234 := VerticalProduct( sq12, sq34 );</span>
[-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]

<span class="GAPprompt">gap></span> <span class="GAPinput">sq24 := VerticalProduct( sq2, sq4 ); </span>
[-8] ----------- (6,8) ----------> [-9]
  |                                 |
(5,8,7,6)        (5,6,7,8)        (5,8,7,6)
  V                                 V
[-8] -------- (5,6)(7,8) -------> [-7]

<span class="GAPprompt">gap></span> <span class="GAPinput">sq1324 := HorizontalProduct( sq13, sq24 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">sq1324 = sq1234;</span>
true

</pre></div>

<p><a id="X79E6E4E97A23C257" name="X79E6E4E97A23C257"></a></p>

<h5>8.1-7 HorizontalIdentities</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ HorizontalIdentities</code>( <var class="Arg">sq</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ VerticalIdentities</code>( <var class="Arg">sq</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ HorizontalInverses</code>( <var class="Arg">sq</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ VerticalInverses</code>( <var class="Arg">sq</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>There is no single identity for the operations <code class="code">HorizontalProduct</code> and <code class="code">VerticalProduct</code> but there are, for each square, a <em>left identity</em>, a <em>right identity</em>, an <em>up identity</em> and a <em>down identity</em>. The composite of the three squares shown below is equal to the central square <span class="SimpleMath">s</span>, and the other two squares are the left identity <span class="SimpleMath">1_L(s)</span> and the right identity <span class="SimpleMath">1_R(s)</span> for <span class="SimpleMath">s</span>.</p>

<p class="pcenter"


\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
}} 

</p>


<div class="example"><pre>

<span class="GAPprompt">gap></span> <span class="GAPinput">hid := HorizontalIdentities( sq24 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">hid[1]; Print("\n"); hid[2];                    </span>
[-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]
<span class="GAPprompt">gap></span> <span class="GAPinput">HorizontalProduct( hid[1], sq24 ) = sq24;</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">HorizontalProduct( sq24, hid[2] ) = sq24;      </span>
true

</pre></div>

<p>Similarly, here are the up identity <span class="SimpleMath">1_U(s)</span> and the down identity <span class="SimpleMath">1_D(s)</span> of <span class="SimpleMath">s</span>:</p>

<p class="pcenter"


\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
}} 

</p>


<div class="example"><pre>

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

[-8] ---- (5,6)(7,8) ---> [-7]
  |                        |
()            ()            ()
  V                        V
[-8] ---- (5,6)(7,8) ---> [-7]
<span class="GAPprompt">gap></span> <span class="GAPinput">VerticalProduct( vid[1], sq24 ) = sq24;</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">VerticalProduct( sq24, vid[2] ) = sq24;</span>
true

</pre></div>

<p>Confusingly, <span class="SimpleMath">s</span> has a <em>horizontal inverse</em> <span class="SimpleMath">s^-1_H</span> whose product with <span class="SimpleMath">s</span> is the left identity or right identity:</p>

<p class="pcenter">
s (\rightarrow) s^{-1}_{H} ~=~  1_L(s),  \qquad  
s^{-1}_{H} (\rightarrow) s ~=~ 1_R(s). 
</p>

<p>The boundary of <span class="SimpleMath">s^-1_H</span> is <span class="SimpleMath">dc^-1a^-1b = (δ(s)^-1)^d^-1}</span>. Here are the two products:</p>

<p class="pcenter"


\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
}} 

</p>


<div class="example"><pre>

<span class="GAPprompt">gap></span> <span class="GAPinput">hinv := HorizontalInverse( sq24 ); </span>
[-9] ----------- (6,8) ----------> [-8]
  |                                 |
(5,8,7,6)        (5,6,7,8)        (5,8,7,6)
  V                                 V
[-7] -------- (5,6)(7,8) -------> [-8]
<span class="GAPprompt">gap></span> <span class="GAPinput">HorizontalProduct( hinv, sq24 ) = hid[2];</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">HorizontalProduct( sq24, hinv ) = hid[1];      </span>
true

</pre></div>

<p>Similarly, <span class="SimpleMath">s</span> has a <em>vertical inverse</em> <span class="SimpleMath">s^-1_V</span> whose product with <span class="SimpleMath">s</span> is an up or down identity: <span class="SimpleMath">s (↓) s^-1_V = 1_U(s)</span> and <span class="SimpleMath">s^-1_V (↓) s = 1_D(s)</span>. The boundary is <span class="SimpleMath">a^-1bdc^-1 = (δ(s)^-1)^c^-1}</span>.</p>

<p class="pcenter"


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

</p>


<div class="example"><pre>

<span class="GAPprompt">gap></span> <span class="GAPinput">vinv := VerticalInverse( sq24 );</span>
[-8] -------- (5,6)(7,8) -------> [-7]
  |                                 |
(5,6,7,8)        (5,8,7,6)        (5,6,7,8)
  V                                 V
[-8] ----------- (6,8) ----------> [-9]
<span class="GAPprompt">gap></span> <span class="GAPinput">VerticalProduct( vinv, sq24 ) = vid[2];</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">VerticalProduct( sq24, vinv ) = vid[1];   </span>
true

</pre></div>

<p><a id="X7B8DEF5A7B5AEC46" name="X7B8DEF5A7B5AEC46"></a></p>

<h5>8.1-8 <span class="Heading">Horizontal and vertical groupoids in <span class="SimpleMath">□(G)</span></span></h5>

<p>Now <span class="SimpleMath">□(G)</span> is the maximal double groupoid determined by <span class="SimpleMath">G</span>, but in general many substructures may be formed. The <em>horizontal groupoid</em> structure <span class="SimpleMath">□_H(G)</span> on <span class="SimpleMath">□(G)</span> has the vertical arrows as objects, and considers the usual square <span class="SimpleMath">s</span></p>

<p class="pcenter"


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

</p>

<p>as an arrow from <span class="SimpleMath">b</span> to <span class="SimpleMath">c</span>. So the arrows in <span class="SimpleMath">□_H(G)</span> are effectively pairs of horizontal arrows <span class="SimpleMath">[a,d]</span>. The vertex groups are isomorphic to <span class="SimpleMath">G × G</span>; the identity arrow at <span class="SimpleMath">b</span> is <span class="SimpleMath">1_L(s)</span>; and the inverse arrow of <span class="SimpleMath">s</span> is <span class="SimpleMath">s^-1_H</span>.</p>

<p>Similarly the <em>vertical groupoid</em> structure <span class="SimpleMath">□_V(G)</span> on <span class="SimpleMath">□(G)</span> has the horizontal arrows as objects and pairs of vertical arrows as arrows. The identity arrow at <span class="SimpleMath">a</span> is <span class="SimpleMath">1_U(s)</span>, and the inverse arrow of <span class="SimpleMath">s</span> is <span class="SimpleMath">s^-1_V</span>.</p>

<p>These groupoid structures have not been implemented in this package.</p>

<p><a id="X7F319AA17ED13024" name="X7F319AA17ED13024"></a></p>

<h4>8.2 <span class="Heading">Double groupoids with more than one piece</span></h4>

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

<p><a id="X8589EFAE7935BEA6" name="X8589EFAE7935BEA6"></a></p>

<h5>8.2-1 UnionOfPieces</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ UnionOfPieces</code>( <var class="Arg">pieces</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Pieces</code>( <var class="Arg">dgpd</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>The operation <code class="code">UnionOfPieces</code> and the attribute <code class="code">Pieces</code>, introduced in section <a href="chap2.html#X7C7007207FD91BB0"><span class="RefLink">2.5</span></a>, are also used for double groupoids. The pieces are sorted by the least object in their object lists. The <code class="code">ObjectList</code> is the sorted concatenation of the objects in the pieces.</p>

<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>


<div class="example"><pre>

<span class="GAPprompt">gap></span> <span class="GAPinput">DGc6 := SinglePieceBasicDoubleGroupoid( Gc6 );; </span>
<span class="GAPprompt">gap></span> <span class="GAPinput">DGa4 := SinglePieceBasicDoubleGroupoid( Ga4 );; </span>
<span class="GAPprompt">gap></span> <span class="GAPinput">DGc6s4 := DoubleGroupoid( [ DGc6, DGa4 ] );</span>
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 ]

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

</pre></div>

<p><a id="X78E24657817C4D30" name="X78E24657817C4D30"></a></p>

<h4>8.3 <span class="Heading">Generators of a double groupoid</span></h4>

<p>Before considering the general case we investigate two special cases:</p>


<ul>
<li><p>a basic double groupoid with identity group;</p>

</li>
<li><p>a basic double groupoid with a single object.</p>

</li>
</ul>
<p><a id="X80009143808725D5" name="X80009143808725D5"></a></p>

<h5>8.3-1 DoubleGroupoidWithTrivialGroup</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ DoubleGroupoidWithTrivialGroup</code>( <var class="Arg">obs</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>When <span class="SimpleMath">|Ω|=n</span> the double groupoid with trivial permutation group on these <span class="SimpleMath">n</span> objects contains <span class="SimpleMath">n^4</span> squares of the form:</p>

<p class="pcenter"


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

</p>


<div class="example"><pre>

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

<span class="GAPprompt">gap></span> <span class="GAPinput">Size(DGtriv);                                          </span>
81

</pre></div>

<p><a id="X7D135AFB83995A32" name="X7D135AFB83995A32"></a></p>

<h5>8.3-2 DoubleGroupoidWithSingleObject</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ DoubleGroupoidWithSingleObject</code>( <var class="Arg">gp</var>, <var class="Arg">obj</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Given a group <span class="SimpleMath">G</span> we can form the corresponding groupoid with a single object, and from that a double groupoid on that object. The number of squares is <span class="SimpleMath">|G|^4</span>.</p>


<div class="example"><pre>

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

<span class="GAPprompt">gap></span> <span class="GAPinput">Size( DGc4 );                                                 </span>
256

</pre></div>

<p><a id="X85A6C1A685357E66" name="X85A6C1A685357E66"></a></p>

<h5>8.3-3 <span class="Heading">What is the double groupoid generated by a set of squares?</span></h5>

<p>This is a very experimental section. Let us consider the following list of three squares <span class="SimpleMath">[s_U(a,u,v),~ 1_U(v,u),~ s_U(a,u,u)]</span>. What is generated by the single square <span class="SimpleMath">s_U(a,u,v)</span>?</p>

<p class="pcenter"


\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
}} 

</p>

<p>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 <code class="code">DoubleGroupoidWithTrivialGroup</code> on the given objects should be automatically included? In that case the square <span class="SimpleMath">1_U(v,u)</span> is available and can compose on the right to give <span class="SimpleMath">s_U(a,u,u)</span>. This then composes with itself to produce squares <span class="SimpleMath">s_U(a^i,u,u)</span>. Then, composing with identities, we obtain <code class="code">SinglePieceBasicDoubleGroupoid(G)</code> where <span class="SimpleMath">G</span> is the groupoid with group <span class="SimpleMath">⟨ a ⟩</span> and objects <span class="SimpleMath">[u,v]</span>. More work on this area is required!</p>

<p><a id="X80E0318F78D2AD28" name="X80E0318F78D2AD28"></a></p>

<h4>8.4 <span class="Heading">Starting with two groupoids</span></h4>

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

<p class="pcenter"


\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] 
}} 

</p>


<div class="example"><pre>

<span class="GAPprompt">gap></span> <span class="GAPinput">Gd8c6 := DirectProduct( Gd8, Gc6 );</span>
single piece groupoid: < Group( [ (1,2,3,4), (1,3), (5,6,7)(8,9) ] ), 
[ [ -9, -10 ], [ -8, -10 ], [ -7, -10 ] ] >
<span class="GAPprompt">gap></span> <span class="GAPinput">SetName( Gd8c6, "Gd8c6" );</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">DGd8c6 := SinglePieceBasicDoubleGroupoid( Gd8c6 );</span>
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 ] ]

<span class="GAPprompt">gap></span> <span class="GAPinput">emb1 := Embedding( Gd8c6, 1 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">emb2 := Embedding( Gd8c6, 2 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">a5 := Arrow( Gd8, (5,7), -9, -7 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">a6 := ImageElm( emb1, a5 );</span>
[(1,3) : [ -9, -10 ] -> [ -7, -10 ]]
<span class="GAPprompt">gap></span> <span class="GAPinput">d5 := Arrow( Gd8, (6,8), -9, -8 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">d6 := ImageElm( emb1, d5 );</span>
[(2,4) : [ -9, -10 ] -> [ -8, -10 ]]
<span class="GAPprompt">gap></span> <span class="GAPinput">b5 := Arrow( Gc6, (11,12,13), -10, -10 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">b6 := ImageElm( emb2, b5 );</span>
[(5,6,7) : [ -9, -10 ] -> [ -9, -10 ]]
<span class="GAPprompt">gap></span> <span class="GAPinput">c6 := Arrow( Gd8c6, (8,9), [-7,-10], [-8,-10] );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">sq := SquareOfArrows( DGd8c6, a6, b6, c6, d6 );</span>
[[ -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 ]]

</pre></div>

<p><a id="X83F6AFC185148621" name="X83F6AFC185148621"></a></p>

<h4>8.5 <span class="Heading">Double groupoid homomorphisms</span></h4>

<p><a id="X87752436787B199D" name="X87752436787B199D"></a></p>

<h5>8.5-1 DoubleGroupoidHomomorphism</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ DoubleGroupoidHomomorphism</code>( <var class="Arg">src</var>, <var class="Arg">rng</var>, <var class="Arg">hom</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsDoubleGroupoidHomomorphism</code>( <var class="Arg">mwohom</var> )</td><td class="tdright">( category )</td></tr></table></div>
<p>A homomorphism of double groupoids is determined by a homomorphism <code class="code">mor</code> between the underlying groupoids since <code class="code">mor</code> determines the images of the four arrows in every square.</p>

<p>In the example we take the endomorphism <code class="code">md8</code> of <code class="code">Gd8</code>, constructed in section <a href="chap5.html#X83DDA9528396451A"><span class="RefLink">5.2-1</span></a>, to produce an endomorphism of <code class="code">DGd8</code>.</p>


<div class="example"><pre>

<span class="GAPprompt">gap></span> <span class="GAPinput">ad8 := GroupHomomorphismByImages( d8, d8,</span>
<span class="GAPprompt">></span> <span class="GAPinput">              [ (5,6,7,8), (5,7) ], [ (5,8,7,6), (6,8) ] );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">md8 := GroupoidHomomorphism( Gd8, Gd8, ad8, </span>
<span class="GAPprompt">></span> <span class="GAPinput">              [-7,-9,-8], [(),(5,7),(6,8)] );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">endDGd8 := DoubleGroupoidHomomorphism( DGd8, DGd8, md8 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( endDGd8 );            </span>
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) ]
<span class="GAPprompt">gap></span> <span class="GAPinput">IsDoubleGroupoidHomomorphism( endDGd8 );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">sq1;</span>
[-7] ------- (5,7) ------> [-8]
  |                          |
(6,8)        (6,8)        (5,6)(7,8)
  V                          V
[-7] ----- (5,6,7,8) ----> [-9]
<span class="GAPprompt">gap></span> <span class="GAPinput">ImageElm( endDGd8, sq1 );</span>
[-8] ------- (5,7) ------> [-9]
  |                         |
(5,7)        (5,7)        (5,8,7,6)
  V                         V
[-8] ---- (5,8)(6,7) ---> [-7]

</pre></div>


<div class="chlinkprevnextbot"> <a href="chap0.html">[Top of Book]</a>   <a href="chap0.html#contents">[Contents]</a>    <a href="chap7.html">[Previous Chapter]</a>    <a href="chap9.html">[Next Chapter]</a>   </div>


<div class="chlinkbot"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a>  <a href="chap1.html">1</a>  <a href="chap2.html">2</a>  <a href="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chap5.html">5</a>  <a href="chap6.html">6</a>  <a href="chap7.html">7</a>  <a href="chap8.html">8</a>  <a href="chap9.html">9</a>  <a href="chap10.html">10</a>  <a href="chapBib.html">Bib</a>  <a href="chapInd.html">Ind</a>  </div>

<hr />
<p class="foot">generated by <a href="https://www.math.rwth-aachen.de/~Frank.Luebeck/GAPDoc">GAPDoc2HTML</a></p>
</body>
</html>

99%


¤ Dauer der Verarbeitung: 0.25 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.