File: chap14.html

package info (click to toggle)
gap-hap 1.70%2Bds-1
  • links: PTS
  • area: main
  • in suites: forky, sid
  • size: 56,612 kB
  • sloc: xml: 16,139; sh: 216; javascript: 155; makefile: 126; ansic: 47; perl: 36
file content (464 lines) | stat: -rw-r--r-- 39,617 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
<?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 (HAP commands) - Chapter 14: Fundamental domains for Bianchi groups</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="chap14"  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="chap16.html">16</a>  <a href="chapBib.html">Bib</a>  <a href="chapInd.html">Ind</a>  </div>

<div class="chlinkprevnexttop">&nbsp;<a href="chap0.html">[Top of Book]</a>&nbsp;  <a href="chap0.html#contents">[Contents]</a>&nbsp;  &nbsp;<a href="chap13.html">[Previous Chapter]</a>&nbsp;  &nbsp;<a href="chap15.html">[Next Chapter]</a>&nbsp;  </div>

<p id="mathjaxlink" class="pcenter"><a href="chap14_mj.html">[MathJax on]</a></p>
<p><a id="X805848868005D528" name="X805848868005D528"></a></p>
<div class="ChapSects"><a href="chap14.html#X805848868005D528">14 <span class="Heading">Fundamental domains for Bianchi groups</span></a>
<div class="ContSect"><span class="tocline"><span class="nocss">&nbsp;</span><a href="chap14.html#X858B1B5D8506FE81">14.1 <span class="Heading">Bianchi groups</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss">&nbsp;</span><a href="chap14.html#X872D22507F797001">14.2 <span class="Heading">Swan's description of a fundamental domain</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss">&nbsp;</span><a href="chap14.html#X7B9DE54F7ECB7E44">14.3 <span class="Heading">Computing a fundamental domain</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss">&nbsp;</span><a href="chap14.html#X7A489A5D79DA9E5C">14.4 <span class="Heading">Examples</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss">&nbsp;</span><a href="chap14.html#X86CD59CB7A04EE5A">14.5 <span class="Heading">Establishing correctness of a fundamental domain</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss">&nbsp;</span><a href="chap14.html#X78476F127B73BBD1">14.6 <span class="Heading">Computing a free resolution for <span class="SimpleMath">SL_2(mathcal O_-d)</span></span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss">&nbsp;</span><a href="chap14.html#X784B2156823AEB15">14.7 <span class="Heading">Some sanity checks</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">&nbsp;&nbsp;</span><a href="chap14.html#X7E5A36D47F9D4A47">14.7-1 <span class="Heading">Equivariant Euler characteristic</span></a>
</span>
<span class="ContSS"><br /><span class="nocss">&nbsp;&nbsp;</span><a href="chap14.html#X852CDAFF84C5DF01">14.7-2 <span class="Heading">Boundary squares to zero</span></a>
</span>
<span class="ContSS"><br /><span class="nocss">&nbsp;&nbsp;</span><a href="chap14.html#X7E64819A7C058EDD">14.7-3 <span class="Heading">Compare different algorithms or implementations</span></a>
</span>
<span class="ContSS"><br /><span class="nocss">&nbsp;&nbsp;</span><a href="chap14.html#X8223864085412705">14.7-4 <span class="Heading">Compare geometry to algebra</span></a>
</span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss">&nbsp;</span><a href="chap14.html#X78BC9D077956089A">14.8 <span class="Heading">Group presentations</span></a>
</span>
</div>
<div class="ContSect"><span class="tocline"><span class="nocss">&nbsp;</span><a href="chap14.html#X786CFAA17C0A6E7A">14.9 <span class="Heading">Finite index subgroups</span></a>
</span>
</div>
</div>

<h3>14 <span class="Heading">Fundamental domains for Bianchi groups</span></h3>

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

<h4>14.1 <span class="Heading">Bianchi groups</span></h4>

<p>The <em>Bianchi groups</em> are the groups <span class="SimpleMath">G_-d=PSL_2(cal O_-d)</span> where <span class="SimpleMath">d</span> is a square free positive integer and <span class="SimpleMath">cal O_-d</span> is the ring of integers of the imaginary quadratic field <span class="SimpleMath">Q(sqrt-d)</span>. These groups act on <em>upper-half space</em></p>

<p class="pcenter">{\frak h}^3 =\{(z,t) \in \mathbb C\times \mathbb R\ |\ t &gt; 0\}  </p>

<p>by the formula</p>

<p class="pcenter">\left(\begin{array}{ll}a&amp;b\\ c &amp;d \end{array}\right)\cdot (z+tj) \ = \ \left(a(z+tj)+b\right)\left(c(z+tj)+d\right)^{-1}\ </p>

