<h3>2 <span class="Heading">Construction of congruence subgroups</span></h3>
<p>The package <strong class="pkg">Congruence</strong> provides functions to construct several types of canonical congruence subgroups in <span class="SimpleMath">\(SL_2(ℤ)\)</span>, and also intersections of a finite number of such subgroups. They will return a matrix group in the category <code class="code">IsCongruenceSubgroup</code>, which is defined as a subcategory of <code class="code">IsMatrixGroup</code>, 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:</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">LoadPackage("congruence");</span>
-----------------------------------------------------------------------------
Loading Congruence 1.2.7 (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
</pre></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&an style='color:turquoise'>#8227; PrincipalCongruenceSubgroup</code>( <var class="Arg">N</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns the principal congruence subgroup <span class="SimpleMath">\(\Gamma(N)\)</span> of level <var class="Arg">N</var> in <span class="SimpleMath">\(SL_2(ℤ)\)</span>.</p>
<p>This subgroup consists of all matrices of the form</p>
<pre class="normal">
[1+N*a N*b]
[ N*c 1+N*d]
</pre>
<p>where <span class="SimpleMath">\(a\)</span>,<span class="SimpleMath">\(b\)</span>,<span class="SimpleMath">\(c\)</span>,<span class="SimpleMath">\(d\)</span> are integers. The returned group will have the property <code class="func">IsPrincipalCongruenceSubgroup</code> (<a href="chap2_mj.html#X828F7E08787650DC"><span class="RefLink">2.2-1</span></a>).</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&an style='color:turquoise'>#8227; CongruenceSubgroupGamma0</code>( <var class="Arg">N</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns the congruence subgroup <span class="SimpleMath">\(\Gamma_0(N)\)</span> of level <var class="Arg">N</var> in <span class="SimpleMath">\(SL_2(ℤ)\)</span>.</p>
<p>This subgroup consists of all matrices of the form</p>
<pre class="normal">
[a b]
[N*c d]
</pre>
<p>where <span class="SimpleMath">\(a\)</span>,<span class="SimpleMath">\(b\)</span>,<span class="SimpleMath">\(c\)</span>,<span class="SimpleMath">\(d\)</span> are integers. The returned group will have the property <code class="func">IsCongruenceSubgroupGamma0</code> (<a href="chap2_mj.html#X85124A697E826AB4"><span class="RefLink">2.2-2</span></a>).</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&an style='color:turquoise'>#8227; CongruenceSubgroupGammaUpper0</code>( <var class="Arg">N</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns the congruence subgroup <span class="SimpleMath">\(\Gamma^0(N)\)</span> of level <var class="Arg">N</var> in <span class="SimpleMath">\(SL_2(ℤ)\)</span>.</p>
<p>This subgroup consists of all matrices of the form</p>
<pre class="normal">
[a N*b]
[c d]
</pre>
<p>where <span class="SimpleMath">\(a\)</span>,<span class="SimpleMath">\(b\)</span>,<span class="SimpleMath">\(c\)</span>,<span class="SimpleMath">\(d\)</span> are integers. The returned group will have the property <code class="func">IsCongruenceSubgroupGammaUpper0</code> (<a href="chap2_mj.html#X7A03633C83A286F5"><span class="RefLink">2.2-3</span></a>).</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&an style='color:turquoise'>#8227; CongruenceSubgroupGamma1</code>( <var class="Arg">N</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns the congruence subgroup <span class="SimpleMath">\(\Gamma_1(N)\)</span> of level <var class="Arg">N</var> in <span class="SimpleMath">\(SL_2(ℤ)\)</span>.</p>
<p>This subgroup consists of all matrices of the form</p>
<pre class="normal">
[1+N*a b]
[ N*c 1+N*d]
</pre>
<p>where <span class="SimpleMath">\(a\)</span>,<span class="SimpleMath">\(b\)</span>,<span class="SimpleMath">\(c\)</span>,<span class="SimpleMath">\(d\)</span> are integers. The returned group will have the property <code class="func">IsCongruenceSubgroupGamma1</code> (<a href="chap2_mj.html#X8262396080F3B0DD"><span class="RefLink">2.2-4</span></a>).</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&an style='color:turquoise'>#8227; CongruenceSubgroupGammaUpper1</code>( <var class="Arg">N</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns the congruence subgroup <span class="SimpleMath">\(\Gamma^1(N)\)</span> of level <var class="Arg">N</var> in <span class="SimpleMath">\(SL_2(ℤ)\)</span>.</p>
<p>This subgroup consists of all matrices of the form</p>
<pre class="normal">
[1+N*a N*b]
[ c 1+N*d]
</pre>
<p>where <span class="SimpleMath">\(a\)</span>,<span class="SimpleMath">\(b\)</span>,<span class="SimpleMath">\(c\)</span>,<span class="SimpleMath">\(d\)</span> are integers. The returned group will have the property <code class="func">IsCongruenceSubgroupGammaUpper1</code> (<a href="chap2_mj.html#X7D731035834CF878"><span class="RefLink">2.2-5</span></a>).</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&an style='color:turquoise'>#8227; IntersectionOfCongruenceSubgroups</code>( <var class="Arg">G1</var>, <var class="Arg">G2</var>, <var class="Arg">...</var>, <var class="Arg">GN</var> )</td><td class="tdright">( function )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&an style='color:turquoise'>#8227; Intersection</code>( <var class="Arg">G1</var>, <var class="Arg">G2</var>, <var class="Arg">...</var>, <var class="Arg">GN</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>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 <code class="code">IntersectionOfCongruenceSubgroups</code>, since it will be called automatically from <code class="code">Intersection</code>.</p>
<p>The returned group will have the property <code class="func">IsIntersectionOfCongruenceSubgroups</code> (<a href="chap2_mj.html#X83B4E4FA7F4DFB97"><span class="RefLink">2.2-6</span></a>).</p>
<p>The list of congruence subgroups that form the intersection can be obtained using <code class="func">DefiningCongruenceSubgroups</code> (<a href="chap2_mj.html#X7BF57D157824FFC8"><span class="RefLink">2.3-3</span></a>). Note, that when the intersection appears to be one of the canonical congruence subgroups, the package will recognize thisand will return a canonical subgroup of the appropriate type.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">I:=IntersectionOfCongruenceSubgroups(G0_4,GU1_4);</span>
<principal congruence subgroup of level 4 in SL_2(Z)>
<span class="GAPprompt">gap></span> <span class="GAPinput">J:=IntersectionOfCongruenceSubgroups(G0_4,G1_6);</span>
<intersection of congruence subgroups of resulting level 12 in SL_2(Z)>
</pre></div>
<h4>2.2 <span class="Heading">Properties of congruence subgroups</span></h4>
<p>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 <strong class="pkg">Congruence</strong> algorithms. Note that they donot provide an actual test whether a certain matrix group is a congruence subgroup ornot.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&an style='color:turquoise'>#8227; IsPrincipalCongruenceSubgroup</code>( <var class="Arg">G</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>For a congruence subgroup <var class="Arg">G</var> in the category <code class="code">IsCongruenceSubgroup</code>, returns <code class="keyw">true</code> if <var class="Arg">G</var> was constructed by <code class="func">PrincipalCongruenceSubgroup</code> (<a href="chap2_mj.html#X7A61F693873F7136"><span class="RefLink">2.1-1</span></a>) (or reduced to one as a result of an intersection) and returns <code class="keyw">false</code> otherwise.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&an style='color:turquoise'>#8227; IsCongruenceSubgroupGamma0</code>( <var class="Arg">G</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>For a congruence subgroup <var class="Arg">G</var> in the category <code class="code">IsCongruenceSubgroup</code>, returns <code class="keyw">true</code> if <var class="Arg">G</var> was constructed by <code class="func">CongruenceSubgroupGamma0</code> (<a href="chap2_mj.html#X7B8DB77B81BE58D7"><span class="RefLink">2.1-2</span></a>) (or reduced to one as a result of an intersection) and returns <code class="keyw">false</code> otherwise.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&an style='color:turquoise'>#8227; IsCongruenceSubgroupGammaUpper0</code>( <var class="Arg">G</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>For a congruence subgroup <var class="Arg">G</var> in the category <code class="code">IsCongruenceSubgroup</code>, returns <code class="keyw">true</code> if <var class="Arg">G</var> was constructed by <code class="func">CongruenceSubgroupGammaUpper0</code> (<a href="chap2_mj.html#X7B4FBED17ECE2A7F"><span class="RefLink">2.1-3</span></a>) (or reduced to one as a result of an intersection) and returns <code class="keyw">false</code> otherwise.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&an style='color:turquoise'>#8227; IsCongruenceSubgroupGamma1</code>( <var class="Arg">G</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>For a congruence subgroup <var class="Arg">G</var> in the category <code class="code">IsCongruenceSubgroup</code>, returns <code class="keyw">true</code> if <var class="Arg">G</var> was constructed by <code class="func">CongruenceSubgroupGamma1</code> (<a href="chap2_mj.html#X7CFDC47279AC0E85"><span class="RefLink">2.1-4</span></a>) (or reduced to one as a result of an intersection) and returns <code class="keyw">false</code> otherwise.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&an style='color:turquoise'>#8227; IsCongruenceSubgroupGammaUpper1</code>( <var class="Arg">G</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>For a congruence subgroup <var class="Arg">G</var> in the category <code class="code">IsCongruenceSubgroup</code>, returns <code class="keyw">true</code> if <var class="Arg">G</var> was constructed by <code class="func">CongruenceSubgroupGammaUpper1</code> (<a href="chap2_mj.html#X7C3FCDD878FE57ED"><span class="RefLink">2.1-5</span></a>) (or reduced to one as a result of an intersection) and returns <code class="keyw">false</code> otherwise.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&an style='color:turquoise'>#8227; IsIntersectionOfCongruenceSubgroups</code>( <var class="Arg">G</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>For a congruence subgroup <var class="Arg">G</var> in the category <code class="code">IsCongruenceSubgroup</code>, returns <code class="keyw">true</code> if <var class="Arg">G</var> was constructed by <code class="func">IntersectionOfCongruenceSubgroups</code> (<a href="chap2_mj.html#X7FE839377D7F45EB"><span class="RefLink">2.1-6</span></a>) and without being one of the canonical congruence subgroups, otherwise it returns <code class="keyw">false</code>.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&an style='color:turquoise'>#8227; LevelOfCongruenceSubgroup</code>( <var class="Arg">G</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Stores the level of the congruence subgroup <var class="Arg">G</var>. 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.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&an style='color:turquoise'>#8227; DefiningCongruenceSubgroups</code>( <var class="Arg">G</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: list of congruence subgroups</p>
<p>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.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">DefiningCongruenceSubgroups(J);</span>
[ <congruence subgroup CongruenceSubgroupGamma_0(4) in SL_2(Z)>,
<congruence subgroup CongruenceSubgroupGamma_1(6) in SL_2(Z)> ]
<span class="GAPprompt">gap></span> <span class="GAPinput">P:=PrincipalCongruenceSubgroup(6);</span>
<principal congruence subgroup of level 6 in SL_2(Z)>
<span class="GAPprompt">gap></span> <span class="GAPinput">Q:=PrincipalCongruenceSubgroup(10); </span>
<principal congruence subgroup of level 10 in SL_2(Z)>
<span class="GAPprompt">gap></span> <span class="GAPinput">G:=IntersectionOfCongruenceSubgroups(Q,P); </span>
<principal congruence subgroup of level 30 in SL_2(Z)>
<span class="GAPprompt">gap></span> <span class="GAPinput">DefiningCongruenceSubgroups(G);</span>
[ <principal congruence subgroup of level 30 in SL_2(Z)> ]
</pre></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&an style='color:turquoise'>#8227; Random</code>( <var class="Arg">G</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&an style='color:turquoise'>#8227; Random</code>( <var class="Arg">G</var>, <var class="Arg">m</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>For a congruence subgroup <var class="Arg">G</var> in the category <code class="code">IsCongruenceSubgroup</code>, returns random element. In the two-argument form, the second parameter will control the absolute value of randomly selected entries of the matrix.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">Random(G_2) in G_2;</span> true
<span class="GAPprompt">gap></span> <span class="GAPinput">Random(G_8,2) in G_8;</span> true
</pre></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&an style='color:turquoise'>#8227; \in</code>( <var class="Arg">m</var>, <var class="Arg">G</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>It is easy to implement the membership test for congruence subgroups and their intersections.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&an style='color:turquoise'>#8227; CanEasilyCompareCongruenceSubgroups</code>( <var class="Arg">G</var>, <var class="Arg">H</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>For congruence subgroups <var class="Arg">G,H</var> in the category <code class="code">IsCongruenceSubgroup</code>, returns <code class="keyw">true</code> if <var class="Arg">G</var> and <var class="Arg">H</var> are of the same type listed in <code class="func">PrincipalCongruenceSubgroup</code> (<a href="chap2_mj.html#X7A61F693873F7136"><span class="RefLink">2.1-1</span></a>) --> <java.lang.StringIndexOutOfBoundsException: Index 393 out of bounds for length 34
div ="unc">table class=func"width=100"<r< class""<codeclass=""‣IsSubset<code> <class"G/var> <ar class="rg>H/var <td><dclass="dright">&;operation&bsp)/><tr<table>/>
<><strong class=pkg>Congruence<strong provides methods for code class"code"IsSubset/code forcongruence subgroups. <code class="ode"IsSubset<code>returns class"keyw"true<code> <var ="">H<var> asubset varclass""><var>.These makeit possible to use<class=code"IsSubgroup<code> operation for congruence subgroups.<p>
d ="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsSubset(G_2,G_8);</span>
rue
<span class="GAPprompt">gap> [17015573161,1199502252007,72822003597611 ,,[18046143301 ,,java.lang.StringIndexOutOfBoundsException: Index 71 out of bounds for length 71 962538781417,843274087685310577 ],,[52557320588449 ,
<span class= [72619335421271 ],[25064318405497312723,67938559771227783733 ,,,java.lang.StringIndexOutOfBoundsException: Index 74 out of bounds for length 74
<span 67247854345207141] [14371375273255211]
<span class="GAPprompt">gap [86538003906817,734171142595644329 ,java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
spanclass="GAPprompt">><span s class="APinput"> gin g2 <span>
<span class="GAPprompt">></span> <span class="java.lang.StringIndexOutOfBoundsException: Index 53 out of bounds for length 47
<span class [9119577353,14390618309,296131339884449219 ], 67893921551340193],
java.lang.StringIndexOutOfBoundsException: Range [39, 32) out of bounds for length 32
,true ,true, ]
[false,false,true,false, ]
[ false, 314362821569],,, 36644034787 ,, 3535042001 ,,
[ false, false, false, false880729535042107 , 227002558974721],,[16779562264336840541 ],
</ [41061380171651057, 4713581862621101137],,,,[19596101190005761 ,,
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">&an style='color:turquoise'>#8227; Index</code>( <var class="Arg">G</var>, <var class="Arg">H</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>If a congruence subgroup <var class="Arg">H</var> is a subgroup of a congruence subgroup <var class="Arg">G</var>, we can easily compute the index of <var class="Arg">H</var> in <var class="Arg">G</var>, since we know the index of both subgroups in <span class="SimpleMath">\(SL_2(ℤ)\)</span>.</p>
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.188Bemerkung:
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.