CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutSign UpSign In

Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.

| Download

GAP 4.8.9 installation with standard packages -- copy to your CoCalc project to get it

Views: 418346
1
2
2 Construction of congruence subgroups
3
4
The package Congruence provides functions to construct several types of
5
canonical congruence subgroups in SL_2(ℤ), and also intersections of a
6
finite number of such subgroups. They will return a matrix group in the
7
category IsCongruenceSubgroup, which is defined as a subcategory of
8
IsMatrixGroup, and which will have a distinguishing property determining
9
whether it is a congruence subgroup of one of the canonical types, or an
10
intersection of such congruence subgroups (if it can not be reduced to one
11
of the canonical congruence subgroups). To start to work with the package,
12
you need first to load it as follows:
13
14
 Example 
15

16
gap> LoadPackage("congruence");
17
-----------------------------------------------------------------------------
18
Loading Congruence 1.1.0 (Congruence subgroups of SL(2,Integers))
19
by Ann Dooms (http://homepages.vub.ac.be/~andooms),
20
 Eric Jespers (http://homepages.vub.ac.be/~efjesper),
21
 Alexander Konovalov (http://www.cs.st-andrews.ac.uk/~alexk/), and
22
 Helena Verrill (http://www.math.lsu.edu/~verrill).
23
-----------------------------------------------------------------------------
24
true
25

26

27
28
29
2.1 Construction of congruence subgroups
30
31
2.1-1 PrincipalCongruenceSubgroup
32
33
PrincipalCongruenceSubgroup( N )  operation
34
35
Returns the principal congruence subgroup Γ(N) of level N in SL_2(ℤ).
36
37
This subgroup consists of all matrices of the form
38
39
[1+N*a N*b]
40
[ N*c 1+N*d]
41
42
where a,b,c,d are integers. The returned group will have the property
43
IsPrincipalCongruenceSubgroup (2.2-1).
44
45
 Example 
46

47
gap> G_8:=PrincipalCongruenceSubgroup(8);
48
<principal congruence subgroup of level 8 in SL_2(Z)>
49
gap> IsGroup(G_8);
50
true
51
gap> IsMatrixGroup(G_8);
52
true
53
gap> DimensionOfMatrixGroup(G_8);
54
2
55
gap> MultiplicativeNeutralElement(G_8);
56
[ [ 1, 0 ], [ 0, 1 ] ]
57
gap> One(G);
58
[ [ 1, 0 ], [ 0, 1 ] ]
59
gap> [[1,2],[3,4]] in G_8;
60
false
61
gap> [[1,8],[8,65]] in G_8;
62
true
63
gap> SL_2:=SL(2,Integers);
64
SL(2,Integers)
65
gap> IsSubgroup(SL_2,G_8);
66
true
67

68

69
70
2.1-2 CongruenceSubgroupGamma0
71
72
CongruenceSubgroupGamma0( N )  operation
73
74
Returns the congruence subgroup Γ_0(N) of level N in SL_2(ℤ).
75
76
This subgroup consists of all matrices of the form
77
78
[a b]
79
[N*c d]
80
81
where a,b,c,d are integers. The returned group will have the property
82
IsCongruenceSubgroupGamma0 (2.2-2).
83
84
 Example 
85

86
gap> G0_4:=CongruenceSubgroupGamma0(4);
87
<congruence subgroup CongruenceSubgroupGamma_0(4) in SL_2(Z)>
88

89

90
91
2.1-3 CongruenceSubgroupGammaUpper0
92
93
CongruenceSubgroupGammaUpper0( N )  operation
94
95
Returns the congruence subgroup Γ^0(N) of level N in SL_2(ℤ).
96
97
This subgroup consists of all matrices of the form
98
99
[a N*b]
100
[c d]
101
102
where a,b,c,d are integers. The returned group will have the property
103
IsCongruenceSubgroupGammaUpper0 (2.2-3).
104
105
 Example 
106

107
gap> GU0_2:=CongruenceSubgroupGammaUpper0(2);
108
<congruence subgroup CongruenceSubgroupGamma^0(2) in SL_2(Z)>
109

110

111
112
2.1-4 CongruenceSubgroupGamma1
113
114
CongruenceSubgroupGamma1( N )  operation
115
116
Returns the congruence subgroup Γ_1(N) of level N in SL_2(ℤ).
117
118
This subgroup consists of all matrices of the form
119
120
[1+N*a b]
121
[ N*c 1+N*d]
122
123
where a,b,c,d are integers. The returned group will have the property
124
IsCongruenceSubgroupGamma1 (2.2-4).
125
126
 Example 
127

128
gap> G1_6:=CongruenceSubgroupGamma1(6);
129
<congruence subgroup CongruenceSubgroupGamma_1(6) in SL_2(Z)>
130

131

132
133
2.1-5 CongruenceSubgroupGammaUpper1
134
135
CongruenceSubgroupGammaUpper1( N )  operation
136
137
Returns the congruence subgroup Γ^1(N) of level N in SL_2(ℤ).
138
139
This subgroup consists of all matrices of the form
140
141
[1+N*a N*b]
142
[ c 1+N*d]
143
144
where a,b,c,d are integers. The returned group will have the property
145
IsCongruenceSubgroupGammaUpper1 (2.2-5).
146
147
 Example 
148

149
gap> GU1_4:=CongruenceSubgroupGammaUpper1(4);
150
<congruence subgroup CongruenceSubgroupGamma^1(4) in SL_2(Z)>
151

152

153
154
2.1-6 IntersectionOfCongruenceSubgroups
155
156
IntersectionOfCongruenceSubgroups( G1, G2, ..., GN )  function
157
Intersection( G1, G2, ..., GN )  function
158
159
Returns the intersection of its arguments, which can be congruence subgroups
160
or their intersections, constructed with the same function. It is not
161
necessary for the user to use IntersectionOfCongruenceSubgroups, since it
162
will be called automatically from Intersection.
163
164
The returned group will have the property
165
IsIntersectionOfCongruenceSubgroups (2.2-6).
166
167
The list of congruence subgroups that form the intersection can be obtained
168
using DefiningCongruenceSubgroups (2.3-3). Note, that when the intersection
169
appears to be one of the canonical congruence subgroups, the package will
170
recognize this and will return a canonical subgroup of the appropriate type.
171
172
 Example 
173

174
gap> I:=IntersectionOfCongruenceSubgroups(G0_4,GU1_4);
175
<principal congruence subgroup of level 4 in SL_2(Z)>
176
gap> J:=IntersectionOfCongruenceSubgroups(G0_4,G1_6);
177
<intersection of congruence subgroups of resulting level 12 in SL_2(Z)>
178

179

180
181
182
2.2 Properties of congruence subgroups
183
184
A congruence subgroup constructed by one of the five above listed functions
185
will have certain properties determining its type. These properties will be
186
used for method selection by Congruence algorithms. Note that they do not
187
provide an actual test whether a certain matrix group is a congruence
188
subgroup or not.
189
190
2.2-1 IsPrincipalCongruenceSubgroup
191
192
IsPrincipalCongruenceSubgroup( G )  property
193
194
For a congruence subgroup G in the category IsCongruenceSubgroup, returns
195
true if G was constructed by PrincipalCongruenceSubgroup (2.1-1) (or reduced
196
to one as a result of an intersection) and returns false otherwise.
197
198
 Example 
199

200
gap> IsPrincipalCongruenceSubgroup(G_8);
201
true
202
gap> IsPrincipalCongruenceSubgroup(G0_4);
203
false
204
gap> IsPrincipalCongruenceSubgroup(I);
205
true
206

207

208
209
2.2-2 IsCongruenceSubgroupGamma0
210
211
IsCongruenceSubgroupGamma0( G )  property
212
213
For a congruence subgroup G in the category IsCongruenceSubgroup, returns
214
true if G was constructed by CongruenceSubgroupGamma0 (2.1-2) (or reduced to
215
one as a result of an intersection) and returns false otherwise.
216
217
2.2-3 IsCongruenceSubgroupGammaUpper0
218
219
IsCongruenceSubgroupGammaUpper0( G )  property
220
221
For a congruence subgroup G in the category IsCongruenceSubgroup, returns
222
true if G was constructed by CongruenceSubgroupGammaUpper0 (2.1-3) (or
223
reduced to one as a result of an intersection) and returns false otherwise.
224
225
2.2-4 IsCongruenceSubgroupGamma1
226
227
IsCongruenceSubgroupGamma1( G )  property
228
229
For a congruence subgroup G in the category IsCongruenceSubgroup, returns
230
true if G was constructed by CongruenceSubgroupGamma1 (2.1-4) (or reduced to
231
one as a result of an intersection) and returns false otherwise.
232
233
2.2-5 IsCongruenceSubgroupGammaUpper1
234
235
IsCongruenceSubgroupGammaUpper1( G )  property
236
237
For a congruence subgroup G in the category IsCongruenceSubgroup, returns
238
true if G was constructed by CongruenceSubgroupGammaUpper1 (2.1-5) (or
239
reduced to one as a result of an intersection) and returns false otherwise.
240
241
2.2-6 IsIntersectionOfCongruenceSubgroups
242
243
IsIntersectionOfCongruenceSubgroups( G )  property
244
245
For a congruence subgroup G in the category IsCongruenceSubgroup, returns
246
true if G was constructed by IntersectionOfCongruenceSubgroups (2.1-6) and
247
without being one of the canonical congruence subgroups, otherwise it
248
returns false.
249
250
 Example 
251

252
gap> IsIntersectionOfCongruenceSubgroups(I);
253
false
254
gap> IsIntersectionOfCongruenceSubgroups(J);
255
true
256

257

258
259
260
2.3 Attributes of congruence subgroups
261
262
The next three attributes store key properties of congruence subgroups.
263
264
2.3-1 LevelOfCongruenceSubgroup
265
266
LevelOfCongruenceSubgroup( G )  attribute
267
268
Stores the level of the congruence subgroup G. The (arithmetic) level of a
269
congruence subgroup G is the smallest positive number N such that G contains
270
the principal congruence subgroup of level N.
271
272
 Example 
273

274
gap> LevelOfCongruenceSubgroup(G_8);
275
8
276
gap> LevelOfCongruenceSubgroup(G1_6);
277
6
278
gap> LevelOfCongruenceSubgroup(I);
279
4
280
gap> LevelOfCongruenceSubgroup(J);
281
12
282

283

284
285
2.3-2 IndexInSL2Z
286
287
IndexInSL2Z( G )  attribute
288
289
Stores the index of the congruence subgroup G in SL_2(ℤ).
290
291
 Example 
292

293
gap> IndexInSL2Z(G_8);
294
384
295
gap> G_2:=PrincipalCongruenceSubgroup(2);
296
<principal congruence subgroup of level 2 in SL_2(Z)>
297
gap> IndexInSL2Z(G_2);
298
12
299
gap> IndexInSL2Z(GU1_4);
300
12
301

302

303
304
2.3-3 DefiningCongruenceSubgroups
305
306
DefiningCongruenceSubgroups( G )  attribute
307
Returns: list of congruence subgroups
308
309
For an intersection of congruence subgroups, returns the list of congruence
310
subgroups forming this intersection. For a canonical congruence subgroup
311
returns a list of length one containing that subgroup.
312
313
 Example 
314

315
gap> DefiningCongruenceSubgroups(J);
316
[ <congruence subgroup CongruenceSubgroupGamma_0(4) in SL_2(Z)>,
317
 <congruence subgroup CongruenceSubgroupGamma_1(6) in SL_2(Z)> ]
318
gap> P:=PrincipalCongruenceSubgroup(6);
319
<principal congruence subgroup of level 6 in SL_2(Z)>
320
gap> Q:=PrincipalCongruenceSubgroup(10); 
321
<principal congruence subgroup of level 10 in SL_2(Z)>
322
gap> G:=IntersectionOfCongruenceSubgroups(Q,P); 
323
<principal congruence subgroup of level 30 in SL_2(Z)>
324
gap> DefiningCongruenceSubgroups(G);
325
[ <principal congruence subgroup of level 30 in SL_2(Z)> ] 
326

327

328
329
330
2.4 Operations for congruence subgroups
331
332
Congruence installs several special methods for operations already available
333
in GAP.
334
335
2.4-1 Random
336
337
Random( G )  operation
338
Random( G, m )  operation
339
340
For a congruence subgroup G in the category IsCongruenceSubgroup, returns
341
random element. In the two-argument form, the second parameter will control
342
the absolute value of randomly selected entries of the matrix.
343
344
 Example 
345

346
gap> Random(G_2) in G_2;
347
true
348
gap> Random(G_8,2) in G_8;
349
true
350

351

352
353
2.4-2 \in
354
355
\in( m, G )  operation
356
357
It is easy to implement the membership test for congruence subgroups and
358
their intersections.
359
360
 Example 
361

362
gap> \in([ [ 21, 10 ], [ 2, 1 ] ],G_2);
363
true
364
gap> \in([ [ 21, 10 ], [ 2, 1 ] ],G_8);
365
false
366

367

368
369
2.4-3 CanEasilyCompareCongruenceSubgroups
370
371
CanEasilyCompareCongruenceSubgroups( G, H )  operation
372
373
For congruence subgroups G,H in the category IsCongruenceSubgroup, returns
374
true if G and H are of the same type listed in PrincipalCongruenceSubgroup
375
(2.1-1) --> CongruenceSubgroupGammaUpper1 (2.1-5) and have the same
376
LevelOfCongruenceSubgroup (2.3-1) or if G and H are of the type
377
IntersectionOfCongruenceSubgroups (2.1-6) and the groups from
378
DefiningCongruenceSubgroups (2.3-3) are in one to one correspondence,
379
otherwise it returns false.
380
381
 Example 
382

383
gap> CanEasilyCompareCongruenceSubgroups(G_8,I);
384
false
385

386

387
388
2.4-4 IsSubset
389
390
IsSubset( G, H )  operation
391
392
Congruence provides methods for IsSubset for congruence subgroups. IsSubset
393
returns true if H is a subset of G. These methods make it possible to use
394
IsSubgroup operation for congruence subgroups.
395
396
 Example 
397

398
gap> IsSubset(G_2,G_8);
399
true
400
gap> IsSubset(G_8,G_2);
401
false
402
gap> f:=[PrincipalCongruenceSubgroup,CongruenceSubgroupGamma1,CongruenceSubgroupGammaUpper1,CongruenceSubgroupGamma0,CongruenceSubgroupGammaUpper0];;
403
gap> g1:=List(f, t -> t(2));;
404
gap> g2:=List(f, t -> t(4));;
405
gap> for g in g2 do
406
> Print( List( g1, x -> IsSubgroup(x,g) ), "\n");
407
> od;
408
[ true, true, true, true, true ]
409
[ false, true, false, true, false ]
410
[ false, false, true, false, true ]
411
[ false, false, false, true, false ]
412
[ false, false, false, false, true ]
413

414

415
416
2.4-5 Index
417
418
Index( G, H )  operation
419
420
If a congruence subgroup H is a subgroup of a congruence subgroup G, we can
421
easily compute the index of H in G, since we know the index of both
422
subgroups in SL_2(ℤ).
423
424
 Example 
425

426
gap> Index(G_2,G_8);
427
32
428

429

430
431
432