<p>where we use the symbol <span class="SimpleMath">j</span> satisfying <span class="SimpleMath">j^2=-1</span>, <span class="SimpleMath">ij=-ji</span> and write <span class="SimpleMath">z+tj</span> instead of <span class="SimpleMath">(z,t)</span>. Alternatively, the action is given by</p>

<p class="pcenter">\left(\begin{array}{ll}a&amp;b\\ c &amp;d \end{array}\right)\cdot (z+tj) \ = \
\frac{(az+b)\overline{(cz+d) } + a\overline c t^2}{|cz +d|^2 + |c|^2t^2} \ +\
\frac{t}{|cz+d|^2+|c|^2t^2}\, j
      \ .</p>

<p>We take the boundary <span class="SimpleMath">∂ frak h^3</span> to be the Riemann sphere <span class="SimpleMath">C ∪ ∞</span> and let <span class="SimpleMath">overlinefrak h^3</span> denote the union of <span class="SimpleMath">frak h^3</span> and its boundary. The action of <span class="SimpleMath">G_-d</span> extends to the boundary. The element <span class="SimpleMath">∞</span> and each element of the number field <span class="SimpleMath">Q(sqrt-d)</span> are thought of as lying in the boundary <span class="SimpleMath">∂ frak h^3</span> and are referred to as <em>cusps</em>. Let <span class="SimpleMath">X</span> denote the union of <span class="SimpleMath">frak h^3</span> with the set of cusps, <span class="SimpleMath">X=frak h^3 ∪ {∞} ∪ Q(sqrt-d)</span>. It follows from work of Bianchi and Humbert that the space <span class="SimpleMath">X</span> admits the structure of a regular CW-complex (depending on <span class="SimpleMath">d</span>) for which the action of <span class="SimpleMath">G_-d</span> on <span class="SimpleMath">frak h^3</span> extends to a cellular action on <span class="SimpleMath">X</span> which permutes cells. Moreover, <span class="SimpleMath">G_-d</span> acts transitively on the <span class="SimpleMath">3</span>-cells of <span class="SimpleMath">X</span> and each <span class="SimpleMath">3</span>-cell has trivial stabilizer in <span class="SimpleMath">G_-d</span>. Details are provided in Richard Swan's paper <a href="chapBib.html#biBswanB">[Swa71b]</a>.</p>

<p>We refer to the closure in <span class="SimpleMath">X</span> of any one of these <span class="SimpleMath">3</span>-cells as a <em>fundamental domain</em> for the action <span class="SimpleMath">G_-d</span>. Cohomology of <span class="SimpleMath">G_-d</span> can be computed from a knowledge of the combinatorial structure of this fundamental domain together with a knowledge of the stabilizer groups of the cells of dimension <span class="SimpleMath">≤ 2</span>.</p>

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

<h4>14.2 <span class="Heading">Swan's description of a fundamental domain</span></h4>

<p>A pair <span class="SimpleMath">(a,b)</span> of elements in <span class="SimpleMath">cal O_-d</span> is said to be <em>unimodular</em> if the ideal generated by <span class="SimpleMath">a,b</span> is the whole ring <span class="SimpleMath">cal O_-d</span> and <span class="SimpleMath">ane 0</span>. A unimodular pair can be represented by a hemisphere in <span class="SimpleMath">overlinefrak h^3</span> with base centred at the point <span class="SimpleMath">b/a ∈ C</span> and of radius <span class="SimpleMath">|1/a|</span>. The radius is <span class="SimpleMath">≤ 1</span>. Think of the points in <span class="SimpleMath">frak h^3</span> as lying strictly above <span class="SimpleMath">C</span>. Let <span class="SimpleMath">B</span> denote the space obtained by removing all such hemispheres from <span class="SimpleMath">frak h^3</span>.</p>

<p>When <span class="SimpleMath">d ≡ 3 mod 4</span> let <span class="SimpleMath">F</span> be the subspace of <span class="SimpleMath">overlinefrak h^3</span> consisting of the points <span class="SimpleMath">x+iy+jt</span> with <span class="SimpleMath">-1/2 ≤ x ≤ 1/2</span>, <span class="SimpleMath">-1/4 ≤ y ≤ 1/4</span>, <span class="SimpleMath">t ≥ 0</span>. Otherwise, let <span class="SimpleMath">F</span> be the subspace of <span class="SimpleMath">overlinefrak h^3</span> consisting of the points <span class="SimpleMath">x+iy+jt</span> with <span class="SimpleMath">-1/2 ≤ x ≤ 1/2</span>, <span class="SimpleMath">-1/2 ≤ y ≤ 1/2</span>, <span class="SimpleMath">t ≥ 0</span>.</p>

