GAP (HAP commands) - Chapter 14: Fundamental domains for Bianchi groups

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

[MathJax on]

14 Fundamental domains for Bianchi groups
14.1 Bianchi groups
14.2 Swan's description of a fundamental domain
14.3 Computing a fundamental domain
14.4 Examples
14.5 Establishing correctness of a fundamental domain
14.6 Computing quotient 2-complexes
14.7 Computing a free resolution for SL_2(mathcal O_-d)
14.8 Some sanity checks
14.8-1 Equivariant Euler characteristic
14.8-2 Boundary squares to zero
14.8-3 Compare different algorithms or implementations
14.8-4 Compare geometry to algebra
14.9 Group presentations
14.9-1 Swan's generators
14.10 Finite index subgroups
14.11 Totally real quadratic fields / Hilbert modular group
14.12 Calling Magma's Voronoi algorithm directly

### 14 Fundamental domains for Bianchi groups

#### 14.1 Bianchi groups

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

{\frak h}^3 =\{(z,t) \in \mathbb C\times \mathbb R\ |\ t > 0\}

by the formula

\left(\begin{array}{ll}a&b\\ c &d \end{array}\right)\cdot (z+tj) \ = \ \left(a(z+tj)+b\right)\left(c(z+tj)+d\right)^{-1}\

where we use the symbol j satisfying j^2=-1, ij=-ji and write z+tj instead of (z,t). Alternatively, the action is given by

