Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/GAP/pkg/wpe/gap/   (GAP Algebra Version 4.15.1©)  Datei vom 21.9.2024 mit Größe 9 kB image not shown  

Quellcode-Bibliothek chap11.html   Sprache: unbekannt

 
<?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 (XMod) - Chapter 11: 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="chap11"  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="chap11.html">11</a>  <a href="chap12.html">12</a>  <a href="chap13.html">13</a>  <a href="chap14.html">14</a>  <a href="chap15.html">15</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="chap10.html">[Previous Chapter]</a>    <a href="chap12.html">[Next Chapter]</a>   </div>

<p id="mathjaxlink" class="pcenter"><a href="chap11_mj.html">[MathJax on]</a></p>
<p><a id="X83B7E8A287C9284A" name="X83B7E8A287C9284A"></a></p>
<div class="ChapSects"><a href="chap11.html#X83B7E8A287C9284A">11 <span class="Heading">Double Groupoids</span></a>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap11.html#X87AC8EF586C35CD4">11.1 <span class="Heading">Constructions for Double Groupoids</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap11.html#X78936F448231692E">11.1-1 SinglePieceDoubleGroupoid</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap11.html#X823A3A7481B90EB7">11.1-2 SquareOfArrows</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap11.html#X7D3737FA7E9E3ECA">11.1-3 HorizontalProduct</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap11.html#X873F01287A2DC41F">11.1-4 VerticalProduct</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap11.html#X7D69B5A680FE4C81">11.2 <span class="Heading">Conversion of Basic Double Groupoids</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap11.html#X7CB177EF78B559DB">11.2-1 EnhancedBasicDoubleGroupoid</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap11.html#X853B15F483477D5C">11.3 <span class="Heading">Commutative double groupoids</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap11.html#X7DC35C557E498880">11.3-1 DoubleGroupoidWithZeroBoundary</a></span>
</div></div>
</div>

<h3>11 <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. 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 <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. A square also contains an element of the source group of the pre-crossed module, and its image under the boundary map is equal to the boundary of the square. When printing a square, this element is located at the centre,</p>

<p>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 material in this chapter is experimental. It was started in 2023, in version 2.91, and extensively revised in 2025, for version 2.95. Further extensions are likely in due course.</p>

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

<h4>11.1 <span class="Heading">Constructions for Double Groupoids</span></h4>

<p>It is assumed in this chapter that the reader is familiar with constructions for groupoids given in the <strong class="pkg">Groupoids</strong> package, such as <code class="code">SinglePieceBasicDoubleGroupoid</code>. Such groupoids are <em>basic</em>, in that there is no pre-crossed module involvement. In <strong class="pkg">XMod</strong> the operation <code class="code">SinglePieceDoubleGroupoid</code> requires a groupoid and a crossed module as input parameters.</p>

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

<h5>11.1-1 SinglePieceDoubleGroupoid</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&#an style='color: green'>8227; SinglePieceDoubleGroupoid</code>( <var class="Arg">gpd</var>, <var class="Arg">pxmod</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>For an example we take for our groupoid the product of the group <span class="SimpleMath">S_3 = ⟨ (7,8,9), (8,9) ⟩</span> with the complete graph on <span class="SimpleMath">[-6 ... -1]</span> and, for our pre-crossed module, the <code class="code">X12</code>, isomorphic to <span class="SimpleMath">(D_12 -> S_3)</span>, constructed using <code class="func">XModByCentralExtension</code> (<a href="chap2.html#X7D0F6FAA7AF69844"><span class="RefLink">2.1-5</span></a>). The source of <code class="code">X12</code> has generating set <span class="SimpleMath">{ g = (11,12,13,14,15,16),~ h = (12,16)(13,15) }</span>.</p>


<div class="example"><pre>