<p>It is explained in <a href="chapBib.html#biBswanB">[Swa71b]</a> that <span class="SimpleMath">F∩ B</span> is a <span class="SimpleMath">3</span>-cell in the above mentioned regular CW-complex structure on <span class="SimpleMath">X</span>.</p>

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

<h4>14.3 <span class="Heading">Computing a fundamental domain</span></h4>

<p>Explicit fundamental domains for certain values of <span class="SimpleMath">d</span> were calculated by Bianchi in the 1890s and further calculations were made by Swan in 1971 <a href="chapBib.html#biBswanB">[Swa71b]</a>. In the 1970s, building on Swan's work, <span class="URL"><a href="https://www.sciencedirect.com/science/article/pii/S0723086913000042">Robert Riley</a></span> developed a computer program for computing fundamental domains of certain Kleinian groups (including Bianchi groups). In their 2010 PhD theses <span class="URL"><a href="https://theses.hal.science/tel-00526976/en/">Alexander Rahm</a></span> and <span class="URL"><a href="https://wrap.warwick.ac.uk/id/eprint/35128/">M.T. Aranes</a></span> independently developed Pari/GP and Sage software based on Swan's ideas. In 2011 <span class="URL"><a href="https://mathstats.uncg.edu/sites/yasaki/publications/bianchipolytope.pdf">Dan Yasaki</a></span> used a different approach based on Voronoi's theory of perfect forms in his Magma software for fundamental domains of Bianchi groups. <span class="URL"><a href="http://www.normalesup.org/~page/Recherche/Logiciels/logiciels-en.html">Aurel Page</a></span> developed software for fundamental domains of Kleinian groups in his 2010 masters thesis. In 2018 <span class="URL"><a href="https://github.com/schoennenbeck/VMH-DivisionAlgebras">Sebastian Schoennenbeck</a></span> used a more general approach based on perfect forms in his Magma software for computing fundamental domains of Bianchi and other groups. Output from the code of Alexander Rahm and Sebastian Schoennenbeck for certain Bianchi groups has been stored iin <strong class="button">HAP</strong> for use in constructing free resolutions.</p>

<p>More recently a <strong class="button">GAP</strong> implementation of Swan's algorithm has been included in <strong class="button">HAP</strong>. The implementation uses exact computations in <span class="SimpleMath">Q(sqrt-d)</span> and in <span class="SimpleMath">Q(sqrtd)</span>. A bespoke implementation of these two fields is part of the implementation so as to avoid making apparently slower computations with cyclotomic numbers. The account of Swan's algorithm in the thesis of Alexander Rahm was the main reference during the implementation.</p>

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

<h4>14.4 <span class="Heading">Examples</span></h4>

<p>The fundamental domain <span class="SimpleMath">D=overlineF ∩ B</span> (where the overline denotes closure) has boundary <span class="SimpleMath">∂ D</span> involving the four vertical quadrilateral <span class="SimpleMath">2</span>-cells contained in the four vertical quadrilateral <span class="SimpleMath">2</span>-cells of <span class="SimpleMath">∂ F</span>. We refer to these as the <em>vertical <span class="SimpleMath">2</span>-cells</em> of <span class="SimpleMath">D</span>. When visualizing <span class="SimpleMath">D</span> we ignore the <span class="SimpleMath">3</span>-cell and the four vertical <span class="SimpleMath">2</span>-cells entirely and visualize only the remaining <span class="SimpleMath">2</span>-cells. These <span class="SimpleMath">2</span>-cells can be viewed as a <span class="SimpleMath">2</span>-dimensional image by projecting them onto the complex plane, or they can be viewed as an interactive <span class="SimpleMath">3</span>-dimensional image.</p>

<p>A fundamental domain for <span class="SimpleMath">G_-39</span> can be visualized using the following commands.</p>


<div class="example"><pre>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">D:=BianchiPolyhedron(-39);</span>
3-dimensional Bianchi polyhedron over OQ( Sqrt(-39) ) 
involving hemispheres of minimum squared radius 1/39 
and non-cuspidal vertices of minimum squared height 1/49 . 

<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">Display3D(D);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">Display2D(D);;</span>

</pre></div>

<p><img src="images/bianchi3D39.png" align="center" height="550" alt="Fundamental domain for a Bianchi group"/> <img src="images/bianchi2D39.png" align="center" width="350" alt="Fundamental domain for a Bianchi group"/></p>

