  
  [1X2 [33X[0;0YConstruction of congruence subgroups[133X[101X
  
  [33X[0;0YThe  package  [5XCongruence[105X  provides  functions  to construct several types of
  canonical  congruence  subgroups  in  [22XSL_2(ℤ)[122X,  and  also intersections of a
  finite  number  of  such  subgroups.  They will return a matrix group in the
  category   [10XIsCongruenceSubgroup[110X,  which  is  defined  as  a  subcategory  of
  [10XIsMatrixGroup[110X,  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:[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XLoadPackage("congruence");[127X[104X
    [4X[28X-----------------------------------------------------------------------------[128X[104X
    [4X[28XLoading  Congruence 1.2.4 (Congruence subgroups of SL(2,Integers))[128X[104X
    [4X[28Xby Ann Dooms (http://homepages.vub.ac.be/~andooms),[128X[104X
    [4X[28X   Eric Jespers (http://homepages.vub.ac.be/~efjesper),[128X[104X
    [4X[28X   Olexandr Konovalov (https://alex-konovalov.github.io/), and[128X[104X
    [4X[28X   Helena Verrill (http://www.math.lsu.edu/~verrill).[128X[104X
    [4X[28Xmaintained by:[128X[104X
    [4X[28X   Ann Dooms (http://homepages.vub.ac.be/~andooms),[128X[104X
    [4X[28X   Olexandr Konovalov (https://alex-konovalov.github.io/), and[128X[104X
    [4X[28X   Helena Verrill (http://www.math.lsu.edu/~verrill).[128X[104X
    [4X[28XHomepage: https://gap-packages.github.io/congruence[128X[104X
    [4X[28XReport issues at https://github.com/gap-packages/congruence/issues[128X[104X
    [4X[28X-----------------------------------------------------------------------------[128X[104X
    [4X[28Xtrue[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  
  [1X2.1 [33X[0;0YConstruction of congruence subgroups[133X[101X
  
  [1X2.1-1 PrincipalCongruenceSubgroup[101X
  
  [33X[1;0Y[29X[2XPrincipalCongruenceSubgroup[102X( [3XN[103X ) [32X operation[133X
  
  [33X[0;0YReturns the principal congruence subgroup [22XΓ(N)[122X of level [3XN[103X in [22XSL_2(ℤ)[122X.[133X
  
  [33X[0;0YThis subgroup consists of all matrices of the form[133X
  
                           [1+N*a    N*b]
                           [  N*c  1+N*d]
  
  [33X[0;0Ywhere  [22Xa[122X,[22Xb[122X,[22Xc[122X,[22Xd[122X  are  integers.  The  returned  group  will have the property
  [2XIsPrincipalCongruenceSubgroup[102X ([14X2.2-1[114X).[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XG_8:=PrincipalCongruenceSubgroup(8);[127X[104X
    [4X[28X<principal congruence subgroup of level 8 in SL_2(Z)>[128X[104X
    [4X[25Xgap>[125X [27XIsGroup(G_8);[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XIsMatrixGroup(G_8);[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XDimensionOfMatrixGroup(G_8);[127X[104X
    [4X[28X2[128X[104X
    [4X[25Xgap>[125X [27XMultiplicativeNeutralElement(G_8);[127X[104X
    [4X[28X[ [ 1, 0 ], [ 0, 1 ] ][128X[104X
    [4X[25Xgap>[125X [27XOne(G);[127X[104X
    [4X[28X[ [ 1, 0 ], [ 0, 1 ] ][128X[104X
    [4X[25Xgap>[125X [27X[[1,2],[3,4]] in G_8;[127X[104X
    [4X[28Xfalse[128X[104X
    [4X[25Xgap>[125X [27X[[1,8],[8,65]] in G_8;[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XSL_2:=SL(2,Integers);[127X[104X
    [4X[28XSL(2,Integers)[128X[104X
    [4X[25Xgap>[125X [27XIsSubgroup(SL_2,G_8);[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X2.1-2 CongruenceSubgroupGamma0[101X
  
  [33X[1;0Y[29X[2XCongruenceSubgroupGamma0[102X( [3XN[103X ) [32X operation[133X
  
  [33X[0;0YReturns the congruence subgroup [22XΓ_0(N)[122X of level [3XN[103X in [22XSL_2(ℤ)[122X.[133X
  
  [33X[0;0YThis subgroup consists of all matrices of the form[133X
  
                           [a    b]
                           [N*c  d]
  
  [33X[0;0Ywhere  [22Xa[122X,[22Xb[122X,[22Xc[122X,[22Xd[122X  are  integers.  The  returned  group  will have the property
  [2XIsCongruenceSubgroupGamma0[102X ([14X2.2-2[114X).[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XG0_4:=CongruenceSubgroupGamma0(4);[127X[104X
    [4X[28X<congruence subgroup CongruenceSubgroupGamma_0(4) in SL_2(Z)>[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X2.1-3 CongruenceSubgroupGammaUpper0[101X
  
  [33X[1;0Y[29X[2XCongruenceSubgroupGammaUpper0[102X( [3XN[103X ) [32X operation[133X
  
  [33X[0;0YReturns the congruence subgroup [22XΓ^0(N)[122X of level [3XN[103X in [22XSL_2(ℤ)[122X.[133X
  
  [33X[0;0YThis subgroup consists of all matrices of the form[133X
  
                           [a  N*b]
                           [c    d]
  
  [33X[0;0Ywhere  [22Xa[122X,[22Xb[122X,[22Xc[122X,[22Xd[122X  are  integers.  The  returned  group  will have the property
  [2XIsCongruenceSubgroupGammaUpper0[102X ([14X2.2-3[114X).[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XGU0_2:=CongruenceSubgroupGammaUpper0(2);[127X[104X
    [4X[28X<congruence subgroup CongruenceSubgroupGamma^0(2) in SL_2(Z)>[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X2.1-4 CongruenceSubgroupGamma1[101X
  
  [33X[1;0Y[29X[2XCongruenceSubgroupGamma1[102X( [3XN[103X ) [32X operation[133X
  
  [33X[0;0YReturns the congruence subgroup [22XΓ_1(N)[122X of level [3XN[103X in [22XSL_2(ℤ)[122X.[133X
  
  [33X[0;0YThis subgroup consists of all matrices of the form[133X
  
                           [1+N*a      b]
                           [  N*c  1+N*d]
  
  [33X[0;0Ywhere  [22Xa[122X,[22Xb[122X,[22Xc[122X,[22Xd[122X  are  integers.  The  returned  group  will have the property
  [2XIsCongruenceSubgroupGamma1[102X ([14X2.2-4[114X).[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XG1_6:=CongruenceSubgroupGamma1(6);[127X[104X
    [4X[28X<congruence subgroup CongruenceSubgroupGamma_1(6) in SL_2(Z)>[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X2.1-5 CongruenceSubgroupGammaUpper1[101X
  
  [33X[1;0Y[29X[2XCongruenceSubgroupGammaUpper1[102X( [3XN[103X ) [32X operation[133X
  
  [33X[0;0YReturns the congruence subgroup [22XΓ^1(N)[122X of level [3XN[103X in [22XSL_2(ℤ)[122X.[133X
  
  [33X[0;0YThis subgroup consists of all matrices of the form[133X
  
                           [1+N*a    N*b]
                           [    c  1+N*d]
  
  [33X[0;0Ywhere  [22Xa[122X,[22Xb[122X,[22Xc[122X,[22Xd[122X  are  integers.  The  returned  group  will have the property
  [2XIsCongruenceSubgroupGammaUpper1[102X ([14X2.2-5[114X).[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XGU1_4:=CongruenceSubgroupGammaUpper1(4);[127X[104X
    [4X[28X<congruence subgroup CongruenceSubgroupGamma^1(4) in SL_2(Z)>[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X2.1-6 IntersectionOfCongruenceSubgroups[101X
  
  [33X[1;0Y[29X[2XIntersectionOfCongruenceSubgroups[102X( [3XG1[103X, [3XG2[103X, [3X...[103X, [3XGN[103X ) [32X function[133X
  [33X[1;0Y[29X[2XIntersection[102X( [3XG1[103X, [3XG2[103X, [3X...[103X, [3XGN[103X ) [32X function[133X
  
  [33X[0;0YReturns 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 [10XIntersectionOfCongruenceSubgroups[110X, since it
  will be called automatically from [10XIntersection[110X.[133X
  
  [33X[0;0YThe       returned       group       will       have       the      property
  [2XIsIntersectionOfCongruenceSubgroups[102X ([14X2.2-6[114X).[133X
  
  [33X[0;0YThe  list of congruence subgroups that form the intersection can be obtained
  using  [2XDefiningCongruenceSubgroups[102X ([14X2.3-3[114X). 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.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XI:=IntersectionOfCongruenceSubgroups(G0_4,GU1_4);[127X[104X
    [4X[28X<principal congruence subgroup of level 4 in SL_2(Z)>[128X[104X
    [4X[25Xgap>[125X [27XJ:=IntersectionOfCongruenceSubgroups(G0_4,G1_6);[127X[104X
    [4X[28X<intersection of congruence subgroups of resulting level 12 in SL_2(Z)>[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  
  [1X2.2 [33X[0;0YProperties of congruence subgroups[133X[101X
  
  [33X[0;0YA  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 [5XCongruence[105X algorithms. Note that they do not
  provide  an  actual  test  whether  a  certain  matrix group is a congruence
  subgroup or not.[133X
  
  [1X2.2-1 IsPrincipalCongruenceSubgroup[101X
  
  [33X[1;0Y[29X[2XIsPrincipalCongruenceSubgroup[102X( [3XG[103X ) [32X property[133X
  
  [33X[0;0YFor  a  congruence  subgroup [3XG[103X in the category [10XIsCongruenceSubgroup[110X, returns
  [9Xtrue[109X if [3XG[103X was constructed by [2XPrincipalCongruenceSubgroup[102X ([14X2.1-1[114X) (or reduced
  to one as a result of an intersection) and returns [9Xfalse[109X otherwise.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XIsPrincipalCongruenceSubgroup(G_8);[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XIsPrincipalCongruenceSubgroup(G0_4);[127X[104X
    [4X[28Xfalse[128X[104X
    [4X[25Xgap>[125X [27XIsPrincipalCongruenceSubgroup(I);[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X2.2-2 IsCongruenceSubgroupGamma0[101X
  
  [33X[1;0Y[29X[2XIsCongruenceSubgroupGamma0[102X( [3XG[103X ) [32X property[133X
  
  [33X[0;0YFor  a  congruence  subgroup [3XG[103X in the category [10XIsCongruenceSubgroup[110X, returns
  [9Xtrue[109X if [3XG[103X was constructed by [2XCongruenceSubgroupGamma0[102X ([14X2.1-2[114X) (or reduced to
  one as a result of an intersection) and returns [9Xfalse[109X otherwise.[133X
  
  [1X2.2-3 IsCongruenceSubgroupGammaUpper0[101X
  
  [33X[1;0Y[29X[2XIsCongruenceSubgroupGammaUpper0[102X( [3XG[103X ) [32X property[133X
  
  [33X[0;0YFor  a  congruence  subgroup [3XG[103X in the category [10XIsCongruenceSubgroup[110X, returns
  [9Xtrue[109X  if  [3XG[103X  was  constructed  by  [2XCongruenceSubgroupGammaUpper0[102X ([14X2.1-3[114X) (or
  reduced to one as a result of an intersection) and returns [9Xfalse[109X otherwise.[133X
  
  [1X2.2-4 IsCongruenceSubgroupGamma1[101X
  
  [33X[1;0Y[29X[2XIsCongruenceSubgroupGamma1[102X( [3XG[103X ) [32X property[133X
  
  [33X[0;0YFor  a  congruence  subgroup [3XG[103X in the category [10XIsCongruenceSubgroup[110X, returns
  [9Xtrue[109X if [3XG[103X was constructed by [2XCongruenceSubgroupGamma1[102X ([14X2.1-4[114X) (or reduced to
  one as a result of an intersection) and returns [9Xfalse[109X otherwise.[133X
  
  [1X2.2-5 IsCongruenceSubgroupGammaUpper1[101X
  
  [33X[1;0Y[29X[2XIsCongruenceSubgroupGammaUpper1[102X( [3XG[103X ) [32X property[133X
  
  [33X[0;0YFor  a  congruence  subgroup [3XG[103X in the category [10XIsCongruenceSubgroup[110X, returns
  [9Xtrue[109X  if  [3XG[103X  was  constructed  by  [2XCongruenceSubgroupGammaUpper1[102X ([14X2.1-5[114X) (or
  reduced to one as a result of an intersection) and returns [9Xfalse[109X otherwise.[133X
  
  [1X2.2-6 IsIntersectionOfCongruenceSubgroups[101X
  
  [33X[1;0Y[29X[2XIsIntersectionOfCongruenceSubgroups[102X( [3XG[103X ) [32X property[133X
  
  [33X[0;0YFor  a  congruence  subgroup [3XG[103X in the category [10XIsCongruenceSubgroup[110X, returns
  [9Xtrue[109X  if  [3XG[103X was constructed by [2XIntersectionOfCongruenceSubgroups[102X ([14X2.1-6[114X) and
  without  being  one  of  the  canonical  congruence  subgroups, otherwise it
  returns [9Xfalse[109X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XIsIntersectionOfCongruenceSubgroups(I);[127X[104X
    [4X[28Xfalse[128X[104X
    [4X[25Xgap>[125X [27XIsIntersectionOfCongruenceSubgroups(J);[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  
  [1X2.3 [33X[0;0YAttributes of congruence subgroups[133X[101X
  
  [33X[0;0YThe next three attributes store key properties of congruence subgroups.[133X
  
  [1X2.3-1 LevelOfCongruenceSubgroup[101X
  
  [33X[1;0Y[29X[2XLevelOfCongruenceSubgroup[102X( [3XG[103X ) [32X attribute[133X
  
  [33X[0;0YStores  the  level of the congruence subgroup [3XG[103X. 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.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XLevelOfCongruenceSubgroup(G_8);[127X[104X
    [4X[28X8[128X[104X
    [4X[25Xgap>[125X [27XLevelOfCongruenceSubgroup(G1_6);[127X[104X
    [4X[28X6[128X[104X
    [4X[25Xgap>[125X [27XLevelOfCongruenceSubgroup(I);[127X[104X
    [4X[28X4[128X[104X
    [4X[25Xgap>[125X [27XLevelOfCongruenceSubgroup(J);[127X[104X
    [4X[28X12[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X2.3-2 IndexInSL2Z[101X
  
  [33X[1;0Y[29X[2XIndexInSL2Z[102X( [3XG[103X ) [32X attribute[133X
  
  [33X[0;0YStores the index of the congruence subgroup [3XG[103X in [22XSL_2(ℤ)[122X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XIndexInSL2Z(G_8);[127X[104X
    [4X[28X384[128X[104X
    [4X[25Xgap>[125X [27XG_2:=PrincipalCongruenceSubgroup(2);[127X[104X
    [4X[28X<principal congruence subgroup of level 2 in SL_2(Z)>[128X[104X
    [4X[25Xgap>[125X [27XIndexInSL2Z(G_2);[127X[104X
    [4X[28X12[128X[104X
    [4X[25Xgap>[125X [27XIndexInSL2Z(GU1_4);[127X[104X
    [4X[28X12[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X2.3-3 DefiningCongruenceSubgroups[101X
  
  [33X[1;0Y[29X[2XDefiningCongruenceSubgroups[102X( [3XG[103X ) [32X attribute[133X
  [6XReturns:[106X  [33X[0;10Ylist of congruence subgroups[133X
  
  [33X[0;0YFor  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.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XDefiningCongruenceSubgroups(J);[127X[104X
    [4X[28X[ <congruence subgroup CongruenceSubgroupGamma_0(4) in SL_2(Z)>,[128X[104X
    [4X[28X  <congruence subgroup CongruenceSubgroupGamma_1(6) in SL_2(Z)> ][128X[104X
    [4X[25Xgap>[125X [27XP:=PrincipalCongruenceSubgroup(6);[127X[104X
    [4X[28X<principal congruence subgroup of level 6 in SL_2(Z)>[128X[104X
    [4X[25Xgap>[125X [27XQ:=PrincipalCongruenceSubgroup(10); [127X[104X
    [4X[28X<principal congruence subgroup of level 10 in SL_2(Z)>[128X[104X
    [4X[25Xgap>[125X [27XG:=IntersectionOfCongruenceSubgroups(Q,P);  [127X[104X
    [4X[28X<principal congruence subgroup of level 30 in SL_2(Z)>[128X[104X
    [4X[25Xgap>[125X [27XDefiningCongruenceSubgroups(G);[127X[104X
    [4X[28X[ <principal congruence subgroup of level 30 in SL_2(Z)> ] [128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  
  [1X2.4 [33X[0;0YOperations for congruence subgroups[133X[101X
  
  [33X[0;0Y[5XCongruence[105X installs several special methods for operations already available
  in [5XGAP[105X.[133X
  
  [1X2.4-1 Random[101X
  
  [33X[1;0Y[29X[2XRandom[102X( [3XG[103X ) [32X operation[133X
  [33X[1;0Y[29X[2XRandom[102X( [3XG[103X, [3Xm[103X ) [32X operation[133X
  
  [33X[0;0YFor  a  congruence  subgroup [3XG[103X in the category [10XIsCongruenceSubgroup[110X, returns
  random  element. In the two-argument form, the second parameter will control
  the absolute value of randomly selected entries of the matrix.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XRandom(G_2) in G_2;[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XRandom(G_8,2) in G_8;[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X2.4-2 \in[101X
  
  [33X[1;0Y[29X[2X\in[102X( [3Xm[103X, [3XG[103X ) [32X operation[133X
  
  [33X[0;0YIt  is  easy  to  implement the membership test for congruence subgroups and
  their intersections.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27X\in([ [ 21, 10 ], [ 2, 1 ] ],G_2);[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27X\in([ [ 21, 10 ], [ 2, 1 ] ],G_8);[127X[104X
    [4X[28Xfalse[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X2.4-3 CanEasilyCompareCongruenceSubgroups[101X
  
  [33X[1;0Y[29X[2XCanEasilyCompareCongruenceSubgroups[102X( [3XG[103X, [3XH[103X ) [32X operation[133X
  
  [33X[0;0YFor  congruence  subgroups [3XG,H[103X in the category [10XIsCongruenceSubgroup[110X, returns
  [9Xtrue[109X  if  [3XG[103X and [3XH[103X are of the same type listed in [2XPrincipalCongruenceSubgroup[102X
  ([14X2.1-1[114X)   -->   [2XCongruenceSubgroupGammaUpper1[102X  ([14X2.1-5[114X)  and  have  the  same
  [2XLevelOfCongruenceSubgroup[102X   ([14X2.3-1[114X)   or   if  [3XG[103X  and  [3XH[103X  are  of  the  type
  [2XIntersectionOfCongruenceSubgroups[102X    ([14X2.1-6[114X)    and    the    groups    from
  [2XDefiningCongruenceSubgroups[102X  ([14X2.3-3[114X)  are  in  one  to  one  correspondence,
  otherwise it returns [9Xfalse[109X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XCanEasilyCompareCongruenceSubgroups(G_8,I);[127X[104X
    [4X[28Xfalse[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X2.4-4 IsSubset[101X
  
  [33X[1;0Y[29X[2XIsSubset[102X( [3XG[103X, [3XH[103X ) [32X operation[133X
  
  [33X[0;0Y[5XCongruence[105X  provides methods for [10XIsSubset[110X for congruence subgroups. [10XIsSubset[110X
  returns  [9Xtrue[109X  if  [3XH[103X is a subset of [3XG[103X. These methods make it possible to use
  [10XIsSubgroup[110X operation for congruence subgroups.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XIsSubset(G_2,G_8);[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XIsSubset(G_8,G_2);[127X[104X
    [4X[28Xfalse[128X[104X
    [4X[25Xgap>[125X [27Xf:=[PrincipalCongruenceSubgroup,CongruenceSubgroupGamma1,CongruenceSubgroupGammaUpper1,CongruenceSubgroupGamma0,CongruenceSubgroupGammaUpper0];;[127X[104X
    [4X[25Xgap>[125X [27Xg1:=List(f, t -> t(2));;[127X[104X
    [4X[25Xgap>[125X [27Xg2:=List(f, t -> t(4));;[127X[104X
    [4X[25Xgap>[125X [27Xfor g in g2 do[127X[104X
    [4X[25X>[125X [27XPrint( List( g1, x -> IsSubgroup(x,g) ), "\n");[127X[104X
    [4X[25X>[125X [27Xod;[127X[104X
    [4X[28X[ true, true, true, true, true ][128X[104X
    [4X[28X[ false, true, false, true, false ][128X[104X
    [4X[28X[ false, false, true, false, true ][128X[104X
    [4X[28X[ false, false, false, true, false ][128X[104X
    [4X[28X[ false, false, false, false, true ][128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X2.4-5 Index[101X
  
  [33X[1;0Y[29X[2XIndex[102X( [3XG[103X, [3XH[103X ) [32X operation[133X
  
  [33X[0;0YIf  a congruence subgroup [3XH[103X is a subgroup of a congruence subgroup [3XG[103X, we can
  easily  compute  the  index  of  [3XH[103X  in  [3XG[103X,  since  we know the index of both
  subgroups in [22XSL_2(ℤ)[122X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27XIndex(G_2,G_8);[127X[104X
    [4X[28X32[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
