[CLLT93] Chan, S.-P., Lang, M.-L., Lim, C.-H. and Tan, S. P., Special polygons for subgroups of the modular group and applications, Internat. J. Math., 4 (1) (1993), 11--34.
[Kul91] Kulkarni, R. S., An arithmetic-geometric method in the study of the subgroups of the modular group, Amer. J. Math., 113 (6) (1991), 1053--1133.
[LLT95a] Lang, M.-L., Lim, C.-H. and Tan, S. P., An algorithm for determining if a subgroup of the modular group is congruence, J. London Math. Soc. (2), 51 (3) (1995), 491--502.
[LLT95b] Lang, M.-L., Lim, C.-H. and Tan, S. P., Independent generators for congruence subgroups of Hecke groups, Math. Z., 220 (4) (1995), 569--594.
generated by GAPDoc2HTML
congruence-1.2.6/doc/chap0_mj.html 000644 000766 000024 00000035072 14577601110 016775 0 ustar 00obk1 staff 000000 000000Version 1.2.6
23 March 2024
Ann Dooms
Email: andooms@vub.ac.be
Homepage: http://homepages.vub.ac.be/~andooms
Address:
Department of Mathematics, Vrije Universiteit Brussel
Pleinlaan 2, Brussels, B-1050 Belgium
Eric Jespers
Email: efjesper@vub.ac.be
Homepage: http://homepages.vub.ac.be/~efjesper
Address:
Department of Mathematics, Vrije Universiteit Brussel
Pleinlaan 2, Brussels, B-1050 Belgium
Olexandr Konovalov
Email: obk1@st-andrews.ac.uk
Homepage: https://olexandr-konovalov.github.io/
Address:
School of Computer Science
University of St Andrews
Jack Cole Building, North Haugh,
St Andrews, Fife, KY16 9SX, Scotland
Helena Verrill
Email: verrill@math.lsu.edu
Homepage: http://www.math.lsu.edu/~verrill/
Address:
Department of Mathematics
Louisiana State University
Baton Rouge, Louisiana, 70803-4918
USA
The GAP package Congruence provides functionality to work with congruence subgroups of \(SL_2(ℤ)\).
© 2006-2024 by Ann Dooms, Eric Jespers, Olexandr Konovalov and Helena Verrill.
Congruence is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. For details, see the FSF's own site https://www.gnu.org/licenses/gpl.html.
If you obtained Congruence, we would be grateful for a short notification sent to one of the authors.
If you publish a result which was partially obtained with the usage of Congruence, please cite it in the following form:
A. Dooms, E. Jespers, O. Konovalov and H. Verrill. Congruence --- Congruence subgroups of \(SL_2(ℤ)\), Version 1.2.6; 2024 (https://gap-packages.github.io/congruence/).
We are very grateful to Mong-Lung Lang, Chong-Hai Lim and Ser Peow Tan for their comments provided while implementing algorithms from [LLT95a] and [LLT95b], and to Francqui Stichting (Belgium) for the support of the third author.
generated by GAPDoc2HTML
congruence-1.2.6/doc/chap2.html 000644 000766 000024 00000100425 14577601110 016304 0 ustar 00obk1 staff 000000 000000The package Congruence provides functions to construct several types of canonical congruence subgroups in SL_2(ℤ), and also intersections of a finite number of such subgroups. They will return a matrix group in the category IsCongruenceSubgroup
, which is defined as a subcategory of IsMatrixGroup
, and which will have a distinguishing property determining whether it is a congruence subgroup of one of the canonical types, or an intersection of such congruence subgroups (if it can not be reduced to one of the canonical congruence subgroups). To start to work with the package, you need first to load it as follows:
gap> LoadPackage("congruence"); ----------------------------------------------------------------------------- Loading Congruence 1.2.6 (Congruence subgroups of SL(2,Integers)) by Ann Dooms (http://homepages.vub.ac.be/~andooms), Eric Jespers (http://homepages.vub.ac.be/~efjesper), Olexandr Konovalov (https://olexandr-konovalov.github.io/), and Helena Verrill (http://www.math.lsu.edu/~verrill). maintained by: Ann Dooms (http://homepages.vub.ac.be/~andooms), Olexandr Konovalov (https://olexandr-konovalov.github.io/), and Helena Verrill (http://www.math.lsu.edu/~verrill). Homepage: https://gap-packages.github.io/congruence Report issues at https://github.com/gap-packages/congruence/issues ----------------------------------------------------------------------------- true
‣ PrincipalCongruenceSubgroup ( N ) | ( operation ) |
Returns the principal congruence subgroup Γ(N) of level N in SL_2(ℤ).
This subgroup consists of all matrices of the form
[1+N*a N*b] [ N*c 1+N*d]
where a,b,c,d are integers. The returned group will have the property IsPrincipalCongruenceSubgroup
(2.2-1).
gap> G_8:=PrincipalCongruenceSubgroup(8); <principal congruence subgroup of level 8 in SL_2(Z)> gap> IsGroup(G_8); true gap> IsMatrixGroup(G_8); true gap> DimensionOfMatrixGroup(G_8); 2 gap> MultiplicativeNeutralElement(G_8); [ [ 1, 0 ], [ 0, 1 ] ] gap> One(G); [ [ 1, 0 ], [ 0, 1 ] ] gap> [[1,2],[3,4]] in G_8; false gap> [[1,8],[8,65]] in G_8; true gap> SL_2:=SL(2,Integers); SL(2,Integers) gap> IsSubgroup(SL_2,G_8); true
‣ CongruenceSubgroupGamma0 ( N ) | ( operation ) |
Returns the congruence subgroup Γ_0(N) of level N in SL_2(ℤ).
This subgroup consists of all matrices of the form
[a b] [N*c d]
where a,b,c,d are integers. The returned group will have the property IsCongruenceSubgroupGamma0
(2.2-2).
gap> G0_4:=CongruenceSubgroupGamma0(4); <congruence subgroup CongruenceSubgroupGamma_0(4) in SL_2(Z)>
‣ CongruenceSubgroupGammaUpper0 ( N ) | ( operation ) |
Returns the congruence subgroup Γ^0(N) of level N in SL_2(ℤ).
This subgroup consists of all matrices of the form
[a N*b] [c d]
where a,b,c,d are integers. The returned group will have the property IsCongruenceSubgroupGammaUpper0
(2.2-3).
gap> GU0_2:=CongruenceSubgroupGammaUpper0(2); <congruence subgroup CongruenceSubgroupGamma^0(2) in SL_2(Z)>
‣ CongruenceSubgroupGamma1 ( N ) | ( operation ) |
Returns the congruence subgroup Γ_1(N) of level N in SL_2(ℤ).
This subgroup consists of all matrices of the form
[1+N*a b] [ N*c 1+N*d]
where a,b,c,d are integers. The returned group will have the property IsCongruenceSubgroupGamma1
(2.2-4).
gap> G1_6:=CongruenceSubgroupGamma1(6); <congruence subgroup CongruenceSubgroupGamma_1(6) in SL_2(Z)>
‣ CongruenceSubgroupGammaUpper1 ( N ) | ( operation ) |
Returns the congruence subgroup Γ^1(N) of level N in SL_2(ℤ).
This subgroup consists of all matrices of the form
[1+N*a N*b] [ c 1+N*d]
where a,b,c,d are integers. The returned group will have the property IsCongruenceSubgroupGammaUpper1
(2.2-5).
gap> GU1_4:=CongruenceSubgroupGammaUpper1(4); <congruence subgroup CongruenceSubgroupGamma^1(4) in SL_2(Z)>
‣ IntersectionOfCongruenceSubgroups ( G1, G2, ..., GN ) | ( function ) |
‣ Intersection ( G1, G2, ..., GN ) | ( function ) |
Returns the intersection of its arguments, which can be congruence subgroups or their intersections, constructed with the same function. It is not necessary for the user to use IntersectionOfCongruenceSubgroups
, since it will be called automatically from Intersection
.
The returned group will have the property IsIntersectionOfCongruenceSubgroups
(2.2-6).
The list of congruence subgroups that form the intersection can be obtained using DefiningCongruenceSubgroups
(2.3-3). Note, that when the intersection appears to be one of the canonical congruence subgroups, the package will recognize this and will return a canonical subgroup of the appropriate type.
gap> I:=IntersectionOfCongruenceSubgroups(G0_4,GU1_4); <principal congruence subgroup of level 4 in SL_2(Z)> gap> J:=IntersectionOfCongruenceSubgroups(G0_4,G1_6); <intersection of congruence subgroups of resulting level 12 in SL_2(Z)>
A congruence subgroup constructed by one of the five above listed functions will have certain properties determining its type. These properties will be used for method selection by Congruence algorithms. Note that they do not provide an actual test whether a certain matrix group is a congruence subgroup or not.
‣ IsPrincipalCongruenceSubgroup ( G ) | ( property ) |
For a congruence subgroup G in the category IsCongruenceSubgroup
, returns true
if G was constructed by PrincipalCongruenceSubgroup
(2.1-1) (or reduced to one as a result of an intersection) and returns false
otherwise.
gap> IsPrincipalCongruenceSubgroup(G_8); true gap> IsPrincipalCongruenceSubgroup(G0_4); false gap> IsPrincipalCongruenceSubgroup(I); true
‣ IsCongruenceSubgroupGamma0 ( G ) | ( property ) |
For a congruence subgroup G in the category IsCongruenceSubgroup
, returns true
if G was constructed by CongruenceSubgroupGamma0
(2.1-2) (or reduced to one as a result of an intersection) and returns false
otherwise.
‣ IsCongruenceSubgroupGammaUpper0 ( G ) | ( property ) |
For a congruence subgroup G in the category IsCongruenceSubgroup
, returns true
if G was constructed by CongruenceSubgroupGammaUpper0
(2.1-3) (or reduced to one as a result of an intersection) and returns false
otherwise.
‣ IsCongruenceSubgroupGamma1 ( G ) | ( property ) |
For a congruence subgroup G in the category IsCongruenceSubgroup
, returns true
if G was constructed by CongruenceSubgroupGamma1
(2.1-4) (or reduced to one as a result of an intersection) and returns false
otherwise.
‣ IsCongruenceSubgroupGammaUpper1 ( G ) | ( property ) |
For a congruence subgroup G in the category IsCongruenceSubgroup
, returns true
if G was constructed by CongruenceSubgroupGammaUpper1
(2.1-5) (or reduced to one as a result of an intersection) and returns false
otherwise.
‣ IsIntersectionOfCongruenceSubgroups ( G ) | ( property ) |
For a congruence subgroup G in the category IsCongruenceSubgroup
, returns true
if G was constructed by IntersectionOfCongruenceSubgroups
(2.1-6) and without being one of the canonical congruence subgroups, otherwise it returns false
.
gap> IsIntersectionOfCongruenceSubgroups(I); false gap> IsIntersectionOfCongruenceSubgroups(J); true
The next three attributes store key properties of congruence subgroups.
‣ LevelOfCongruenceSubgroup ( G ) | ( attribute ) |
Stores the level of the congruence subgroup G. The (arithmetic) level of a congruence subgroup G is the smallest positive number N such that G contains the principal congruence subgroup of level N.
gap> LevelOfCongruenceSubgroup(G_8); 8 gap> LevelOfCongruenceSubgroup(G1_6); 6 gap> LevelOfCongruenceSubgroup(I); 4 gap> LevelOfCongruenceSubgroup(J); 12
‣ IndexInSL2Z ( G ) | ( attribute ) |
Stores the index of the congruence subgroup G in SL_2(ℤ).
gap> IndexInSL2Z(G_8); 384 gap> G_2:=PrincipalCongruenceSubgroup(2); <principal congruence subgroup of level 2 in SL_2(Z)> gap> IndexInSL2Z(G_2); 12 gap> IndexInSL2Z(GU1_4); 12
‣ DefiningCongruenceSubgroups ( G ) | ( attribute ) |
Returns: list of congruence subgroups
For an intersection of congruence subgroups, returns the list of congruence subgroups forming this intersection. For a canonical congruence subgroup returns a list of length one containing that subgroup.
gap> DefiningCongruenceSubgroups(J); [ <congruence subgroup CongruenceSubgroupGamma_0(4) in SL_2(Z)>, <congruence subgroup CongruenceSubgroupGamma_1(6) in SL_2(Z)> ] gap> P:=PrincipalCongruenceSubgroup(6); <principal congruence subgroup of level 6 in SL_2(Z)> gap> Q:=PrincipalCongruenceSubgroup(10); <principal congruence subgroup of level 10 in SL_2(Z)> gap> G:=IntersectionOfCongruenceSubgroups(Q,P); <principal congruence subgroup of level 30 in SL_2(Z)> gap> DefiningCongruenceSubgroups(G); [ <principal congruence subgroup of level 30 in SL_2(Z)> ]
Congruence installs several special methods for operations already available in GAP.
‣ Random ( G ) | ( operation ) |
‣ Random ( G, m ) | ( operation ) |
For a congruence subgroup G in the category IsCongruenceSubgroup
, returns random element. In the two-argument form, the second parameter will control the absolute value of randomly selected entries of the matrix.
gap> Random(G_2) in G_2; true gap> Random(G_8,2) in G_8; true
2.4-2 \in
‣ \in ( m, G ) | ( operation ) |
It is easy to implement the membership test for congruence subgroups and their intersections.
gap> \in([ [ 21, 10 ], [ 2, 1 ] ],G_2); true gap> \in([ [ 21, 10 ], [ 2, 1 ] ],G_8); false
‣ CanEasilyCompareCongruenceSubgroups ( G, H ) | ( operation ) |
For congruence subgroups G,H in the category IsCongruenceSubgroup
, returns true
if G and H are of the same type listed in PrincipalCongruenceSubgroup
(2.1-1) --> CongruenceSubgroupGammaUpper1
(2.1-5) and have the same LevelOfCongruenceSubgroup
(2.3-1) or if G and H are of the type IntersectionOfCongruenceSubgroups
(2.1-6) and the groups from DefiningCongruenceSubgroups
(2.3-3) are in one to one correspondence, otherwise it returns false
.
gap> CanEasilyCompareCongruenceSubgroups(G_8,I); false
‣ IsSubset ( G, H ) | ( operation ) |
Congruence provides methods for IsSubset
for congruence subgroups. IsSubset
returns true
if H is a subset of G. These methods make it possible to use IsSubgroup
operation for congruence subgroups.
gap> IsSubset(G_2,G_8); true gap> IsSubset(G_8,G_2); false gap> f:=[PrincipalCongruenceSubgroup,CongruenceSubgroupGamma1,CongruenceSubgroupGammaUpper1,CongruenceSubgroupGamma0,CongruenceSubgroupGammaUpper0];; gap> g1:=List(f, t -> t(2));; gap> g2:=List(f, t -> t(4));; gap> for g in g2 do > Print( List( g1, x -> IsSubgroup(x,g) ), "\n"); > od; [ true, true, true, true, true ] [ false, true, false, true, false ] [ false, false, true, false, true ] [ false, false, false, true, false ] [ false, false, false, false, true ]
‣ Index ( G, H ) | ( operation ) |
If a congruence subgroup H is a subgroup of a congruence subgroup G, we can easily compute the index of H in G, since we know the index of both subgroups in SL_2(ℤ).
gap> Index(G_2,G_8); 32
generated by GAPDoc2HTML
congruence-1.2.6/doc/chap3.html 000644 000766 000024 00000024310 14577601110 016303 0 ustar 00obk1 staff 000000 000000A Farey symbol is a compact and useful way to represent a subgroup of finite index in SL_2(ℤ) from which one can deduce independent generators for this subgroup. It consists of two components, namely a so-called generalised Farey sequence (gfs) and an ordered list of labels, giving additional structure to the gfs.
A generalised Farey sequence (g.F.S.) is an ordered list of the form -infinity, x_0, x_1, ... , x_n, infinity, where
1. the x_i = a_i/b_i are rational numbers in reduced form arranged in increasing order for i = 0, ... , n;
2. x_0, ... , x_n ∈ Z, and some x_i = 0;
3. we define x_-1=-infinity=-1/0 and x_n+1=infinity=1/0;
4. a_i+1b_i-a_ib_i+1=1 for i=-1, ... ,n.
The ordered list of labels of a Farey symbol gives an additional structure to the gfs. The labels correspond to each consecutive pair of x_i's and are of the following types:
1. even,
2. odd,
3. a natural number, which occurs in the list of labels exactly twice or not at all.
Note that the actual values of numerical labels are not important; it is the pairing of two intervals that matters.
The package Congruence provides functions to construct Farey symbols by the given generalised Farey sequence and corresponding list of labels. The returned Farey symbol will belong to the category IsFareySymbol
and will have the representation IsFareySymbolDefaultRep
.
‣ FareySymbolByData ( gfs, labels ) | ( function ) |
This constructor creates the Farey symbol with the given generalized Farey sequence and list of labels. It also checks conditions from the definition of Farey symbol and returns an error if they are not satisfied. The data used to create the Farey symbol are stored as its attributes GeneralizedFareySequence
(3.2-1) and LabelsOfFareySymbol
(3.2-4).
gap> fs:=FareySymbolByData([infinity,0,1,2,infinity],[1,2,2,1]); [ infinity, 0, 1, 2, infinity ] [ 1, 2, 2, 1 ]
‣ IsValidFareySymbol ( fs ) | ( function ) |
This function is used in FareySymbolByData
(3.1-1) to validate its output.
gap> IsValidFareySymbol(fs); true
‣ GeneralizedFareySequence ( fs ) | ( attribute ) |
Returns the generalized Farey sequence gfs of the Farey symbol.
gap> GeneralizedFareySequence(fs); [ infinity, 0, 1, 2, infinity ]
‣ NumeratorOfGFSElement ( gfs, i ) | ( function ) |
Returns: integer
Returns the numerator of the i-th term of the generalised Farey sequence gfs: for the 1st infinite entry returns -1, for the last one returns 1, for all other entries returns the usual numerator.
gap> List([1..5], i -> NumeratorOfGFSElement(GeneralizedFareySequence(fs),i)); [ -1, 0, 1, 2, 1 ]
‣ DenominatorOfGFSElement ( gfs, i ) | ( function ) |
Returns: integer
Returns the denominator of the i-th term of the generalised Farey sequence gfs: for both infinite entries returns 0, for the other ones returns the usual denominator.
gap> List([1..5], i -> DenominatorOfGFSElement(GeneralizedFareySequence(fs),i)); [ 0, 1, 1, 1, 0 ]
‣ LabelsOfFareySymbol ( fs ) | ( attribute ) |
Returns the list of labels of the Farey symbol. This list has "odd", "even" and paired integers as entries.
gap> LabelsOfFareySymbol(fs); [ 1, 2, 2, 1 ]
generated by GAPDoc2HTML
congruence-1.2.6/doc/chap1_mj.html 000644 000766 000024 00000012567 14577601110 017002 0 ustar 00obk1 staff 000000 000000The GAP package Congruence provides functions to construct several types of canonical congruence subgroups in \(SL_2(ℤ)\), and also intersections of a finite number of such subgroups.
Furthermore, it implements the algorithm for generating Farey symbols for congruence subgroups and using them to produce a system of independent generators for these subgroups.
Using the package, one can also determine indices of congruence subgroups and their intersections in \(SL_2(ℤ)\) and in other congruence subgroups, generate their random elements and check element memberships. Success of other group theoretical constructions mostly depends on whether they could be expressed in terms of group generators or not.
For the theoretical backround, we refer to [LLT95b], [LLT95a], [CLLT93] and [Kul91].
Congruence is distributed in standard formats (tar.gz
, tar.bz2
, -win.zip
) and can be obtained from https://gap-packages.github.io/congruence/.
Congruence does not use external binaries and, therefore, works without restrictions on the operating system. It requires at least version GAPÂ 4.5, and no compatibility with previous releases of GAPÂ 4 is guaranteed.
Installation of the package is standard and follows the guidelines from the GAP manual (see Reference: Installing a GAP Package. After the package is installed, you can start GAP and load the Congruence package using the command:
gap> LoadPackage("congruence");
generated by GAPDoc2HTML
congruence-1.2.6/doc/manual.js 000644 000766 000024 00000010113 14577601110 016226 0 ustar 00obk1 staff 000000 000000 /* manual.js Frank Lübeck */ /* This file contains a few javascript functions which allow to switch between display styles for GAPDoc HTML manuals. If javascript is switched off in a browser or this file in not available in a manual directory, this is no problem. Users just cannot switch between several styles and don't see the corresponding button. A style with name mystyle can be added by providing two files (or only one of them). mystyle.js: Additional javascript code for the style, it is read in the HTML pages after this current file. The additional code may adjust the preprocessing function jscontent() with is called onload of a file. This is done by appending functions to jscontentfuncs (jscontentfuncs.push(newfunc);). Make sure, that your style is still usable without javascript. mystyle.css: CSS configuration, read after manual.css (so it can just reconfigure a few details, or overwrite everything). Then adjust chooser.html such that users can switch on and off mystyle. A user can change the preferred style permanently by using the [Style] link and choosing one. Or one can append '?GAPDocStyle=mystyle' to the URL when loading any file of the manual (so the style can be configured in the GAP user preferences). */ /* generic helper function */ function deleteCookie(nam) { document.cookie = nam+"=;Path=/;expires=Thu, 01 Jan 1970 00:00:00 GMT"; } /* read a value from a "nam1=val1;nam2=val2;..." string (e.g., the search part of an URL or a cookie */ function valueString(str,nam) { var cs = str.split(";"); for (var i=0; i < cs.length; i++) { var pos = cs[i].search(nam+"="); if (pos > -1) { pos = cs[i].indexOf("="); return cs[i].slice(pos+1); } } return 0; } /* when a non-default style is chosen via URL or a cookie, then the cookie is reset and the styles .js and .css files are read */ function overwriteStyle() { /* style in URL? */ var style = valueString(window.location.search, "GAPDocStyle"); /* otherwise check cookie */ if (style == 0) style = valueString(document.cookie, "GAPDocStyle"); if (style == 0) return; if (style == "default") deleteCookie("GAPDocStyle"); else { /* ok, we set the cookie for path "/" */ var path = "/"; /* or better like this ??? var here = window.location.pathname.split("/"); for (var i=0; i+3 < here.length; i++) path = path+"/"+here[i]; */ document.cookie = "GAPDocStyle="+style+";Path="+path; /* split into names of style files */ var stlist = style.split(","); /* read style's css and js files */ for (var i=0; i < stlist.length; i++) { document.writeln(''); document.writeln(''); } } } /* this adds a "[Style]" link next to the MathJax switcher */ function addStyleLink() { var line = document.getElementById("mathjaxlink"); var el = document.createElement("a"); var oncl = document.createAttribute("href"); var back = window.location.protocol+"//" if (window.location.protocol == "http:" || window.location.protocol == "https:") { back = back+window.location.host; if (window.location.port != "") { back = back+":"+window.location.port; } } back = back+window.location.pathname; oncl.nodeValue = "chooser.html?BACK="+back; el.setAttributeNode(oncl); var cont = document.createTextNode(" [Style]"); el.appendChild(cont); line.appendChild(el); } var jscontentfuncs = new Array(); jscontentfuncs.push(addStyleLink); /* the default jscontent() only adds the [Style] link to the page */ function jscontent () { for (var i=0; i < jscontentfuncs.length; i++) jscontentfuncs[i](); } congruence-1.2.6/doc/chapInd.html 000644 000766 000024 00000014173 14577601110 016661 0 ustar 00obk1 staff 000000 000000\in
2.4-2 CanEasilyCompareCongruenceSubgroups
2.4-3 CongruenceSubgroupGamma0
2.1-2 CongruenceSubgroupGamma1
2.1-4 CongruenceSubgroupGammaUpper0
2.1-3 CongruenceSubgroupGammaUpper1
2.1-5 DefiningCongruenceSubgroups
2.3-3 DenominatorOfGFSElement
3.2-3 FareySymbol
4.1-1 FareySymbolByData
3.1-1 GeneralizedFareySequence
3.2-1 GeneratorsByFareySymbol
4.2-4 GeneratorsOfGroup
4.2-5 Index
2.4-5 IndexInPSL2ZByFareySymbol
4.3-1 IndexInSL2Z
2.3-2 InfoCongruence
5.1-1 Intersection
2.1-6 IntersectionOfCongruenceSubgroups
2.1-6 IsCongruenceSubgroup
1.1 2. IsCongruenceSubgroupGamma0
2.2-2 IsCongruenceSubgroupGamma1
2.2-4 IsCongruenceSubgroupGammaUpper0
2.2-3 IsCongruenceSubgroupGammaUpper1
2.2-5 IsFareySymbol
3. IsFareySymbolDefaultRep
3. IsIntersectionOfCongruenceSubgroups
2.2-6 IsPrincipalCongruenceSubgroup
2.2-1 IsSubset
2.4-4 IsValidFareySymbol
3.1-2 LabelsOfFareySymbol
3.2-4 LevelOfCongruenceSubgroup
2.3-1 MatrixByEvenInterval
4.2-1 MatrixByFreePairOfIntervals
4.2-3 MatrixByOddInterval
4.2-2 NumeratorOfGFSElement
3.2-2 PrincipalCongruenceSubgroup
2.1-1 Random
2.4-1
generated by GAPDoc2HTML
congruence-1.2.6/doc/chap3_mj.html 000644 000766 000024 00000024757 14577601110 017010 0 ustar 00obk1 staff 000000 000000A Farey symbol is a compact and useful way to represent a subgroup of finite index in \(SL_2(ℤ)\) from which one can deduce independent generators for this subgroup. It consists of two components, namely a so-called generalised Farey sequence (gfs) and an ordered list of labels, giving additional structure to the gfs.
A generalised Farey sequence (g.F.S.) is an ordered list of the form \({ -infinity, x_0, x_1, ... , x_n, infinity }\), where
1. the \(x_i = a_i/b_i\) are rational numbers in reduced form arranged in increasing order for \(i = 0, ... , n\);
2. \(x_0, ... , x_n \in Z\), and some \(x_i = 0\);
3. we define \(x_{-1}=-infinity=-1/0\) and \(x_{n+1}=infinity=1/0\);
4. \(a_{i+1}b_{i}-a_{i}b_{i+1}=1\) for \(i=-1, ... ,n\).
The ordered list of labels of a Farey symbol gives an additional structure to the gfs. The labels correspond to each consecutive pair of \(x_i\)'s and are of the following types:
1. even,
2. odd,
3. a natural number, which occurs in the list of labels exactly twice or not at all.
Note that the actual values of numerical labels are not important; it is the pairing of two intervals that matters.
The package Congruence provides functions to construct Farey symbols by the given generalised Farey sequence and corresponding list of labels. The returned Farey symbol will belong to the category IsFareySymbol
and will have the representation IsFareySymbolDefaultRep
.
‣ FareySymbolByData ( gfs, labels ) | ( function ) |
This constructor creates the Farey symbol with the given generalized Farey sequence and list of labels. It also checks conditions from the definition of Farey symbol and returns an error if they are not satisfied. The data used to create the Farey symbol are stored as its attributes GeneralizedFareySequence
(3.2-1) and LabelsOfFareySymbol
(3.2-4).
gap> fs:=FareySymbolByData([infinity,0,1,2,infinity],[1,2,2,1]); [ infinity, 0, 1, 2, infinity ] [ 1, 2, 2, 1 ]
‣ IsValidFareySymbol ( fs ) | ( function ) |
This function is used in FareySymbolByData
(3.1-1) to validate its output.
gap> IsValidFareySymbol(fs); true
‣ GeneralizedFareySequence ( fs ) | ( attribute ) |
Returns the generalized Farey sequence gfs of the Farey symbol.
gap> GeneralizedFareySequence(fs); [ infinity, 0, 1, 2, infinity ]
‣ NumeratorOfGFSElement ( gfs, i ) | ( function ) |
Returns: integer
Returns the numerator of the i-th term of the generalised Farey sequence gfs: for the 1st infinite entry returns -1, for the last one returns 1, for all other entries returns the usual numerator.
gap> List([1..5], i -> NumeratorOfGFSElement(GeneralizedFareySequence(fs),i)); [ -1, 0, 1, 2, 1 ]
‣ DenominatorOfGFSElement ( gfs, i ) | ( function ) |
Returns: integer
Returns the denominator of the i-th term of the generalised Farey sequence gfs: for both infinite entries returns 0, for the other ones returns the usual denominator.
gap> List([1..5], i -> DenominatorOfGFSElement(GeneralizedFareySequence(fs),i)); [ 0, 1, 1, 1, 0 ]
‣ LabelsOfFareySymbol ( fs ) | ( attribute ) |
Returns the list of labels of the Farey symbol. This list has "odd", "even" and paired integers as entries.
gap> LabelsOfFareySymbol(fs); [ 1, 2, 2, 1 ]
generated by GAPDoc2HTML
congruence-1.2.6/doc/chapInd.txt 000644 000766 000024 00000003320 14577601104 016527 0 ustar 00obk1 staff 000000 000000 [1XIndex[101X [2X\in[102X 2.4-2 [2XCanEasilyCompareCongruenceSubgroups[102X 2.4-3 [5XCongruence[105X package 0.0-1 [2XCongruenceSubgroupGamma0[102X 2.1-2 [2XCongruenceSubgroupGamma1[102X 2.1-4 [2XCongruenceSubgroupGammaUpper0[102X 2.1-3 [2XCongruenceSubgroupGammaUpper1[102X 2.1-5 [2XDefiningCongruenceSubgroups[102X 2.3-3 [2XDenominatorOfGFSElement[102X 3.2-3 [2XFareySymbol[102X 4.1-1 [2XFareySymbolByData[102X 3.1-1 [2XGeneralizedFareySequence[102X 3.2-1 [2XGeneratorsByFareySymbol[102X 4.2-4 [2XGeneratorsOfGroup[102X 4.2-5 [2XIndex[102X 2.4-5 [2XIndexInPSL2ZByFareySymbol[102X 4.3-1 [2XIndexInSL2Z[102X 2.3-2 [2XInfoCongruence[102X 5.1-1 [2XIntersection[102X 2.1-6 [2XIntersectionOfCongruenceSubgroups[102X 2.1-6 [10XIsCongruenceSubgroup[110X 1.1 2.0 [2XIsCongruenceSubgroupGamma0[102X 2.2-2 [2XIsCongruenceSubgroupGamma1[102X 2.2-4 [2XIsCongruenceSubgroupGammaUpper0[102X 2.2-3 [2XIsCongruenceSubgroupGammaUpper1[102X 2.2-5 [10XIsFareySymbol[110X 3.0 [10XIsFareySymbolDefaultRep[110X 3.0 [2XIsIntersectionOfCongruenceSubgroups[102X 2.2-6 [2XIsPrincipalCongruenceSubgroup[102X 2.2-1 [2XIsSubset[102X 2.4-4 [2XIsValidFareySymbol[102X 3.1-2 [2XLabelsOfFareySymbol[102X 3.2-4 [2XLevelOfCongruenceSubgroup[102X 2.3-1 [2XMatrixByEvenInterval[102X 4.2-1 [2XMatrixByFreePairOfIntervals[102X 4.2-3 [2XMatrixByOddInterval[102X 4.2-2 [2XNumeratorOfGFSElement[102X 3.2-2 [2XPrincipalCongruenceSubgroup[102X 2.1-1 [2XRandom[102X 2.4-1 one and two argument versions 2.4-1 ------------------------------------------------------- congruence-1.2.6/doc/service.xml 000644 000766 000024 00000001426 14577601060 016610 0 ustar 00obk1 staff 000000 000000