<p>A <em>cusp vertex</em> of <span class="SimpleMath">D</span> is any vertex of <span class="SimpleMath">D</span> lying in <span class="SimpleMath">C ∪ ∞</span>. In the above visualizations for <span class="SimpleMath">G_-39</span> several cusp vertices in <span class="SimpleMath">C</span> are : in the 2-dimensional visualization they are represented by red dots. Computer calculations show that these cusps lie in precisely three orbits under the action of <span class="SimpleMath">G_-d</span>. Thus, together with the orbit of <span class="SimpleMath">∞</span> there are four distinct orbits of cusps. By the well-known correspondence between cusp orbits and elements of the class group it follows that the class group of <span class="SimpleMath">Q(sqrt-39)</span> is of order <span class="SimpleMath">4</span>.</p>

<p>The following additional commands comvert the Bianchi polyhedron <span class="SimpleMath">D</span> to a regular CW-complex and then display its <span class="SimpleMath">1</span>-skeleton.</p>


<div class="example"><pre>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">D:=BianchiPolyhedron(-39);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">Y:=RegularCWComplex(D);</span>
Regular CW-complex of dimension 2

<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">Display(GraphOfRegularCWComplex(Y));</span>

</pre></div>

<p><img src="images/bianchi1skeleton.gif" align="center" height="350" alt="Fundamental domain for a Bianchi group"/></p>

<p>A fundamental domain for <span class="SimpleMath">G_-22</span> can be visualized using the following commands.</p>


<div class="example"><pre>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">D:=BianchiPolyhedron(-22);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">Display3D(OQ,D);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">Display2D(OQ,D);;</span>

</pre></div>

<p><img src="images/bianchi3D22.png" align="center" height="550" alt="Fundamental domain for a Bianchi group"/> <img src="images/bianchi2D22.png" align="center" width="350" alt="Fundamental domain for a Bianchi group"/></p>

<p>Two cusps are visible in the visualizations for <span class="SimpleMath">G_-22</span>. They lie in a single orbit. Thus, together with the orbit of <span class="SimpleMath">∞</span>, there are two orbits of cusps for this group.</p>

<p>A fundamental domain for <span class="SimpleMath">G_-163</span> can be visualized using the following commands.</p>


<div class="example"><pre>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">D:=BianchiPolyhedron(-163);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">Display3D(OQ,D);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">Display2D(OQ,D);;</span>

</pre></div>

<p><img src="images/bianchi3D163.png" align="center" height="550" alt="Fundamental domain for a Bianchi group"/> <img src="images/bianchi2D163.png" align="center" width="350" alt="Fundamental domain for a Bianchi group"/></p>

<p>There is just a single orbit of cusps in this example, the orbit containing <span class="SimpleMath">∞</span>, since <span class="SimpleMath">Q(sqrt-163)</span> is a principal ideal domain and hence has trivial class group.</p>

<p>A fundamental domain for <span class="SimpleMath">G_-33</span> is visualized using the following commands.</p>


<div class="example"><pre>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">D:=BianchiPolyhedron(-33);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">Display3D(OQ,D);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">Display2D(OQ,D);;</span>

</pre></div>

<p><img src="images/bianchi3D33.png" align="center" height="550" alt="Fundamental domain for a Bianchi group"/> <img src="images/bianchi2D33.png" align="center" width="350" alt="Fundamental domain for a Bianchi group"/></p>

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

<h4>14.5 <span class="Heading">Establishing correctness of a fundamental domain</span></h4>

<p>The cusps of a fundamental domain can be calculated independently of the domain computation. The remaining vertices of the domain will have positive heights. To prove that the computation is correct we need to establish that no non-cuspidal vertex lies below any hemishpere centered on the complex plane at <span class="SimpleMath">b/a∈ C</span> with <span class="SimpleMath">(a,b)</span> a unimodular pair. As these hemispheres have increasingly smaller radius we only need to check those finitely many hemispheres with radius smaller than the height of the lowest non-cuspidal vertex.</p>

<p>For a few values of <span class="SimpleMath">d</span> the smallest radius <span class="SimpleMath">r</span> of a hemisphere contributing to the fundamental domain boundary has been stored. For cases where this smallest radius is not stored a very slow method for finding <span class="SimpleMath">r</span> is implemented and the user is advised to speed things up by guessiing a value <span class="SimpleMath">N=1/r^2</span> and then test that this value of <span class="SimpleMath">N</span> is indeed large enough. The following commands illustrate this for <span class="SimpleMath">d=-46</span> with a guess of <span class="SimpleMath">N=600</span>. Once the test is done we can see that in fact a smaller guess of <span class="SimpleMath">N=441</span> would have sufficed.</p>


