Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.
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
Project: cocalc-sagemath-dev-slelievre
Views: 418346<Chapter Label="CongruenceSubgroups">1<Heading>Construction of congruence subgroups</Heading>23<Index Key="IsCongruenceSubgroup"><C>IsCongruenceSubgroup</C></Index>4The package &Congruence; provides functions to construct several5types of canonical congruence subgroups in <M>SL_2(&ZZ;)</M>, and also6intersections of a finite number of such subgroups. They will return7a matrix group in the category <C>IsCongruenceSubgroup</C>,8which is defined as a subcategory of <C>IsMatrixGroup</C>, and9which will have a distinguishing property determining whether it is10a congruence subgroup of one of the canonical types, or an intersection11of such congruence subgroups (if it can not be reduced to one of the12canonical congruence subgroups).1314To start to work with the package, you need first to load it as follows:1516<Log>17<![CDATA[18gap> LoadPackage("congruence");19-----------------------------------------------------------------------------20Loading Congruence 1.1.0 (Congruence subgroups of SL(2,Integers))21by Ann Dooms (http://homepages.vub.ac.be/~andooms),22Eric Jespers (http://homepages.vub.ac.be/~efjesper),23Alexander Konovalov (http://www.cs.st-andrews.ac.uk/~alexk/), and24Helena Verrill (http://www.math.lsu.edu/~verrill).25-----------------------------------------------------------------------------26true27]]>28</Log>2930<Section Label="CongConstr">31<Heading>Construction of congruence subgroups</Heading>3233<ManSection>34<Oper Name="PrincipalCongruenceSubgroup"35Arg="N"36Comm="" />37<Description>38Returns the principal congruence subgroup <M>\Gamma(N)</M> of level <A>N</A>39in <M>SL_2(&ZZ;)</M>.<P/>40This subgroup consists of41all matrices of the form42<Alt Only="LaTeX">43<Display>44<![CDATA[45\left(46\begin{array}{rr}471+N a & N b \\48N c & 1+N d49\end{array}50\right)51]]>52</Display>53</Alt>54<Alt Only="Text,HTML"><Verb><![CDATA[55[1+N*a N*b]56[ N*c 1+N*d]57]]></Verb></Alt>58where <M>a</M>,<M>b</M>,<M>c</M>,<M>d</M> are integers.59The returned group will have the property60<Ref Prop="IsPrincipalCongruenceSubgroup" />.61</Description>62</ManSection>6364<Example>65<![CDATA[66gap> G_8:=PrincipalCongruenceSubgroup(8);67<principal congruence subgroup of level 8 in SL_2(Z)>68gap> IsGroup(G_8);69true70gap> IsMatrixGroup(G_8);71true72gap> DimensionOfMatrixGroup(G_8);73274gap> MultiplicativeNeutralElement(G_8);75[ [ 1, 0 ], [ 0, 1 ] ]76gap> One(G);77[ [ 1, 0 ], [ 0, 1 ] ]78gap> [[1,2],[3,4]] in G_8;79false80gap> [[1,8],[8,65]] in G_8;81true82gap> SL_2:=SL(2,Integers);83SL(2,Integers)84gap> IsSubgroup(SL_2,G_8);85true86]]>87</Example>888990<ManSection>91<Oper Name="CongruenceSubgroupGamma0"92Arg="N"93Comm="" />94<Description>95Returns the congruence subgroup <M>\Gamma_0(N)</M>96of level <A>N</A> in <M>SL_2(&ZZ;)</M>.<P/>97This subgroup consists of98all matrices of the form99<Alt Only="LaTeX">100<Display>101<![CDATA[102\left(103\begin{array}{rr}104a & b \\105N c & d106\end{array}107\right)108]]>109</Display>110</Alt>111<Alt Only="Text,HTML"><Verb><![CDATA[112[a b]113[N*c d]114]]></Verb></Alt>115where <M>a</M>,<M>b</M>,<M>c</M>,<M>d</M> are integers.116The returned group will have the property117<Ref Prop="IsCongruenceSubgroupGamma0" />.118</Description>119</ManSection>120121<Example>122<![CDATA[123gap> G0_4:=CongruenceSubgroupGamma0(4);124<congruence subgroup CongruenceSubgroupGamma_0(4) in SL_2(Z)>125]]>126</Example>127128129<ManSection>130<Oper Name="CongruenceSubgroupGammaUpper0"131Arg="N"132Comm="" />133<Description>134Returns the congruence subgroup <M>\Gamma^0(N)</M>135of level <A>N</A> in <M>SL_2(&ZZ;)</M>.<P/>136This subgroup consists of137all matrices of the form138<Alt Only="LaTeX">139<Display>140<![CDATA[141\left(142\begin{array}{rr}143a & N b \\144c & d145\end{array}146\right)147]]>148</Display>149</Alt>150<Alt Only="Text,HTML"><Verb><![CDATA[151[a N*b]152[c d]153]]></Verb></Alt>154where <M>a</M>,<M>b</M>,<M>c</M>,<M>d</M> are integers.155The returned group will have the property156<Ref Prop="IsCongruenceSubgroupGammaUpper0" />.157</Description>158</ManSection>159160<Example>161<![CDATA[162gap> GU0_2:=CongruenceSubgroupGammaUpper0(2);163<congruence subgroup CongruenceSubgroupGamma^0(2) in SL_2(Z)>164]]>165</Example>166167168<ManSection>169<Oper Name="CongruenceSubgroupGamma1"170Arg="N"171Comm="" />172<Description>173Returns the congruence subgroup <M>\Gamma_1(N)</M>174of level <A>N</A> in <M>SL_2(&ZZ;)</M>.<P/>175This subgroup consists of176all matrices of the form177<Alt Only="LaTeX">178<Display>179<![CDATA[180\left(181\begin{array}{rr}1821+N a & b \\183N c & 1+N d184\end{array}185\right)186]]>187</Display>188</Alt>189<Alt Only="Text,HTML"><Verb><![CDATA[190[1+N*a b]191[ N*c 1+N*d]192]]></Verb></Alt>193where <M>a</M>,<M>b</M>,<M>c</M>,<M>d</M> are integers.194The returned group will have the property195<Ref Prop="IsCongruenceSubgroupGamma1" />.196</Description>197</ManSection>198199<Example>200<![CDATA[201gap> G1_6:=CongruenceSubgroupGamma1(6);202<congruence subgroup CongruenceSubgroupGamma_1(6) in SL_2(Z)>203]]>204</Example>205206207<ManSection>208<Oper Name="CongruenceSubgroupGammaUpper1"209Arg="N"210Comm="" />211<Description>212Returns the congruence subgroup <M>\Gamma^1(N)</M>213of level <A>N</A> in <M>SL_2(&ZZ;)</M>.<P/>214This subgroup consists of215all matrices of the form216<Alt Only="LaTeX">217<Display>218<![CDATA[219\left(220\begin{array}{rr}2211+N a & N b \\222c & 1+N d223\end{array}224\right)225]]>226</Display>227</Alt>228<Alt Only="Text,HTML"><Verb><![CDATA[229[1+N*a N*b]230[ c 1+N*d]231]]></Verb></Alt>232where <M>a</M>,<M>b</M>,<M>c</M>,<M>d</M> are integers.233The returned group will have the property234<Ref Prop="IsCongruenceSubgroupGammaUpper1" />.235</Description>236</ManSection>237238<Example>239<![CDATA[240gap> GU1_4:=CongruenceSubgroupGammaUpper1(4);241<congruence subgroup CongruenceSubgroupGamma^1(4) in SL_2(Z)>242]]>243</Example>244245246<ManSection>247<Func Name="IntersectionOfCongruenceSubgroups"248Arg="G1, G2, ..., GN" />249<Func Name="Intersection"250Arg="G1, G2, ..., GN" />251<Description>252Returns the intersection of its arguments, which can be253congruence subgroups or their intersections, constructed254with the same function. It is not necessary for the user255to use <C>IntersectionOfCongruenceSubgroups</C>, since256it will be called automatically from <C>Intersection</C>.<P/>257258The returned group will have the property259<Ref Prop="IsIntersectionOfCongruenceSubgroups" />.<P/>260261The list of congruence subgroups that form the intersection262can be obtained using <Ref Attr="DefiningCongruenceSubgroups"/>.263264Note, that when the intersection appears to be one of the265canonical congruence subgroups, the package will recognize266this and will return a canonical subgroup of the267appropriate type.268269</Description>270</ManSection>271272<Example>273<![CDATA[274gap> I:=IntersectionOfCongruenceSubgroups(G0_4,GU1_4);275<principal congruence subgroup of level 4 in SL_2(Z)>276gap> J:=IntersectionOfCongruenceSubgroups(G0_4,G1_6);277<intersection of congruence subgroups of resulting level 12 in SL_2(Z)>278]]>279</Example>280281</Section>282283<!-- ********************************************************* -->284285<Section Label="CongProperties">286<Heading>Properties of congruence subgroups</Heading>287288A congruence subgroup constructed by one of the five above listed functions289will have certain properties determining its type. These properties will be290used for method selection by &Congruence; algorithms. Note that they do not291provide an actual test whether a certain matrix group is a congruence subgroup292or not.293294<ManSection>295<Prop Name="IsPrincipalCongruenceSubgroup"296Arg="G"/>297<Description>298For a congruence subgroup <A>G</A> in the category299<C>IsCongruenceSubgroup</C>, returns <K>true</K> if <A>G</A> was300constructed by <Ref Func="PrincipalCongruenceSubgroup" />301(or reduced to one as a result of an intersection) and302returns <K>false</K> otherwise.303</Description>304</ManSection>305306<Example>307<![CDATA[308gap> IsPrincipalCongruenceSubgroup(G_8);309true310gap> IsPrincipalCongruenceSubgroup(G0_4);311false312gap> IsPrincipalCongruenceSubgroup(I);313true314]]>315</Example>316317318<ManSection>319<Prop Name="IsCongruenceSubgroupGamma0"320Arg="G"/>321<Description>322For a congruence subgroup <A>G</A> in the category323<C>IsCongruenceSubgroup</C>, returns <K>true</K> if324<A>G</A> was constructed by <Ref Func="CongruenceSubgroupGamma0" /> (or reduced to one as a result of an intersection)325and returns <K>false</K> otherwise.326</Description>327</ManSection>328329330<ManSection>331<Prop Name="IsCongruenceSubgroupGammaUpper0"332Arg="G"/>333<Description>334For a congruence subgroup <A>G</A> in the category335<C>IsCongruenceSubgroup</C>, returns <K>true</K> if336<A>G</A> was constructed by <Ref Func="CongruenceSubgroupGammaUpper0" /> (or reduced to one as a result of an intersection)337and returns <K>false</K> otherwise.338</Description>339</ManSection>340341342<ManSection>343<Prop Name="IsCongruenceSubgroupGamma1"344Arg="G"/>345<Description>346For a congruence subgroup <A>G</A> in the category347<C>IsCongruenceSubgroup</C>, returns <K>true</K> if348<A>G</A> was constructed by <Ref Func="CongruenceSubgroupGamma1" /> (or reduced to one as a result of an intersection)349and returns <K>false</K> otherwise.350</Description>351</ManSection>352353354<ManSection>355<Prop Name="IsCongruenceSubgroupGammaUpper1"356Arg="G"/>357<Description>358For a congruence subgroup <A>G</A> in the category359<C>IsCongruenceSubgroup</C>, returns <K>true</K> if360<A>G</A> was constructed by <Ref Func="CongruenceSubgroupGammaUpper1" /> (or reduced to one as a result of an intersection)361and returns <K>false</K> otherwise.362</Description>363</ManSection>364365366<ManSection>367<Prop Name="IsIntersectionOfCongruenceSubgroups"368Arg="G"/>369<Description>370For a congruence subgroup <A>G</A> in the category371<C>IsCongruenceSubgroup</C>, returns <K>true</K> if372<A>G</A> was constructed by373<Ref Func="IntersectionOfCongruenceSubgroups"/> and374without being one of the canonical congruence375subgroups, otherwise it returns <K>false</K>.376</Description>377</ManSection>378379<Example>380<![CDATA[381gap> IsIntersectionOfCongruenceSubgroups(I);382false383gap> IsIntersectionOfCongruenceSubgroups(J);384true385]]>386</Example>387388</Section>389390<!-- ********************************************************* -->391392<Section Label="CongAttributes">393<Heading>Attributes of congruence subgroups</Heading>394395The next three attributes store key properties of congruence subgroups.396397<ManSection>398<Attr Name="LevelOfCongruenceSubgroup"399Arg="G"/>400<Description>401Stores the level of the congruence subgroup <A>G</A>. The (arithmetic) level of a congruence subgroup G is the smallest positive402number N such that G contains the principal congruence subgroup of level N.403</Description>404</ManSection>405406<Example>407<![CDATA[408gap> LevelOfCongruenceSubgroup(G_8);4098410gap> LevelOfCongruenceSubgroup(G1_6);4116412gap> LevelOfCongruenceSubgroup(I);4134414gap> LevelOfCongruenceSubgroup(J);41512416]]>417</Example>418419420<ManSection>421<Attr Name="IndexInSL2Z"422Arg="G"/>423<Description>424Stores the index of the congruence subgroup <A>G</A> in <M>SL_2(&ZZ;)</M>.425</Description>426</ManSection>427428<Example>429<![CDATA[430gap> IndexInSL2Z(G_8);431384432gap> G_2:=PrincipalCongruenceSubgroup(2);433<principal congruence subgroup of level 2 in SL_2(Z)>434gap> IndexInSL2Z(G_2);43512436gap> IndexInSL2Z(GU1_4);43712438]]>439</Example>440441<ManSection>442<Attr Name="DefiningCongruenceSubgroups"443Arg="G" />444<Returns>445list of congruence subgroups446</Returns>447<Description>448For an intersection of congruence subgroups, returns449the list of congruence subgroups forming this intersection.450For a canonical congruence subgroup returns a list of length451one containing that subgroup.452</Description>453</ManSection>454455<Example>456<![CDATA[457gap> DefiningCongruenceSubgroups(J);458[ <congruence subgroup CongruenceSubgroupGamma_0(4) in SL_2(Z)>,459<congruence subgroup CongruenceSubgroupGamma_1(6) in SL_2(Z)> ]460gap> P:=PrincipalCongruenceSubgroup(6);461<principal congruence subgroup of level 6 in SL_2(Z)>462gap> Q:=PrincipalCongruenceSubgroup(10);463<principal congruence subgroup of level 10 in SL_2(Z)>464gap> G:=IntersectionOfCongruenceSubgroups(Q,P);465<principal congruence subgroup of level 30 in SL_2(Z)>466gap> DefiningCongruenceSubgroups(G);467[ <principal congruence subgroup of level 30 in SL_2(Z)> ]468]]>469</Example>470471</Section>472473<!-- ********************************************************* -->474475<Section Label="CongMethods">476<Heading>Operations for congruence subgroups</Heading>477478&Congruence; installs several special methods for operations already479available in &GAP;.480481<ManSection>482<Oper Name="Random"483Label="one and two argument versions"484Arg="G"/>485<Oper Name="Random"486Arg="G m"/>487<Description>488For a congruence subgroup <A>G</A> in the category489<C>IsCongruenceSubgroup</C>, returns random element.490In the two-argument form, the second parameter will491control the absolute value of randomly selected492entries of the matrix.493</Description>494</ManSection>495496<Example>497<![CDATA[498gap> Random(G_2) in G_2;499true500gap> Random(G_8,2) in G_8;501true502]]>503</Example>504505506<ManSection>507<Oper Name="\in"508Arg="m G"/>509<Description>510It is easy to implement the membership test for511congruence subgroups and their intersections.512</Description>513</ManSection>514515<Example>516<![CDATA[517gap> \in([ [ 21, 10 ], [ 2, 1 ] ],G_2);518true519gap> \in([ [ 21, 10 ], [ 2, 1 ] ],G_8);520false521]]>522</Example>523524525<ManSection>526<Oper Name="CanEasilyCompareCongruenceSubgroups"527Arg="G H"/>528<Description>529For congruence subgroups <A>G,H</A> in the category530<C>IsCongruenceSubgroup</C>, returns <K>true</K> if531<A>G</A> and <A>H</A> are of the same type listed in532<Ref Func="PrincipalCongruenceSubgroup" /> -->533<Ref Func="CongruenceSubgroupGammaUpper1" />534and have the same535<Ref Func="LevelOfCongruenceSubgroup"/> or if <A>G</A> and <A>H</A>536are of the type <Ref Func="IntersectionOfCongruenceSubgroups"/> and537the groups from538<Ref Func="DefiningCongruenceSubgroups"/> are in one539to one correspondence, otherwise it returns <K>false</K>.540</Description>541</ManSection>542543544<Example>545<![CDATA[546gap> CanEasilyCompareCongruenceSubgroups(G_8,I);547false548]]>549</Example>550551<ManSection>552<Oper Name="IsSubset"553Arg="G H"/>554<Description>555&Congruence; provides methods for <C>IsSubset</C>556for congruence subgroups. <C>IsSubset</C> returns <K>true</K>557if <A>H</A> is a subset of <A>G</A>. These methods make it possible558to use <C>IsSubgroup</C> operation for congruence subgroups.559</Description>560</ManSection>561562563<Example>564<![CDATA[565gap> IsSubset(G_2,G_8);566true567gap> IsSubset(G_8,G_2);568false569gap> f:=[PrincipalCongruenceSubgroup,CongruenceSubgroupGamma1,CongruenceSubgroupGammaUpper1,CongruenceSubgroupGamma0,CongruenceSubgroupGammaUpper0];;570gap> g1:=List(f, t -> t(2));;571gap> g2:=List(f, t -> t(4));;572gap> for g in g2 do573> Print( List( g1, x -> IsSubgroup(x,g) ), "\n");574> od;575[ true, true, true, true, true ]576[ false, true, false, true, false ]577[ false, false, true, false, true ]578[ false, false, false, true, false ]579[ false, false, false, false, true ]580]]>581</Example>582583584<ManSection>585<Oper Name="Index"586Arg="G H"/>587<Description>588If a congruence subgroup <A>H</A> is a subgroup of a congruence589subgroup <A>G</A>, we can easily compute the index of <A>H</A> in590<A>G</A>, since we know the index of both subgroups in <M>SL_2(&ZZ;)</M>.591</Description>592</ManSection>593594<Example>595<![CDATA[596gap> Index(G_2,G_8);59732598]]>599</Example>600601</Section>602603</Chapter>604605606