1+ # #########################################################################
2+ # #
3+ # # Methods for 3x3 congruence subgroups of SL3
4+
5+ # #########################################################################
6+ # #
7+ # # CosetPosFunction( <G> )
8+ # #
9+ # # Returns a function cosetPos(g) giving the position of the coset gG in
10+ # # the ambient group.
11+ InstallMethod(CosetPosFunction,
12+ " Returns cosetPos(g) function for the congruence subgroup G" ,
13+ [ IsIntegerMatrixGroup and IsHAPCongruenceSubgroupGamma0 ] ,
14+ function (G )
15+ local cosetPos, n, ProjPlane;
16+ if DimensionOfMatrixGroup(G) <> 3 then
17+ TryNextMethod ();
18+ fi ;
19+
20+ n := LevelOfCongruenceSubgroup(G);
21+
22+ ProjPlane := FiniteProjectivePlane(n);
23+
24+ cosetPos := function (g )
25+ local v, vv, U, u, w;
26+ v := [ g[ 1 ][ 1 ] , g[ 2 ][ 1 ] , g[ 3 ][ 1 ]] ;
27+ vv := List(v, x -> x mod n);
28+ U := Units(Integers mod n);
29+ for u in U do
30+ w := List(vv, x -> (Int(u)* x) mod n);
31+ if w in ProjPlane.Reps then
32+ return Position(ProjPlane.Reps,w);
33+ fi ;
34+ od ;
35+ end ;
36+
37+ return cosetPos;
38+ end );
39+ # #########################################################################
40+ # #
41+ # # CosetRepFunction( <G> )
42+ # #
43+ # # Returns a function cosetPos(g) giving a canonical rpresentative of the
44+ # # coset gG in the ambient group.
45+ InstallMethod(CosetRepFunction,
46+ " Returns cosetRep(g) function for the congruence subgroup G" ,
47+ [ IsIntegerMatrixGroup and IsHAPCongruenceSubgroupGamma0 ] ,
48+ function (G )
49+ local MatrixInSL3_Hermite, cosetOfInt, cosetRep, n, ProjPlane, cosetPos;
50+ if DimensionOfMatrixGroup(G) <> 3 then
51+ TryNextMethod ();
52+ fi ;
53+
54+ n := LevelOfCongruenceSubgroup(G);
55+
56+ MatrixInSL3_Hermite := function (v )
57+ local Herm;
58+ Herm := HermiteNormalFormIntegerMatTransform([[ v[ 1 ]] ,[ v[ 2 ]] ,[ v[ 3 ]]] );
59+ return Inverse(Herm!. rowtrans);
60+ end ;
61+
62+ ProjPlane := FiniteProjectivePlane(n);
63+
64+ cosetOfInt := function (i )
65+ local x,y,z;
66+ x := ProjPlane.Reps[ i][ 1 ] ;
67+ y := ProjPlane.Reps[ i][ 2 ] ;
68+ z := ProjPlane.Reps[ i][ 3 ] ;
69+
70+ return MatrixInSL3_Hermite([ x,y,z] );
71+ end ;
72+
73+ cosetPos := CosetPosFunction(G);
74+
75+ cosetRep := function (g );
76+ return cosetOfInt(cosetPos(g));
77+ end ;
78+
79+ return cosetRep;
80+ end );
0 commit comments