<div class="example"><pre>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">P:=BianchiPolyhedron(-46);</span>
Try 
  P:=BianchiPolyhedron(OQ,N);
for some guessed positive integer value of N and then try
  SwanBianchiCriterion(P);
to test if the value of N was large enough. If the test returns false then you\
'll need to try a larger value of N.

A successful value of N can be stored as a pair [d,N] in the list HAPRECORD wh\
ich can be edited manually in the file hap/lib/Congruence/bianchi.gi .


<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">P:=BianchiPolyhedron(-46,600);</span>
3-dimensional Bianchi polyhedron over OQ( Sqrt(
-46) ) involving hemispheres of minimum squared radius 1/
441 and non-cuspidal vertices of minimum squared height 1/8280 . 

<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">SwanBianchiCriterion(P);</span>
true

</pre></div>

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

<h4>14.6 <span class="Heading">Computing a free resolution for <span class="SimpleMath">SL_2(mathcal O_-d)</span></span></h4>

<p>The above fundamental domains can be used to construct free resolutions for <span class="SimpleMath">SL_2(mathcal O_-d)</span> and <span class="SimpleMath">PSL_2(mathcal O_-d)</span>. The following commands illustrate the computation of free resolutions for <span class="SimpleMath">SL_2(mathcal O_-43)</span> and <span class="SimpleMath">SL_2(mathcal O_-10)</span> and <span class="SimpleMath">SL_2(mathcal O_-14)</span> and their integral homology (which in each case is periodic of period dividing <span class="SimpleMath">4</span> in degrees <span class="SimpleMath">≥ 3</span>). The computation of fundamental domains uses exact arithmetic in the two field extensions <span class="SimpleMath">Q(sqrtd)</span> and <span class="SimpleMath">Q(sqrt-d)</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">K:=BianchiGcomplex(-43);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">R:=FreeGResolution(K,11);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">C:=TensorWithIntegers(R);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">List([0..10],n-&gt;Homology(C,n));</span>
[ [ 0 ], [ 0, 0 ], [ 2, 2, 12, 0 ], [ 2, 2, 24 ], [ 2, 2 ], [ 2 ], 
  [ 2, 2, 12 ], [ 2, 2, 24 ], [ 2, 2 ], [ 2 ], [ 2, 2, 12 ] ]

<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">K:=BianchiGcomplex(-10);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">R:=FreeGResolution(K,11);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">List([0..10],k-&gt;Homology(TensorWithIntegers(R),k));</span>
[ [ 0 ], [ 2, 2, 0, 0, 0 ], [ 2, 2, 2, 12, 0, 0 ], [ 2, 2, 2, 24 ], 
  [ 2, 4, 12 ], [ 2, 2, 2, 6 ], [ 2, 2, 2, 12 ], [ 2, 2, 2, 24 ], 
  [ 2, 4, 12 ], [ 2, 2, 2, 6 ], [ 2, 2, 2, 12 ] ]

<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">K:=BianchiGcomplex(-14);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">R:=FreeGResolution(K,11);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">List([0..10],k-&gt;Homology(TensorWithIntegers(R),k));</span>
[ [ 0 ], [ 6, 0, 0, 0, 0, 0 ], [ 2, 2, 2, 4, 12, 0, 0, 0, 0 ], 
  [ 2, 2, 2, 2, 24 ], [ 2, 2, 2, 4, 12 ], [ 2, 2, 2, 2, 24 ], 
  [ 2, 2, 2, 4, 12 ], [ 2, 2, 2, 2, 24 ], [ 2, 2, 2, 4, 12 ], 
  [ 2, 2, 2, 2, 24 ], [ 2, 2, 2, 4, 12 ] ]

</pre></div>

<p>The following commands count the number of orbits of cusps (in addition to the orbit of <span class="SimpleMath">∞</span>). They determine that there is precisely one element in the ideal class group of <span class="SimpleMath">mathcal O_-43</span> (i.e it is a principal ideal domain) and that there are precisely two elements in the ideal class group of <span class="SimpleMath">mathcal O_-10</span> and precisely four elements in the ideal class group of <span class="SimpleMath">mathcal O_-14</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">K:=BianchiGcomplex(-43);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">List([1..K!.dimension(0)],k-&gt;Order(K!.stabilizer(0,k)));</span>
[ 24, 24, 6, 6, 4, 4, 12, 12 ]

<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">K:=BianchiGcomplex(-10);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">List([1..K!.dimension(0)],k-&gt;Order(K!.stabilizer(0,k)));</span>
[ 6, 6, 4, 4, 6, infinity ]