<span class="GAPprompt">gap></span> <span class="GAPinput">gens3 := [ (7,8,9), (8,9) ];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">s3 := Group( gens3 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">SetName( s3, "s3" ); </span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Gs3 := Groupoid( s3, [-6..-1] );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">SetName( Gs3, "Gs3" ); </span>
<span class="GAPprompt">gap></span> <span class="GAPinput">g := (11,12,13,14,15,16);;  h := (12,16)(13,15);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">gend12 := [ g, h ];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">d12 := Group( gend12 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">SetName( d12, "d12" ); </span>
<span class="GAPprompt">gap></span> <span class="GAPinput">pr12 := GroupHomomorphismByImages( d12, s3, gend12, gens3 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">X12 := XModByCentralExtension( pr12 );; </span>
<span class="GAPprompt">gap></span> <span class="GAPinput">SetName( X12, "X12" ); </span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display( X12 ); </span>

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.

<span class="GAPprompt">gap></span> <span class="GAPinput">D1 := SinglePieceDoubleGroupoid( Gs3, X12 );; </span>
<span class="GAPprompt">gap></span> <span class="GAPinput">D1!.groupoid;</span>
Gs3
<span class="GAPprompt">gap></span> <span class="GAPinput">D1!.prexmod;</span>
X12

</pre></div>

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

<h5>11.1-2 SquareOfArrows</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&#an style='color: green'>8227; SquareOfArrows</code>( <var class="Arg">bdy</var>, <var class="Arg">act</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Let <span class="SimpleMath">G</span> be a groupoid with object set <span class="SimpleMath">Ω</span> and object group <span class="SimpleMath">g</span>. Let <span class="SimpleMath">□</span> be the set of squares 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>. Further, let <span class="SimpleMath">calP = (∂ : S -> R)</span> be a pre-crossed module, and let <span class="SimpleMath">m_1 ∈ S</span> be placed at the centre of the square. The following picture illustrates the situation where <span class="SimpleMath">u_1,v_1,w_1,x_1 ∈ Ω</span> and <span class="SimpleMath">a_1,b_1,c_1,d_1 ∈ g</span>.</p>

<p class="pcenter"


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

</p>

<p>We think of the square being <em>based</em> at the bottom, right-hand corner, <span class="SimpleMath">x_1</span>. 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,p_1,x_1)</span>. The <em>boundary condition</em> which <span class="SimpleMath">m_1</span> has to satisfy is that <span class="SimpleMath">∂ m_1 = p_1</span>. (Beware a possible source of confusion. In the example code it is convenient of define arrow <code class="code">a1 := Arrow( Gs3, (7,8), -6, -5 );</code> whereas, in the description, <span class="SimpleMath">a_1 = (7,8)</span>. Similarly for all the other arrows.)</p>


<div class="example"><pre>

<span class="GAPprompt">gap></span> <span class="GAPinput">a1 := Arrow( Gs3, (7,8), -6, -5 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">b1 := Arrow( Gs3, (7,9), -6, -1 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">c1 := Arrow( Gs3, (8,9), -5, -3 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">d1 := Arrow( Gs3, (7,8,9), -1, -3 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">sq1 := SquareOfArrows( D1, g*h, a1, b1, c1, d1 ); </span>
[-6] ------------- (7,8) ------------> [-5]
  |                                     |
(7,9)        (11,16)(12,15)(13,14)        (8,9)
  V                                     V
[-1] ------------ (7,8,9) -----------> [-3]
<span class="GAPprompt">gap></span> <span class="GAPinput">m1 := ElementOfSquare( sq1 ); </span>
(11,16)(12,15)(13,14)
<span class="GAPprompt">gap></span> <span class="GAPinput">UpArrow( sq1 );</span>
[(7,8) : -6 -> -5]
<span class="GAPprompt">gap></span> <span class="GAPinput">LeftArrow( sq1 );</span>
[(7,9) : -6 -> -1]
<span class="GAPprompt">gap></span> <span class="GAPinput">RightArrow( sq1 );</span>
[(8,9) : -5 -> -3]
<span class="GAPprompt">gap></span> <span class="GAPinput">DownArrow( sq1 );</span>
[(7,8,9) : -1 -> -3]
<span class="GAPprompt">gap></span> <span class="GAPinput">## check the boundary condition:</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">bdy1 := Boundary( D1!.prexmod );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">p1:= BoundaryOfSquare( sq1 );</span>
[(7,9) : -3 -> -3]
<span class="GAPprompt">gap></span> <span class="GAPinput">ImageElm( bdy1, m1 );</span>
(7,9)

</pre></div>

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

<h5>11.1-3 HorizontalProduct</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&#an style='color: green'>8227; HorizontalProduct</code>( <var class="Arg">sq1</var>, <var class="Arg">sq2</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>When defining a <em>horizontal composition</em>, as illustrated by</p>

<p class="pcenter"

\vcenter{\xymatrix @=4pc{  
   u_1 \ar[r]^{a_1} \ar[d]_{b_1} \ar@{}[dr]|{m_1} 
     & v_1 \ar[r]^{a_2} \ar[d]^{c_1} \ar@{}[dr]|{m_2}
       & v_2 \ar[d]^{c_2} \ar@{}[dr]|= 
         & u_1 \ar[r]^{a_1a_2} \ar[d]_{b_1} \ar@{}[dr]|{m_1^{d_2}m_2} 
           & 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>we have to move <span class="SimpleMath">m_1</span>, based at <span class="SimpleMath">x_1</span>, to the new base <span class="SimpleMath">x_2</span>, and we do this by using the action of the pre-crossed module of <span class="SimpleMath">d_2</span> on <span class="SimpleMath">m_1</span>. Notice that the boundary condition for the product is satisfied, since the first pre-crossed module axiom applies:</p>

<p class="pcenter"
\partial(m_1^{d_2}m_2) 
~=~ \partial(m_1^{d_2}) (\partial m_2) 
~=~ d_2^{-1}(d_1^{-1}b_1^{-1}a_1c_1)d_2(d_2^{-1}c_1^{-1}a_2c_2) 
~=~ (d_1d_2)^{-1}b_1^{-1}(a_1a_2)c_2. 
</p>


<div class="example"><pre>

<span class="GAPprompt">gap></span> <span class="GAPinput">a2 := Arrow( Gs3, (8,9), -5, -4 );; </span>
<span class="GAPprompt">gap></span> <span class="GAPinput">c2 := Arrow( Gs3, (7,8), -4, -4 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">d2 := Arrow( Gs3, (7,9), -3, -4 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">sq2 := SquareOfArrows( D1, g^2, a2, c1, c2, d2 ); </span>
[-5] ------------ (8,9) -----------> [-4]
  |                                    |
(8,9)        (11,13,15)(12,14,16)        (7,8)
  V                                    V
[-3] ------------ (7,9) -----------> [-4]
<span class="GAPprompt">gap></span> <span class="GAPinput">m2 := ElementOfSquare( sq2 ); </span>
(11,13,15)(12,14,16)
<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>
[-6] ------------ (7,9,8) -----------> [-4]
  |                                     |
(7,9)        (11,12)(13,16)(14,15)        (7,8)
  V                                     V
[-1] ------------- (7,8) ------------> [-4]
<span class="GAPprompt">gap></span> <span class="GAPinput">## check the boundary condition:</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">ed2 := ElementOfArrow( d2 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">im1d2 := ImageElmXModAction( X12, m1, ed2 );</span>
(11,16)(12,15)(13,14)
<span class="GAPprompt">gap></span> <span class="GAPinput">m12 := ElementOfSquare( sq12 );</span>
(11,12)(13,16)(14,15)
<span class="GAPprompt">gap></span> <span class="GAPinput">im1d2 * m2 = m12;</span>
true

</pre></div>

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

<h5>11.1-4 VerticalProduct</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&#an style='color: green'>8227; VerticalProduct</code>( <var class="Arg">sq1</var>, <var class="Arg">sq2</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Similarly, vertical composition is illustrated by</p>

<p class="pcenter"

\vcenter{\xymatrix @=2pc{  
   u_1 \ar[rr]^{a_1}  \ar[dd]_{b_1} \ar@{}[ddrr]|{m_1}  
     && v_1 \ar[dd]^{c_1} 
         & &  &&  \\ 
     &&  & &  u_1 \ar[rr]^{a_1} \ar[dd]_{b_1b_3} \ar@{}[ddrr]|{m_3m_1^{c_3}} 
              && v_1 \ar[dd]^{c_1c_3} \\ 
   w_1 \ar[rr]_{d_1}  \ar[dd]_{b_3} \ar@{}[ddrr]|{m_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>Again the boundary condition is satisfied:</p>

<p class="pcenter"
\partial(m_3m_1^{c_3}) 
~=~ (\partial m_3) \partial(m_1^{c_3})  
~=~ (d_3^{-1}b_3^{-1}d_1c_3)c_3^{-1}(d_1^{-1}b_1^{-1}a_1c_1)c_3
~=~ d_3^{-1}(b_1b_3)^{-1}a_1(c_1c_3). 
</p>


<div class="example"><pre>

<span class="GAPprompt">gap></span> <span class="GAPinput">b3 := Arrow( Gs3, (8,9), -1, -2 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">c3 := Arrow( Gs3, (7,9,8), -3, -2 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">d3 := Arrow( Gs3, (7,9), -2, -2 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">sq3 := SquareOfArrows( D1, g, d1, b3, c3, d3 );</span>
[-1] ------------ (7,8,9) -----------> [-3]
  |                                     |
(8,9)        (11,12,13,14,15,16)        (7,9,8)
  V                                     V
[-2] ------------- (7,9) ------------> [-2]
<span class="GAPprompt">gap></span> <span class="GAPinput">m3 := ElementOfSquare( sq3 ); </span>
(11,12,13,14,15,16)
<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>
[-6] ---------- (7,8) ---------> [-5]
  |                                |
(7,8,9)        (11,13)(14,16)        (7,9)
  V                                V
[-2] ---------- (7,9) ---------> [-2]
<span class="GAPprompt">gap></span> <span class="GAPinput">## check the boundary condition:</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">ec3 := ElementOfArrow( c3 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">im1c3 := ImageElmXModAction( X12, m1, ec3 );</span>
(11,14)(12,13)(15,16)
<span class="GAPprompt">gap></span> <span class="GAPinput">m13 := ElementOfSquare( sq13 );</span>
(11,13)(14,16)
<span class="GAPprompt">gap></span> <span class="GAPinput">m3 * im1c3 = m13;</span>
true

</pre></div>

<p>The <code class="code">HorizontalProduct</code> and <code class="code">VerticalProduct</code> 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} \ar@{}[ddrr]|{m_1} 
     && v_1 \ar[rr]^{a_2} \ar[dd]|{c_1} \ar@{}[ddrr]|{m_2}  
         && v_2 \ar[dd]^{c_2} 
             & &  &&&  \\ 
     &&  &&  & &  u_1 \ar[rrr]^{a_1a_2} \ar[dd]_{b_1b_3} 
                  \ar@{}[ddrrr]|{m_3^{d_4}m_4\left(m_1^{d_2}m_2\right)^{c_4}} 
                  &&& v_2 \ar[dd]^{c_1c_4} \\ 
   w_1 \ar[rr]|{d_1} \ar[dd]_{b_3} \ar@{}[ddrr]|{m_3}  
     && x_1 \ar[rr]|{d_2} \ar[dd]|{c_3} \ar@{}[ddrr]|{m_4} 
         &&  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>where</p>

<p class="pcenter">
m_3^{d_4}m_4 (m_1^{d_2}m_2)^{c_4} 
~=~ (m_3m_1^{c_3})^{d_4} m_4m_2^{c_4} 
~=~ (d_3d_4)^{-1}(b_1b_3)^{-1}(a_1a_2)(c_3c_4).
</p>

<p>Continuing with our example, we check that the two ways of computing the product of four squares below agree.</p>

<p class="pcenter"

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

</p>


<div class="example"><pre>

<span class="GAPprompt">gap></span> <span class="GAPinput">c4 := Arrow( Gs3, (8,9), -4, -3 );; </span>
<span class="GAPprompt">gap></span> <span class="GAPinput">d4 := Arrow( Gs3, (7,8), -2, -3 );; </span>
<span class="GAPprompt">gap></span> <span class="GAPinput">sq4 := SquareOfArrows( D1, h, d2, c3, c4, d4 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">UpArrow(sq4)=DownArrow(sq2) and LeftArrow(sq4)=RightArrow(sq3); </span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">sq24 := VerticalProduct( sq2, sq4 ); </span>
[-5] ---------- (8,9) ---------> [-4]
  |                                |
(7,9)        (11,15)(12,14)        (7,9,8)
  V                                V
[-2] ---------- (7,8) ---------> [-3]
<span class="GAPprompt">gap></span> <span class="GAPinput">sq34 := HorizontalProduct( sq3, sq4 );</span>
[-1] ------------- (7,8) ------------> [-4]
  |                                     |
(8,9)        (11,12)(13,16)(14,15)        (8,9)
  V                                     V
[-2] ------------ (7,9,8) -----------> [-3]
<span class="GAPprompt">gap></span> <span class="GAPinput">sq1324 := HorizontalProduct( sq13, sq24 );</span>
[-6] ------------- (7,9,8) ------------> [-4]
  |                                        |
(7,8,9)        (11,15,13)(12,16,14)        (7,9,8)
  V                                        V
[-2] ------------- (7,9,8) ------------> [-3]
<span class="GAPprompt">gap></span> <span class="GAPinput">sq1234 := VerticalProduct( sq12, sq34 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">sq1324 = sq1234;</span>
true

</pre></div>

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

<h4>11.2 <span class="Heading">Conversion of Basic Double Groupoids</span></h4>

<p>As mentioned earlier, double groupoids were introduced in the <strong class="pkg">Groupoids</strong> package, but these were <em>basic double groupoids</em>, 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.</p>

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

<h5>11.2-1 EnhancedBasicDoubleGroupoid</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&#an style='color: green'>8227; EnhancedBasicDoubleGroupoid</code>( <var class="Arg">bdg</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>We need to add a pre-crossed module to the definition of a basic double groupoid. We choose to add <span class="SimpleMath">(G -> G)</span> where <span class="SimpleMath">G</span> 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 <strong class="pkg">Groupoids</strong> package, converting basic <code class="code">B0</code> to <code class="code">D0</code>, and we check that the same square is produced in each case.</p>


<div class="example"><pre>

<span class="GAPprompt">gap></span> <span class="GAPinput">g2 := (1,2,3,4);;  h2 := (1,3);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">gend8 := [ g2, h2 ];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">d8 := Group( gend8 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">SetName( d8, "d8" ); </span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Gd8 := Groupoid( d8, [-9..-7] );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">SetName( Gd8, "Gd8" ); </span>
<span class="GAPprompt">gap></span> <span class="GAPinput">B0 := SinglePieceBasicDoubleGroupoid( Gd8 );; </span>
<span class="GAPprompt">gap></span> <span class="GAPinput">B0!.groupoid;</span>
Gd8
<span class="GAPprompt">gap></span> <span class="GAPinput">B0!.objects;</span>
[ -9 .. -7 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">a0 := Arrow(Gd8,(),-9,-7);;    b0 := Arrow(Gd8,g2,-9,-9);;  </span>
<span class="GAPprompt">gap></span> <span class="GAPinput">c0 := Arrow(Gd8,h2,-7,-8);;    d0 := Arrow(Gd8,(2,4),-9,-8);;      </span>
<span class="GAPprompt">gap></span> <span class="GAPinput">bdy0 := d0![2]^-1 * b0![2]^-1 * a0![2] * c0![2];; </span>
<span class="GAPprompt">gap></span> <span class="GAPinput">bsq0 := SquareOfArrows( B0, bdy0, a0, b0, c0, d0 ); </span>
[-9] ---------- () ---------> [-7]
  |                             |
(1,2,3,4)        (1,4,3,2)        (1,3)
  V                             V
[-9] --------- (2,4) --------> [-8]

<span class="GAPprompt">gap></span> <span class="GAPinput">D0 := EnhancedBasicDoubleGroupoid( B0 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">D0!.prexmod;</span>
[d8->d8]
<span class="GAPprompt">gap></span> <span class="GAPinput">bsq0 = SquareOfArrows( D0, bdy0, a0, b0, c0, d0 ); </span>
true

</pre></div>

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

<h4>11.3 <span class="Heading">Commutative double groupoids</span></h4>

<p>A double groupoid square</p>

<p class="pcenter"


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

</p>

<p>is <em>commutative</em> if <span class="SimpleMath">a_1c_1 = b_1d_1</span>, 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 horizontally and vertically provided only that they have the correct common arrow.</p>

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

<h5>11.3-1 DoubleGroupoidWithZeroBoundary</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&#an style='color: green'>8227; DoubleGroupoidWithZeroBoundary</code>( <var class="Arg">gpd</var>, <var class="Arg">src</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>The data for a double groupoid of commutative squares therefore consists of a groupoid and a source group. We may use the operation <code class="func">PreXModWithTrivialRange</code> (<a href="chap2.html#X8487BE427858C5C9"><span class="RefLink">2.3-1</span></a>) to provide a pre-crossed module. We take for our example the groupoid <code class="code">Gd8</code> and the pre-crossed module <code class="code">Q16</code> of section <a href="chap2.html#X7D435B6279032D4D"><span class="RefLink">2.3</span></a>. We introduce a new right arrow to construct a square which commutes.</p>


<div class="example"><pre>

<span class="GAPprompt">gap></span> <span class="GAPinput">D16 := DoubleGroupoidWithZeroBoundary( Gs3, d16 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">D16!.prexmod;</span>
[d16->Group( [ () ] )]
<span class="GAPprompt">gap></span> <span class="GAPinput">e16 := Arrow( Gs3, (7,9,8), -5, -3 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">sq16 := SquareOfArrows( D16, (12,18)(13,17)(14,16), a1, b1, e16, d1 );</span>
[-6] -------------- (7,8) -------------> [-5]
  |                                       |
(7,9)        (12,18)(13,17)(14,16)        (7,9,8)
  V                                       V
[-1] ------------- (7,8,9) ------------> [-3]

</pre></div>


<div class="chlinkprevnextbot"> <a href="chap0.html">[Top of Book]</a>   <a href="chap0.html#contents">[Contents]</a>    <a href="chap10.html">[Previous Chapter]</a>    <a href="chap12.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="chap11.html">11</a>  <a href="chap12.html">12</a>  <a href="chap13.html">13</a>  <a href="chap14.html">14</a>  <a href="chap15.html">15</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>

Messung V0.5 in Prozent
C=100 H=100 G=100

[0.21QuellennavigatorsProjekt 2026-06-26]