\left(\begin{array}{ll}a&b\\ c &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 \ .

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

We refer to the closure in X of any one of these 3-cells as a fundamental domain for the action G_-d. Cohomology of G_-d 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 ≤ 2.

#### 14.2 Swan's description of a fundamental domain

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

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

It is explained in [Swa71b] that F∩ B is a 3-cell in the above mentioned regular CW-complex structure on X.

#### 14.3 Computing a fundamental domain

Explicit fundamental domains for certain values of d were calculated by Bianchi in the 1890s and further calculations were made by Swan in 1971 [Swa71b]. In the 1970s, building on Swan's work, Robert Riley developed a computer program for computing fundamental domains of certain Kleinian groups (including Bianchi groups). In their 2010 PhD theses Alexander Rahm and M.T. Aranes independently developed Pari/GP and Sage software based on Swan's ideas. In 2011 Dan Yasaki used a different approach based on Voronoi's theory of perfect forms in his Magma software for fundamental domains of Bianchi groups. Aurel Page developed software for fundamental domains of Kleinian groups in his 2010 masters thesis. In 2018 Sebastian Schoennenbeck 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 HAP for use in constructing free resolutions.

More recently a GAP implementation of Swan's algorithm has been included in HAP. The implementation uses exact computations in Q(sqrt-d) and in Q(sqrtd). 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.

#### 14.4 Examples

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

A fundamental domain for G_-39 can be visualized using the following commands.

    gap> D:=BianchiPolyhedron(-39);
    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 .

    gap> Display3D(D);;
    gap> Display2D(D);;

A cusp vertex of D is any vertex of D lying in C ∪ ∞. In the above visualizations for G_-39 several cusp vertices in C 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 G_-d. Thus, together with the orbit of ∞ 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 Q(sqrt-39) is of order 4.

The following additional commands comvert the ``bottom surface'' of the Bianchi polyhedron D to a 2-dimensional regular CW-complex and then displays the 1-skeleton of this 2-complex.

    gap> D:=BianchiPolyhedron(-39);;
    gap> Y:=RegularCWComplex(D);
    Regular CW-complex of dimension 2

    gap> Display(GraphOfRegularCWComplex(Y));

A fundamental domain for G_-22 can be visualized using the following commands.

    gap> D:=BianchiPolyhedron(-22);;
    gap> Display3D(OQ,D);;
    gap> Display2D(OQ,D);;

Two cusps are visible in these visualizations for G_-22. They lie in a single orbit. Thus, together with the orbit of ∞, there are two orbits of cusps for this group.

An alternative visualization for G_-22 can be produced, in which the cells in a given orbit are coloured with a common colour. The following commands produce this visualization.

    gap> K:=BianchiGcomplex(-22);;
    gap> Display3D(K);

A fundamental domain for G_-163 can be visualized using the following commands.

    gap> D:=BianchiPolyhedron(-163);;
    gap> Display3D(OQ,D);;
    gap> Display2D(OQ,D);;
    gap> K:=BianchiGcomplex(-163);;
    gap> Display3D(K);

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

A fundamental domain for G_-33 is visualized using the following commands.

    gap> D:=BianchiPolyhedron(-33);;
    gap> Display3D(OQ,D);;
    gap> Display2D(OQ,D);;

#### 14.5 Establishing correctness of a fundamental domain

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 b/a∈ C with (a,b) 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.

For a few values of d the smallest radius r 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 r is implemented and the user is advised to speed things up by guessiing a value N=1/r^2 and then test that this value of N is indeed large enough. The following commands illustrate this for d=-46 with a guess of N=600. Once the test is done we can see that in fact a smaller guess of N=441 would have sufficed.

    gap> P:=BianchiPolyhedron(-46);
    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 .

    gap> P:=BianchiPolyhedron(-46,600);
    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 .

    gap> SwanBianchiCriterion(P);
    true

#### 14.6 Computing quotient 2-complexes

The space X=frak h^3 ∪ {∞} ∪ Q(sqrt-d) retracts onto an SL_2(mathcal O_-d)-equivariant 2-dimensional regular CW-complex K ⊂ X. By barycentrically subdividing K we can assume that the group action on K is rigid in the sense that any group element in the stabilizer of a cell fixes that cell pointwise. Given a congruence subgroup Γ ≤ SL_2(mathcal O_-d) the quotient space Y=K/Γ inherits a regular CW-structure. We have H_n(Γ, Q) = H_n(Y, Q) and H_n(Γ, Z_p) = H_n(Y, Z_p) for any prime not dividing the order of any group element in Γ. At these primes the p-torsion in H_n(Y, Z) equals that in H_n(Γ, Z). The following session computes the integral homology of Y for Γ=Γ_0(71) ≤ SL(2,mathcal O_-2) and establishes that Γ has no p-torsion for primes p>3 and has index 5042.

    gap> K:=BianchiGcomplex(-2);;
    gap> iso:=K!.isomorphismToGroupCyclotomicMats;;
    gap> KK:=BarycentricSubdivision(K);; #KK is a rigid complex
    gap> ResolutionIsomorphismGroup(KK,iso);; #matrices in G=SL(2,O-2) now have
    gap>                                      #cyclotomic entries

    gap> OQ:=RingOfIntegers(QuadraticNumberField(-2));;
    gap> I:=QuadraticIdeal(OQ,71);;
    gap> N:=HAP_CongruenceSubgroupGamma0(I);; #A congruence subgroup of G
    gap> IndexInSL2O(N);
    5042

    gap> Y:=GComplexToRegularCWComplex(KK,N); #Y = KK/N is a quotient CW-complex
    Regular CW-complex of dimension 2

    gap> Homology(Y,0);
    [ 0 ]
    gap> Homology(Y,1);
    [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
      4, 4, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 16, 16,
      16, 16, 16, 16, 16, 16, 16, 16, 32, 32, 96, 672, 8471771350548821313678624,
      42358856752744106568393120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0 ]
    gap> Homology(Y,2);
    [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]

    gap> Flat(List([0..2], n->
    >               List([1..K!.dimension(n)],k->Order(K!.stabilizer(n,k)))  ));
    [ 24, 6, 8, 4 ]
    gap> Factors(8471771350548821313678624);
    [ 2, 2, 2, 2, 2, 3, 7, 17, 17, 17, 19, 617, 873263, 250653841 ]
    gap> Factors(42358856752744106568393120);
    [ 2, 2, 2, 2, 2, 3, 5, 7, 17, 17, 17, 19, 617, 873263, 250653841 ]

The above computation can be corroborated by using a free resolution to calculate H_1(Γ_0(71), Z) at all primes.

    gap> R:=FreeGResolution(KK,2);;
    gap> S:=ResolutionFiniteSubgroup(R,N);;
    gap> C:=TensorWithIntegers(S);;
    gap> D:=ContractedComplex(C);;
    gap> Homology(D,1);
    [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
      4, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 16, 16, 16, 16,
      16, 16, 16, 16, 16, 16, 16, 32, 96, 96, 672, 8471771350548821313678624,
      127076570258232319705179360, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0 ]

The next example computes a CW complex Y with H^∗(Y, Z) =H^∗(Γ_0(23), Z) modulo the primes 2,3 for Γ_0(23) < SL_2(mathcal O_-2) and shows that a basis b_1,b_2,... b_9 for H^1(W, Z) = Z^9 satisfies b_i∪ b_j=0 except for b_1∪ b_6 = -b_6∪ b_1≠ 0, b_1∪ b_7 =-b_7∪ b_1ne 0, b_1∪ b_9=-b_9∪ b_1ne 0.

    gap> I:=QuadraticIdeal(OQ,23);;
    gap> N:=HAP_CongruenceSubgroupGamma0(I);;
    gap> Y:=GComplexToRegularCWComplex(KK,N);;
    gap> Y:=SimplifiedComplex(Y);;
    gap> Cohomology(Y,1);
    [ 0, 0, 0, 0, 0, 0, 0, 0, 0 ]
    gap> B:=IdentityMat(9);; # represents the 9 cohomology generators
    gap> C:=NullMat(9,9);;
    gap> cup:=CupProduct(Y);;
    gap> for i in [1..9] do
    > for j in [j+1..9] do
    > if not IsZero(cup(1,1,B[i],B[j])) then C[i][j]:=1; C[j,i]:=1; fi;
    > od;od;
    gap> Display(C);
    [ [  0,  0,  0,  0,  0,  1,  1,  0,  1 ],
      [  0,  0,  0,  0,  0,  0,  0,  0,  0 ],
      [  0,  0,  0,  0,  0,  0,  0,  0,  0 ],
      [  0,  0,  0,  0,  0,  0,  0,  0,  0 ],
      [  0,  0,  0,  0,  0,  0,  0,  0,  0 ],
      [  1,  0,  0,  0,  0,  0,  0,  0,  0 ],
      [  1,  0,  0,  0,  0,  0,  0,  0,  0 ],
      [  0,  0,  0,  0,  0,  0,  0,  0,  0 ],
      [  1,  0,  0,  0,  0,  0,  0,  0,  0 ] ]

THe following additional commands compute the 11-primary parts H^2(Γ_0(23), Z)_(11)= Z_11, H^n(Γ_0(23), Z)_(11)=0 for 2ne n>0. They then compute the cohomology ring A=H^∗(Γ_0(23), Z_11), a basis B of H^1(Γ_0(23), Z_11) =( Z_11)^10, and procuce a matrix C=(c_ij) with c_ij=0 if b_i∪ b_j=0, c_ij=1 if b_i∪ b_jne 0 for b_i,b_j∈ B.

    gap> Cohomology(Y,2);
    [ 2, 2, 2, 4, 4, 4, 4, 4, 44, 0, 0, 0, 0, 0, 0, 0, 0 ]
    gap> A:=CohomologyRing(Y,11);
    <algebra of dimension 20 over GF(11)>
    gap> B:=Basis(A);;
    gap> B:=Filtered(B,b->A!.degree(b)=1);;
    gap> C:=NullMat(Length(B),Length(B));;
    gap> for i in [1..Length(B)] do
    > for j in [1..Length(B)] do
    > if not IsZero(B[i]*B[j]) then C[i][j]:=1; fi;
    > od;od;
    gap> Display(C);
    [ [  0,  0,  0,  0,  0,  0,  0,  0,  0,  0 ],
      [  0,  0,  0,  0,  0,  0,  0,  1,  1,  1 ],
      [  0,  0,  0,  0,  0,  0,  0,  1,  1,  1 ],
      [  0,  0,  0,  0,  0,  1,  1,  1,  1,  1 ],
      [  0,  0,  0,  0,  0,  0,  0,  1,  1,  1 ],
      [  0,  0,  0,  1,  0,  0,  1,  1,  1,  1 ],
      [  0,  0,  0,  1,  0,  1,  0,  1,  1,  1 ],
      [  0,  1,  1,  1,  1,  1,  1,  0,  1,  1 ],
      [  0,  1,  1,  1,  1,  1,  1,  1,  0,  1 ],
      [  0,  1,  1,  1,  1,  1,  1,  1,  1,  0 ] ]

#### 14.7 Computing a free resolution for SL_2(mathcal O_-d)

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

    gap> K:=BianchiGcomplex(-43);;
    gap> R:=FreeGResolution(K,11);;
    gap> C:=TensorWithIntegers(R);;
    gap> List([0..10],n->Homology(C,n));
    [ [ 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 ] ]

    gap> K:=BianchiGcomplex(-10);;
    gap> R:=FreeGResolution(K,11);;
    gap> List([0..10],k->Homology(TensorWithIntegers(R),k));
    [ [ 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 ] ]

    gap> K:=BianchiGcomplex(-14);;
    gap> R:=FreeGResolution(K,11);;
    gap> List([0..10],k->Homology(TensorWithIntegers(R),k));
    [ [ 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 ] ]

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

    gap> K:=BianchiGcomplex(-43);;
    gap> List([1..K!.dimension(0)],k->Order(K!.stabilizer(0,k)));
    [ 24, 24, 6, 6, 4, 4, 12, 12 ]

    gap> K:=BianchiGcomplex(-10);;
    gap> List([1..K!.dimension(0)],k->Order(K!.stabilizer(0,k)));
    [ 6, 6, 4, 4, 6, infinity ]

    gap> K:=BianchiGcomplex(-14);;
    gap> List([1..K!.dimension(0)],k->Order(K!.stabilizer(0,k)));
    [ 6, 6, 2, 2, 2, infinity, infinity, 2, infinity, 6, 4 ]

#### 14.8 Some sanity checks

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.

##### 14.8-1 Equivariant Euler characteristic

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

One easy test to make in our computations is to check that the equivariant Euler characteristic of the 2-complex is indeed zero. The following commands perform this test for the group SL_2(mathcal O_-23).

    gap> K:=BianchiGcomplex(-23);;

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

##### 14.8-2 Boundary squares to zero

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 SL_2(mathcal O_-23).

    gap> K:=BianchiGcomplex(-23);;
    gap> R:=FreeGResolution(K,10);;
    gap> n:=2;;List([1..R!.dimension(n)],k->ResolutionBoundaryOfWord(R,n-1,R!.boundary(n,k)));
    [ [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ],
      [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ],
      [  ], [  ], [  ] ]
    gap> n:=3;;List([1..R!.dimension(n)],k->ResolutionBoundaryOfWord(R,n-1,R!.boundary(n,k)));
    [ [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ],
      [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ],
      [  ], [  ], [  ] ]
    gap> n:=4;;List([1..R!.dimension(n)],k->ResolutionBoundaryOfWord(R,n-1,R!.boundary(n,k)));
    [ [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ],
      [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ],
      [  ], [  ], [  ] ]
    gap> n:=5;;List([1..R!.dimension(n)],k->ResolutionBoundaryOfWord(R,n-1,R!.boundary(n,k)));
    [ [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ],
      [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ], [  ],
      [  ], [  ], [  ] ]

##### 14.8-3 Compare different algorithms or implementations

Sebastian Schoennenbeck in his thesis work computed some contractible 2-complexes on which Bianchi groups act with finite stabilizers (even when the ideal class is greater than 1) using a different approach to that of Swan. These computed complexes are stored in HAP 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 2-complexes that are also stored in HAP in cases where the ideal class is equal to 1.

The following commands test that Sebastian Schoennenbeck's 2-complex for SL_2(mathcal O_-23) yields the same integral homology as the above HAP implementation. Both computations use HAP's implementation of Wall's perturbation technique for computing the resolution from the 2-complex.

    gap> K:=ContractibleGcomplex("SL(2,O-23)");;
    gap> R:=FreeGResolution(K,10);;
    gap> List([0..9],n->Homology(TensorWithIntegers(R),n));
    [ [ 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 ] ]

    gap> K:=BianchiGcomplex(-23);;
    gap> R:=FreeGResolution(K,10);;
    gap> List([0..9],n->Homology(TensorWithIntegers(R),n));
    [ [ 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 ] ]

##### 14.8-4 Compare geometry to algebra

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 mathcal O_-d. The following commands check this for SL_2(mathcal O_-23) where mathcal O_-23 is known to have class number 3. (This class number is easily computed from a formula in Swan's paper.)

    gap> K:=BianchiGcomplex(-23);;
    gap> List([1..K!.dimension(0)],k->Order(K!.stabilizer(0,k)));
    [ 6, 2, 2, 4, infinity, infinity ]

A visualization of the fundamental domain tells us a certain amount about the algebra. In the case of SL_2(mathcal O_-23)

a fundamental domain for the action on C by the translation subgroup generated by the matrices $$ \left(\begin{array}{ll} 1 &1\\ 0 &1\end{array}\right), \left(\begin{array}{ll} 1 &\omega\\ 0 &1\end{array}\right) $$ ω = (1+sqrt-23)/2 is indicated by the white rectangle. From this we see that under the action of SL_2(mathcal O_-23) there are at most 11 orbits of 2-cells, the central decagon and ten quadrilaterals. However, the matrix $$ \left(\begin{array}{rr} 0 &-1\\ 1 &0\end{array}\right) $$ maps (z,0) to (-1/z,0) and fixes (0,1). 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 2-cells in the Bianchi 2-complex.

    gap> K:=BianchiGcomplex(-23);;
    gap> List([1..K!.dimension(2)],k->Length(K!.boundary(2,k)));
    [ 10, 4, 4, 4, 4, 4 ]

#### 14.9 Group presentations

Swan's reason for studying fundamental domains was to obtain explicit group presentations for SL_2(mathcal O_-d) for various values of d. The following commands obtain a presentation for SL_2(mathcal O_-23).

    gap> K:=BianchiGcomplex(-23);;
    gap> R:=FreeGResolution(K,2);;
    gap> P:=PresentationOfResolution(R);
    gap> G:=SimplifiedFpGroup(P!.freeGroup/P!.relators);
    <fp group on the generators [ k, r, s, w, x ]>
    gap> RelatorsOfFpGroup(G);
    [ 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 ]

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

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

##### 14.9-1 Swan's generators

The five generators in the above presentation for SL_2(mathcal O_-23) are obtained by constructing the low dimensions of a CW-classifying space, forming a maximal tree in its 1-skeleton, constructing a presentation whose generators correspond to edges not in the tree, and then applying Tietze operations to simplify this presentation. Swan's approach instead uses generators corresponding to the "face pairings" of the 3-dimensional fundamental domain. For dne 1, 3 the number of these face-pairing generators in SL_2(mathcal O_-d) is equal to 3 plus the number of orbits of 2-cells in the equivariant 2-complex K. The three extra generators are the two translations corresponding to the vertical faces of the 3-dimensional fundamental domain which get homotopied to edges in K, plus the element (beginarrayrr -1 & 00 & -1endarray) which acts trivially on frak H^3. For d=1,3 there is one further generator due to the existence of non-trivial units in mathcal O( Q(sqrt-1)) and mathcal O( Q(sqrt-3)).

The following commands show that for SL_2(mathcal O_-23) there are 6 orbits of 2-cells in K and then lists Swan's 9 generators.

    gap> K:=BianchiGcomplex(-23);;
    gap> K!.dimension(2);
    6
    gap> for g in GeneratorsOfGroup(K!.group) do
    > Print(g,"\n");
    > od;
    [ [ -1, 0 ], [ 0, -1 ] ]
    [ [ 1, 1 ], [ 0, 1 ] ]
    [ [ 1, 1/2 + 1/2 Sqrt(-23) ], [ 0, 1 ] ]
    [ [ -1, 0 ], [ 1, -1 ] ]
    [ [ 5 + 2 Sqrt(-23), -11 ], [ 3/2 + -1/2 Sqrt(-23), 3/2 + 1/2 Sqrt(-23) ] ]
    [ [ 208 + 25 Sqrt(-23), -225 + 25 Sqrt(-23) ], [ 3/2 + 1/2 Sqrt(-23), -3 ] ]
    [ [ 18 + 91 Sqrt(-23), -437 ], [ 5/2 + 1/2 Sqrt(-23), -5/2 + 1/2 Sqrt(-23) ] ]
    [ [ 1 + -6 Sqrt(-23), -29 ], [ 5/2 + -1/2 Sqrt(-23), -5/2 + -1/2 Sqrt(-23) ] ]
    [ [ 1 Sqrt(-23), -6 ], [ 4, 1 Sqrt(-23) ] ]

#### 14.10 Finite index subgroups

The following commands compute the integral homology of a congruence subgroup G of index 24 in SL_2(mathcal O_-23). They also compute a presentation for G with 13 generators and 24 relators.

    gap> OQ:=RingOfIntegers(QuadraticNumberField(-23));;
    gap> I:=QuadraticIdeal(OQ,[Sqrt(-23)]);
    ideal of norm 23 in O(Q(Sqrt(-23)))
    gap> G:=HAP_CongruenceSubgroupGamma0(I);
    <group of 2x2 matrices in characteristic 0>
    gap> IndexInSL2O(G);
    24

    gap> K:=BianchiGcomplex(-23);;
    gap> R:=FreeGResolution(K,11);;
    gap> R:=QuadraticToCyclotomicCoefficients(R);;
    gap> S:=ResolutionFiniteSubgroup(R,G);;
    gap> List([0..10],n->Homology(TensorWithIntegers(S),n));
    [ [ 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 ] ]

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

#### 14.11 Totally real quadratic fields / Hilbert modular group

For square free d>0 the group PSL_2(mathcal O_d) is a subgroup of PSL_2( R) but not a discrete subgroup. It embeds as a discrete subgroup of PSL_2( R)× PSL_2( R) but a fundamental domain for its action on frak h^2 × frak h^2 is not implemented in HAP. One can obtain a contractible GL_2(mathcal O_d)-equivariant complex using Sebastian Schoennenbeck's Magma implementation of Voronoi's algorithm to produce text files that can be read into HAP. A few of these text files are stored in HAP. The following commands use one such text file to compute integral homology groups of GL_2(mathcal O( Q(sqrt14))). In this example the contractible complex is 4-dimensional and has 33 orbits of 4-dimensional cells.

    gap> K:=ContractibleGcomplex("GL(2,O14)");
    Non-free resolution in characteristic 0 for matrix group .
    No contracting homotopy available.

    gap> List([0..5],K!.dimension);
    [ 144, 463, 532, 234, 33, 0 ]

    gap> R:=FreeGResolution(K,6);;
    gap> List([0..5],n->Homology(TensorWithIntegers(R),n));
    [ [ 0 ], [ 2, 2, 2, 0 ], [ 2, 2, 2, 2, 2, 2, 0, 0, 0, 0 ],
      [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 24, 24, 0, 0, 0, 0 ],
      [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 12, 24 ],
      [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4 ] ]

#### 14.12 Calling Magma's Voronoi algorithm directly

If

- the Magma computational algebra system can be started using the line command `magma` and

- Sebastian Schoennenbeck's Magma implementation of Voronoi's algorithm for imaginary quadratic number fields is copied to ~pkg/Voronoi/VMH-ImaginaryQuadraticNumberFields and

- Sebastian Schoennenbeck's Magma implementation of Voronoi's algorithm for totally real quadratic number fields is copied to ~pkg/Voronoi/VMH-TotallyRealNumberFields

then one can use the GAP commands `VoronoiGL(n,d)` and `VoronoiSL(n,d)` to call the Magma implementation of the Voronoi algorithm directly. For example, the following commands do this to calculate the homology groups H^4(GL_2(mathcal O_-5 ),P_{mathcal O_-5}(8)) = ( Z_2)^17 ⊕ ( Z_4)^2 ⊕ ( Z_8)^2 and H_4(GL_2(mathcal O( Q(sqrt5)), Z) = ( Z_2)^7 ⊕ Z_60 and H_n(GL_3(mathcal O_-5), Z) for n=1,2.

    gap> V:=VoronoiComplexSL(2,-5);; #makes a call to Magma
    gap> R:=FreeGResolution(V,5);;
    gap> M:=HomogeneousPolynomials(R!.group,8);;
    gap> C:=HomToIntegralModule(R,M);;
    gap> Cohomology(C,4);
    [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 8, 8 ]

    gap> V:=VoronoiComplexGL(2,5);; #makes a call to Magma
    gap> R:=FreeGResolution(V,5);;
    gap> Homology(TensorWithIntegers(R),4);
    [ 2, 2, 2, 2, 2, 2, 2, 60 ]

    gap> #V:=VoronoiComplexGL(3,-5);; #makes a call to Magma (requires much time)
    gap> V:=ContractibleGcomplex("SL(3,O-5)");; #loads stored data (is faster)
    gap> R:=FreeGResolution(V,4);;
    gap> Homology(TensorWithIntegers(R),1);
    [ 2 ]
    gap> Homology(TensorWithIntegers(R),2);
    [ 2, 2, 2, 4 ]

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

generated by GAPDoc2HTML