<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">K:=BianchiGcomplex(-14);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">List([1..K!.dimension(0)],k-&gt;Order(K!.stabilizer(0,k)));</span>
[ 6, 6, 2, 2, 2, infinity, infinity, 2, infinity, 6, 4 ]

</pre></div>

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

<h4>14.7 <span class="Heading">Some sanity checks</span></h4>

<p>There is ample scope for bugs in the implementation of the above method for computing resolutions of Bianchi groups. The following sanity checks lend confidence to the implementation.</p>

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

<h5>14.7-1 <span class="Heading">Equivariant Euler characteristic</span></h5>

<p>Let <span class="SimpleMath">X</span> be any cell complex with an action of a group <span class="SimpleMath">G</span> such that (i) <span class="SimpleMath">X</span> has finitely many <span class="SimpleMath">G</span>-orbits of cells, and (ii) the stabilizer subgroup in <span class="SimpleMath">G</span> for each cell is either finite or free abelian. One defines the <em>equivariant Euler characteristic</em> $$\chi_G(X) = \sum_e (-1)^{dim~ e} / |Stab_G(e)|$$ where <span class="SimpleMath">e</span> ranges over a set of representatives of the orbits of those cells with finite stabilizers. If <span class="SimpleMath">G</span> has a finite index torsion free subgroup and if the complex <span class="SimpleMath">X</span> is contractible then one can define the Euler characteristic of the group to be <span class="SimpleMath">χ(G) = χ_G(X)</span>. It is known that <span class="SimpleMath">χ (SL_n(mathcal O)) = χ(GL_n(mathcal O)) =0</span> for <span class="SimpleMath">mathcal O</span> the ring of integers of a number field <a href="chapBib.html#biBGangl">[DSGG+16]</a>.</p>

<p>One easy test to make in our computations is to check that the equivariant Euler characteristic of the <span class="SimpleMath">2</span>-complex is indeed zero. The following commands perform this test for the group <span class="SimpleMath">SL_2(mathcal O_-23)</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">K:=BianchiGcomplex(-23);;</span>

<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">chi:=0;;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">for n in [0..2] do</span>
<span class="GAPprompt">&gt;</span> <span class="GAPinput">for k in [1..K!.dimension(n)] do</span>
<span class="GAPprompt">&gt;</span> <span class="GAPinput">g:=Order(K!.stabilizer(n,k));</span>
<span class="GAPprompt">&gt;</span> <span class="GAPinput">if g &lt; infinity then chi:=chi + (-1)^n/g; fi;</span>
<span class="GAPprompt">&gt;</span> <span class="GAPinput">od;od;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">chi;</span>
0

</pre></div>

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

<h5>14.7-2 <span class="Heading">Boundary squares to zero</span></h5>

<p>The signs in the boundary maps of the free resolution are delicate. Another easy test is to check that the boundary in the resolution squares to zero. The following commands perform this check for the group <span class="SimpleMath">SL_2(mathcal O_-23)</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">K:=BianchiGcomplex(-23);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">R:=FreeGResolution(K,10);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">n:=2;;List([1..R!.dimension(n)],k-&gt;ResolutionBoundaryOfWord(R,n-1,R!.boundary(n,k)));</span>
[ [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], 
  [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], 
  [  ], [  ], [  ] ]
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">n:=3;;List([1..R!.dimension(n)],k-&gt;ResolutionBoundaryOfWord(R,n-1,R!.boundary(n,k)));</span>
[ [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], 
  [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], 
  [  ], [  ], [  ] ]
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">n:=4;;List([1..R!.dimension(n)],k-&gt;ResolutionBoundaryOfWord(R,n-1,R!.boundary(n,k)));</span>
[ [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], 
  [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], 
  [  ], [  ], [  ] ]
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">n:=5;;List([1..R!.dimension(n)],k-&gt;ResolutionBoundaryOfWord(R,n-1,R!.boundary(n,k)));</span>
[ [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], 
  [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], 
  [  ], [  ], [  ] ]

</pre></div>

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

<h5>14.7-3 <span class="Heading">Compare different algorithms or implementations</span></h5>

<p>Sebastian Schoennenbeck in his thesis work computed some contractible <span class="SimpleMath">2</span>-complexes on which Bianchi groups act with finite stabilizers (even when the ideal class is greater than <span class="SimpleMath">1</span>) using a different approach to that of Swan. These computed complexes are stored in <strong class="button">HAP</strong> and provide an alternative way of computing cohomology for the stored groups. Alexander Rahm in his thesis work implemented Swan's approach and has provided some <span class="SimpleMath">2</span>-complexes that are also stored in <strong class="button">HAP</strong> in cases where the ideal class is equal to <span class="SimpleMath">1</span>.</p>

<p>The following commands test that Sebastian Schoennenbeck's <span class="SimpleMath">2</span>-complex for <span class="SimpleMath">SL_2(mathcal O_-23)</span> yields the same integral homology as the above <strong class="button">HAP</strong> implementation. Both computations use <strong class="button">HAP</strong>'s implementation of Wall's perturbation technique for computing the resolution from the <span class="SimpleMath">2</span>-complex.</p>


<div class="example"><pre>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">K:=ContractibleGcomplex("SL(2,O-23)");;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">R:=FreeGResolution(K,10);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">List([0..9],n-&gt;Homology(TensorWithIntegers(R),n));</span>
[ [ 0 ], [ 12, 0, 0, 0 ], [ 2, 2, 12, 0, 0 ], [ 2, 2, 12 ], [ 2, 2, 12 ], 
  [ 2, 2, 12 ], [ 2, 2, 12 ], [ 2, 2, 12 ], [ 2, 2, 12 ], [ 2, 2, 12 ] ]

<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">K:=BianchiGcomplex(-23);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">R:=FreeGResolution(K,10);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">List([0..9],n-&gt;Homology(TensorWithIntegers(R),n));</span>
[ [ 0 ], [ 12, 0, 0, 0 ], [ 2, 2, 12, 0, 0 ], [ 2, 2, 12 ], [ 2, 2, 12 ], 
  [ 2, 2, 12 ], [ 2, 2, 12 ], [ 2, 2, 12 ], [ 2, 2, 12 ], [ 2, 2, 12 ] ]

</pre></div>

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

<h5>14.7-4 <span class="Heading">Compare geometry to algebra</span></h5>

<p>The number of cusps (i.e. the number of orbits of vertices with infinite stabilizer subgroup) must be precisely one less than the number of elements in the ideal class group of <span class="SimpleMath">mathcal O_-d</span>. The following commands check this for <span class="SimpleMath">SL_2(mathcal O_-23)</span> where <span class="SimpleMath">mathcal O_-23</span> is known to have class number 3. (This class number is easily computed from a formula in Swan's paper.)</p>


<div class="example"><pre>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">K:=BianchiGcomplex(-23);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">List([1..K!.dimension(0)],k-&gt;Order(K!.stabilizer(0,k)));</span>
[ 6, 2, 2, 4, infinity, infinity ]

</pre></div>

<p>A visualization of the fundamental domain tells us a certain amount about the algebra. In the case of <span class="SimpleMath">SL_2(mathcal O_-23)</span></p>

<p><img src="images/sl2O-23.png" align="center" height="300" alt="Fundamental domain for a Bianchi group"/></p>

<p>a fundamental domain for the action on <span class="SimpleMath">C</span> by the translation subgroup generated by the matrices $$ \left(\begin{array}{ll} 1 &amp;1\\ 0 &amp;1\end{array}\right), \left(\begin{array}{ll} 1 &amp;\omega\\ 0 &amp;1\end{array}\right) $$ <span class="SimpleMath">ω = (1+sqrt-23)/2</span> is indicated by the white rectangle. From this we see that under the action of <span class="SimpleMath">SL_2(mathcal O_-23)</span> there are at most <span class="SimpleMath">11</span> orbits of <span class="SimpleMath">2</span>-cells, the central decagon and ten quadrilaterals. However, the matrix $$ \left(\begin{array}{rr} 0 &amp;-1\\ 1 &amp;0\end{array}\right) $$ maps <span class="SimpleMath">(z,0)</span> to <span class="SimpleMath">(-1/z,0)</span> and fixes <span class="SimpleMath">(0,1)</span>. This isometry identifies points on the boundary of the decagon pairwise. These observations are consistent with the above listing of the six orbit stabilizers and the following algebraic information on the boundaries of the <span class="SimpleMath">2</span>-cells in the Bianchi <span class="SimpleMath">2</span>-complex.</p>


<div class="example"><pre>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">K:=BianchiGcomplex(-23);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">List([1..K!.dimension(2)],k-&gt;Length(K!.boundary(2,k)));</span>
[ 10, 4, 4, 4, 4, 4 ]

</pre></div>

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

<h4>14.8 <span class="Heading">Group presentations</span></h4>

<p>Swan's reason for studying fundamental domains was to obtain explicit group presentations for <span class="SimpleMath">SL_2(mathcal O_-d)</span> for various values of <span class="SimpleMath">d</span>. The following commands obtain a presentation for <span class="SimpleMath">SL_2(mathcal O_-23)</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">K:=BianchiGcomplex(-23);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">R:=FreeGResolution(K,2);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">P:=PresentationOfResolution(R);</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">G:=SimplifiedFpGroup(P!.freeGroup/P!.relators);</span>
&lt;fp group on the generators [ k, r, s, w, x ]&gt;
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">RelatorsOfFpGroup(G);</span>
[ w^-1*k*w*k^-1, s^-1*r*s*r^-1, k^6, x^-1*k^-3*x*k^-3, s^-1*k^-3*s*k^-3, 
  r^-1*w*x^-1*s*r*w^-1*x*s^-1, r^-1*k^-3*r*k^-3, 
  x*k^-2*r^-1*x*r^-1*s^-1*k^-1*s^-1, x^-1*k^3*s*r*x^-1*s*r ]

<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">#Next we identify the generators as matrices</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">GeneratorsOfGroup(P!.freeGroup);</span>
[ k, m, n, p, q, r, s, t, u, v, w, x, y, z ]
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">P!.gens;</span>
[ 19, 6, 6, 20, 6, 21, 22, 6, 52, 53, 2, 50, 1, 4 ]

<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">k:=R!.elts[19];</span>
[ [ 1, 1 ], 
  [ -1, 0 ] ]
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">r:=R!.elts[21];</span>
[ [ 3, 3 + -1 Sqrt(-23) ], 
  [ -3/2 + -1/2 Sqrt(-23), -5 ] ]
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">s:=R!.elts[22];</span>
[ [ 2 + 1 Sqrt(-23), 13/2 + 1/2 Sqrt(-23) ], 
  [ 5/2 + -1/2 Sqrt(-23), -1 Sqrt(-23) ] ]
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">w:=R!.elts[2];</span>
[ [ 3/2 + 1/2 Sqrt(-23), -3/2 + 1/2 Sqrt(-23) ], 
  [ 3/2 + -1/2 Sqrt(-23), 3 ] ]
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">x:=R!.elts[50];</span>
[ [ 11/2 + 1/2 Sqrt(-23), 15/2 + -1/2 Sqrt(-23) ], 
  [ -1 Sqrt(-23), -4 + -1 Sqrt(-23) ] ]

</pre></div>

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

<h4>14.9 <span class="Heading">Finite index subgroups</span></h4>

<p>The following commands compute the integral homology of a congruence subgroup <span class="SimpleMath">G</span> of index 24 in <span class="SimpleMath">SL_2(mathcal O_-23)</span>. They also compute a presentation for <span class="SimpleMath">G</span> with 13 generators and 24 relators.</p>


<div class="example"><pre>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">OQ:=RingOfIntegers(QuadraticNumberField(-23));;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">I:=QuadraticIdeal(OQ,[Sqrt(-23)]);</span>
ideal of norm 23 in O(Q(Sqrt(-23)))
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">G:=HAP_CongruenceSubgroupGamma0(I);</span>
&lt;group of 2x2 matrices in characteristic 0&gt;
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">IndexInSL2O(G);</span>
24

<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">K:=BianchiGcomplex(-23);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">R:=FreeGResolution(K,11);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">R:=QuadraticToCyclotomicCoefficients(R);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">S:=ResolutionFiniteSubgroup(R,G);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">List([0..10],n-&gt;Homology(TensorWithIntegers(S),n));</span>
[ [ 0 ], [ 2, 0, 0, 0, 0, 0, 0, 0, 0 ], 
  [ 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0 ], [ 2, 2, 2, 2, 2, 2, 2, 2 ],
  [ 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2 ], 
  [ 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2 ], 
  [ 2, 2, 2, 2, 2, 2, 2, 2 ], [ 2, 2, 2, 2, 2, 2, 2, 2 ], 
  [ 2, 2, 2, 2, 2, 2, 2, 2 ] ]

<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">P:=PresentationOfResolution(S);;</span>
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">H:=SimplifiedFpGroup(P!.freeGroup/P!.relators);</span>
&lt;fp group on the generators [ f8, f10, f15, f70, f86, f125, f132, f138, f182, 
  f187, f191, f273, f279 ]&gt;
<span class="GAPprompt">gap&gt;</span> <span class="GAPinput">Length(RelatorsOfFpGroup(H));</span>
24

</pre></div>


<div class="chlinkprevnextbot">&nbsp;<a href="chap0.html">[Top of Book]</a>&nbsp;  <a href="chap0.html#contents">[Contents]</a>&nbsp;  &nbsp;<a href="chap13.html">[Previous Chapter]</a>&nbsp;  &nbsp;<a href="chap15.html">[Next Chapter]</a>&nbsp;  </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="chap16.html">16</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>