############################################################################# ## #W cong.gi The Congruence package Ann Dooms #W Eric Jespers #W Olexandr Konovalov ## ## #############################################################################
############################################################################# ## ## Constructors of congruence subgroups
java.lang.StringIndexOutOfBoundsException: Range [0, 13) out of bounds for length 0
[ IsPosInt ],
, ;
type : and
IsGroup and
IsAttributeStoringRep and
IsFinitelyGeneratedGroup and
IsMatrixGroup and
oup);
IsCongruenceSubgroup)
( G ,
DimensionOfMatrixGroup ( ,type,
, 2java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
,truejava.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
,falsejava.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
LevelOfCongruenceSubgroup, n,
IsPrincipalCongruenceSubgroup, true,
IsIntersectionOfCongruenceSubgroups, IsCongruenceSubgroupGamma1, false, IsCongrjava.lang.StringIndexOutOfBoundsException: Range [74, 72) out of bounds for length 80
(CongruenceSubgroupGamma0for"
IsCongruenceSubgroupGammaMN)
(njava.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15 end);
InstallMethod( CongruenceSubgroupGamma0, "for and
[ and function(n)
local type, G;
type := NewType( FamilyObj([ );
IsGroup and
and
and
IsMatrixGroup and
);
G : (;
IsIntegerMatrixGroup, true,
DimensionOfMatrixGroup, 2,
IsFinite false,
,true,
IsFinite false,
LevelOfCongruenceSubgroup, n,
IsPrincipalCongruenceSubgroupIsIntersectionOfCongruenceSubgroups,false,
IsIntersectionOfCongruenceSubgroups, false,
IsCongruenceSubgroupGamma0IsCongruenceSubgroupGamma1 , IsCongruenceSubgroupGammaUpper1, false,
IsCongruenceSubgroupGamma1, false, IsCongruenceSubgroupGammaUpper1, false,
java.lang.StringIndexOutOfBoundsException: Range [4, 1) out of bounds for length 13
G; end);
[ ] function() function()
local type, G;
type := NewType( FamilyObj type :=NewType([[,][,]],
IsGroup and
and
andjava.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 50
IsMatrixGroup and
oup)java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
:=rec)
(G,type,
DimensionOfMatrixGroup,
OneImmutable, [[1,0],[0,1]],
true,
IsFinite, OneImmutable, [1,],01,
IsIntegerMatrixGroup, tru, true,
ceSubgroup, false,
IsIntersectionOfCongruenceSubgroups,
IsCongruenceSubgroupGamma0, false, IsCongruenceSubgroupGammaUpper0, , false,
IsCongruenceSubgroupGamma1, false, IsCongruenceSubgroupGammaUpper1, false,
IsCongruenceSubgroupGamma0false,IsCongruenceSubgroupGammaUpper0 truejava.lang.StringIndexOutOfBoundsException: Index 79 out of bounds for length 79
return G; end);
InstallMethod( CongruenceSubgroupGamma1, "for java.lang.StringIndexOutOfBoundsException: Index 53 out of bounds for length 13
[ ], function(n)
local type, G;
type := NewType( java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 17
IsGroupjava.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
java.lang.StringIndexOutOfBoundsException: Range [47, 42) out of bounds for length 47
IsMatrixGroup and
);
: rec)
ObjectifyWithAttributes( G, type,
IsCongruenceSubgroup);
OneImmutable, :=) java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
IsIntegerMatrixGroup ,
IsFinite, false,DimensionOfMatrixGroup2,
,n,
IsPrincipalCongruenceSubgroupIsIntegerMatrixGroup true,
, ,
IsCongruenceSubgroupGamma0, false, IsCongruenceSubgroupGammaUpper0, false
java.lang.StringIndexOutOfBoundsException: Range [34, 32) out of bounds for length 40
,java.lang.StringIndexOutOfBoundsException: Range [73, 71) out of bounds for length 79
turnG;
java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 0
integer",
[ functionnjava.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15 function( and
local typeIandjava.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 50
type: (FamilyObj[[,][0,1]]java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
IsGroup and
IsAttributeStoringRep
DimensionOfMatrixGroupjava.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
IsMatrixGroupand
IsFinite,false,
: )
ObjectifyWithAttributes( G, type,
IsPrincipalCongruenceSubgroup,false,
java.lang.StringIndexOutOfBoundsException: Range [19, 18) out of bounds for length 34
, ,
,falsejava.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
,njava.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
InstallMethod ," ;
IsIntersectionOfCongruenceSubgroups, false,
IsCongruenceSubgroupGamma0, false, IsCongruenceSubgroupGammaUpper0, false,
IsGroup and
IsAttributeStoringRep and
java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 13 end)
llMethod(CongruenceSubgroupGammaMN"two positive "
ObjectifyWithAttributes ,type, function(m,n)
local type, G;
type := OneImmutable,[1,][,]]
IsGroup,true,
IsAttributeStoringRepLevelOfCongruenceSubgroup *,
IsFinitelyGeneratedGroup and
IsMatrixGroupIsIntersectionOfCongruenceSubgroups falsejava.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
);
: (;
returnG;
, 2java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
,1]]java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
, true,
IsFinite,,
LevelOfCongruenceSubgroup, m*n,
LevelOfCongruenceSubgroupGammaMN, [m,n]IsGroup and
IsPrincipalCongruenceSubgroup, false,
IsAttributeStoringRep and
IsCongruenceSubgroupGamma0, false, IsCongruenceSubgroupGammaUpper0, IsFinitelyGeneratedGroup
IsMatrixGroup
IsCongruenceSubgroupGammaMNIsCongruenceSubgroup; ifnot ForAll( arg,IsCongruenceSubgroup)then end;
InstallGlobalFunction( IntersectionOfCongruenceSubgroups,
# First create list toeliminateevident of .
#java.lang.StringIndexOutOfBoundsException: Index 72 out of bounds for length 72
= NewType ([[0,01])
IsGroup and
IsAttributeStoringRep and
IsFinitelyGeneratedGroup and
IsMatrixGroup and
IsCongruenceSubgroup); if notForAll(arg,IsCongruenceSubgroupthen
Error("# - we do not add fi;
# # Then we eliminate evident inclusions of one subgroup into another: # - since intersection is associative, if we can intersect the group T which # is to be added with another subgroup K already contained in alglist, and
theresultis ofthe congruence replace by # the result of intersection of K and T # - we do not add a subgroup T to the list of defining subgroups, if alglist # already contains another subgroup K such that K is in T. pos:=PositionProperty( arglist, K -> =(, K- # subgroups K such that T is in K, we add T and remove all these K.
arglist: ]java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18
H in do if java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 14
in ( H java.lang.StringIndexOutOfBoundsException: Range [52, 53) out of bounds for length 52
pos=(arglist,K >
CanReduceIntersectionOfCongruenceSubgroups in[1 .Lengtharglist
(arglist[i],T)then
pos]( [os] T ) else if ForAll( arglist, K -> not CanEasilyCompareCongruenceSubgroups( K, T ) ) and
ForAll( arglist, K -> not IsSubgroup( T, K ) ) then for i in [ 1 .. Length(arglist) ] do if IsSubgroup( arglist[i], T ) then
Unbind( arglist[i] );
java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
od;
;
pos:=PositionProperty( arglist, K -> fi;
;
od; else
pos( arglist,K
java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 17
java.lang.StringIndexOutOfBoundsException: Index 76 out of bounds for length 25
arglist[os]=ntersection [pos], ); else
( arglist, K - CanEasilyCompareCongruenceSubgroupsK ) )
ForAll( arglist, K -> if (arglist[] )then for i fijava.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17 if IsSubgroup( arglist[i], H ) Addarglist, H );
Unbind( arglist[i] ); fi;
od;
arglist ;
Add(arglist, ; fi; fi; fijava.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
od; # if the list of defining subgroups was reduced # to a single subgroup, we return this subgroup if java.lang.StringIndexOutOfBoundsException: Range [39, 33) out of bounds for length 39
return arglist[1]; fi; # otherwise we sort the list of defining subgroups:(arglist, # types of subgroups are sorted in the following way: # - IsCongruenceSubgroupGamma0
# - IsCongruenceSubgroupGamma1 # - IsCongruenceSubgroupGammaUpper1 # - IsPrincipalCongruenceSubgroup # and subgroups of the same type are sorted by ascending level
Sort( arglist, function(X,Y) CongruenceSubgroup)<LevelOfCongruenceSubgroup))
local f, t;
f=IsCongruenceSubgroupGamma0IsCongruenceSubgroupGammaUpper0,,IsPrincipalCongruenceSubgroup
return n := Lcm( List( arglist, H -java.lang.StringIndexOutOfBoundsException: Range [60, 59) out of bounds for length 88
( ObjectifyWithAttributes ,java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
LevelOfCongruenceSubgroup)<LevelOfCongruenceSubgroupY) ); end );
H(H ;
G :=IsFinite,falsejava.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
ObjectifyWithAttributes( G, type,
DimensionOfMatrixGroup, 2,
OneImmutable, [[1,0],[0,1]],
IsIntegerMatrixGroup, true,
IsFinite, false,
LevelOfCongruenceSubgroup n
java.lang.StringIndexOutOfBoundsException: Range [34, 32) out of bounds for length 40
InstallMethod DefiningCongruenceSubgroups"for "java.lang.StringIndexOutOfBoundsException: Index 71 out of bounds for length 71
IsCongruenceSubgroupGamma0 IsCongruenceSubgroupGammaUpper0,falsejava.lang.StringIndexOutOfBoundsException: Index 80 out of bounds for length 80
,false,IsCongruenceSubgroupGammaUpper1falsejava.lang.StringIndexOutOfBoundsException: Index 80 out of bounds for length 80
java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 7
return G; end);
InstallMethod( DefiningCongruenceSubgroups, "for java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 1
] function(G)
ubgroups()then
return [G]; fi; end)##W cong.gi The Congruence package Ann Dooms
############################################################################# ## ## Methods for PrintObj and ViewObj for congruence subgroups
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 0
[ ,
[ IsPrincipalCongruenceSubgroup ], 0, function java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17 " congruence subgroup of level"
LevelOfCongruenceSubgroup IsGroup end );
InstallMethod(PrintObjjava.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24 forcongruence"
[IsPrincipalCongruenceSubgroup , 0, function( G )
Print( " OneImmutable [10,[,],
() "") end );
InstallMethod(PrintObj, "for CongruenceSubgroupGamma0 and
[ IsFinitelyGeneratedGroupand
java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 6 function )
Print "ongruenceSubgroupGamma0"
LevelOfCongruenceSubgroup(G OneImmutable [,][,1], end );
IsFinite java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
InstallMethod ViewObj, "for CongruenceSubgroupGammaUpper0 congruencesubgroup",
[ IsCongruenceSubgroupGammaUpper0 ], 0, function( G ) end);
LevelOfCongruenceSubgroupG," SL_2()") end );
InstallMethod(PrintObj "for CongruenceSubgroupGammaUpper0
[ IsCongruenceSubgrou) 0, function( G )
ObjectifyWithAttributes(G,,
LevelOfCongruenceSubgroup ,[[1,0,01] end );
nstallMethod , "or congruence subgroup,
[ java.lang.StringIndexOutOfBoundsException: Range [35, 32) out of bounds for length 35 0, function( G )
( " CongruenceSubgroupGamma_1(,java.lang.StringIndexOutOfBoundsException: Index 64 out of bounds for length 64
LevelOfCongruenceSubgroup(G), ") in SL_2(Z)>" );
)
IsFinitelyGeneratedGroup "for CongruenceSubgroupGamma1congruence subgroup"
[ ], 0, =rec)
ObjectifyWith(G, ,
Print( " OneImmutable, [[1java.lang.StringIndexOutOfBoundsException: Range [19, 18) out of bounds for length 34
(G),"") end ); , ,
InstallMethod( ViewObj, "or congruence subgroup",
[ IsCongruenceSubgroupGammaUpper1 ] ,true,IsCongruenceSubgroupGammaUpper1,java.lang.StringIndexOutOfBoundsException: Index 79 out of bounds for length 79
, function ()
Print("congruencesubgroup CongruenceSubgroupGamma1(
LevelOfCongruenceSubgroup(G), ") java.lang.StringIndexOutOfBoundsException: Range [0, 48) out of bounds for length 33 end );
InstallMethod( PrintObj, "for CongruenceSubgroupGammaUpper1java.lang.StringIndexOutOfBoundsException: Range [50, 49) out of bounds for length 60
[ java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
, function( G )
Print( "CongruenceSubgroupGammaUpper1(",
(,"");
)
InstallMethod)java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6 "for ,IsPosInt ],
] 0, function( G )
Print( "< IsAttributeStoringRep java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47
(G)1] ",
LevelOfCongruenceSubgroupGammaMN[2," SL_2()")
)
lMethod(ViewObj, "or intersection of congruence subgroups"
[ IsIntersectionOfCongruenceSubgroups] end) function( G )
Print( (arg java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
type := NewType( FamilyObj1,],0,], end );
InstallMethod( PrintObj, "or of subgroups"
[ups , 0java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6
(G java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
local i, k;
k := Length(DefiningCongruenceSubgroups(G));
Print( "IntersectionOfCongruenceSubgroups( \n" ); for i in [ 1 .. k-1 ] do
Print( " ", DefiningCongruenceSubgroups(G)[i]#First createa list arglistto evidentrepetitions ofsubgroups
od;
Print( " ", DefiningCongruenceSubgroups(#java.lang.StringIndexOutOfBoundsException: Index 80 out of bounds for length 80 end );# the result of intersection of K and T
############################################################################# ## ## Membership tests for congruence subgroups
(\n "a2x2 matrix and a principal congruence subgroup"java.lang.StringIndexOutOfBoundsException: Index 59 out of bounds for length 59
:PositionProperty , - 0, function( m <> then
local n; if not DimensionsMat( m (arglist >not CanEasilyCompareCongruenceSubgroups(,
return falsejava.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19 elif DeterminantMat(m)<>1then IsSubgroup(arglist[] )
return ; else
n := od;
returnIsInt(([]1-)n )
IsInt(m[1][2]/n) and
IsInt(m[2][1 (arglist, T);
IsInt( (m[ ; fi; end);
InstallMethod( \in, for a2matrix andacongruencesubgroupCongruenceSubgroupGamma0,
IsMatrix, ]java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45 0, function( m, G )
local n; if not DimensionsMat( m )( ]
returnfalsejava.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19 elif DeterminantMat(java.lang.StringIndexOutOfBoundsException: Range [0, 25) out of bounds for length 15
java.lang.StringIndexOutOfBoundsException: Range [24, 21) out of bounds for length 21 elsefijava.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
n = LevelOfCongruenceSubgroup(G)
return ( ) =1then
;java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9 end); - IsCongruenceSubgroupGamma0
InstallMethod( \in "for a 2x2 matrix and a congruence subgroup CongruenceSubgroupGammaUpper0",
[Matrix ], 0,
[ IsMatr, IsCongruenceSubgroupGammaUpper0,
local n; ifnotDimensionsMat( ) 2,]
return false; elif DeterminantMat(m)<ifnot DimensionsMat m = 22
return false;
n := LevelOfCongruenceSubgroup false;
return IsInt(m[1][2]/n); fi; end);
InstallMethod( \in, "for a 2x2 matrix and a congruence subgroup CongruenceSubgroupGamma1",
[ IsMatrix, IsCongruenceSubgroupGamma1 ], 0, function( m, G )
local n; if not DimensionsMat( m ) = [2,2] then
return false; elif DeterminantMat(m)<>1then
return false; else
n := LevelOfCongruenceSubgroup(G);
return IsInt( (m[1][1]-1)/n ) and
IsInt( m[2][1]/n ) and
IsInt( (m[2][2]-1)/n ); fi; end);
InstallMethod( \in, "for a 2x2 matrix and a congruence subgroup CongruenceSubgroupGammaUpper1",
[ IsMatrix, IsCongruenceSubgroupGammaUpper1 ], 0, function( m, G )
local n; if not DimensionsMat( m ) = [2,2] then
return false; elif DeterminantMat(m)<>1then
return false; else
n := LevelOfCongruenceSubgroup(G);
return IsInt( (m[1][1]-1)/n ) and
IsInt( m[1][2]/n ) and
IsInt( (m[2][2]-1)/n ); fi; end);
InstallMethod( \in, "for a 2x2 matrix and a congruence subgroup
[IsMatrix,IsCongruenceSubgroupGammaMN] " acongruence subgroup andCongruenceSubgroupGammaUpper0, function( [ IsCongruenceSubg,IsCongruenceSubgroupGammaUpper0],
local m, n; if not DimensionsMat( mat ) = [2,2local T;
return false; elif returnForAll(DefiningCongruenceSubgroups(G,T > IsSubset(,))java.lang.StringIndexOutOfBoundsException: Index 74 out of bounds for length 74
return false; else
m := LevelOfCongruenceSubgroupGammaMN(G)[1];
n := LevelOfCongruenceSubgroupGammaMN(G)[2];
return IsInt( (mat[1][1]-1)/m ) and
IsInt(mat[1][2]/m) and
IsInt(mat[2][1]/n) and
IsInt( ([2]2]1/n ; fi; end);
InstallMethod( \in, "for an intersection of congruence subgroups",
[ IsMatrix, java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 24 0, function( m, G )
local ; if not DimensionsMat( m ) = [2, 0,
return false; elifDeterminantMat(m)<1
return false; else
return ForAll( DefiningCongruenceSubgroups(G), H -> m in H ); fi; end);
############################################################################# ## ## Installing special methods for congruence subgroups ## for some general methods installed in GAP for matrix groups
InstallMethod( \=, "for a pair of congruence subgroups",
[ IsCongruenceSubgroup # here we can check only sufficient conditions, and they are not 0, function( G ifForAll (H) -
java.lang.StringIndexOutOfBoundsException: Range [13, 12) out of bounds for length 18 else
TryNextMethod(); fi; end);
InstallMethod( IsSubset, "for a natural SL_2(Z) and a if ForAll( DefiningCongruenceSubgroups ( (H,DH- (DH
[ IsNaturalSL, IsCongruenceSubgroup ], 0, function( G, H )
return MultiplicativeNeutralElement(java.lang.StringIndexOutOfBoundsException: Range [0, 41) out of bounds for length 8 end)
InstallMethod( IsSubset, "for a congruence subgroup and a principal congruence subgroup",
[ IsCongruenceSubgroup, IsPrincipalCongruenceSubgroup ], 0, function( G, H )
local T; if IsIntersectionOfCongruenceSubgroups(G) then
return ForAll( DefiningCongruenceSubgroups(G), T -> IsSubset(T,H) ); elif IsPrincipalCongruenceSubgroup(G) or
IsCongruenceSubgroupGamma1(G) or IsCongruenceSubgroupGammaUpper1(G) or
IsCongruenceSubgroupGamma0(G) or IsCongruenceSubgroupGammaUpper0(G) then
return IsInt( LevelOfCongruenceSubgroup(H) / LevelOfCongruenceSubgroup(G) ); else # for a case of another type of congruence subgroup
TryNextMethod(); fi; end);
InstallMethod( IsSubset, "for a congruence subgroup and CongruenceSubgroupGamma1",
[ IsCongruenceSubgroup, end; 0, function( G, H )
local T; if IsIntersectionOfCongruenceSubgroups(G) then
return ForAll( DefiningCongruenceSubgroups(G), T -> IsSubset(T,H) ); elif IsPrincipalCongruenceSubgroup(G) or
IsCongruenceSubgroupGammaUpper1(G) or IsCongruenceSubgroupGammaUpper0(G) then
return false; elif #############################################################################
return IsInt( java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 0
# for a case of another type of congruence subgroup
TryNextMethod(); fi; end);
InstallMethod( IsSubset, "for a congruence subgroup and CongruenceSubgroupGammaUpper1",
[ IsCongruenceSubgroup, IsCongruenceSubgroupGammaUpper1 ], 0, function( G, H )
local T; if IsIntersectionOfCongruenceSubgroups(G) then
return ForAll( DefiningCongruenceSubgroups(G), T -> IsSubset(T,H) ); elif IsPrincipalCongruenceSubgroup(G) or
IsCongruenceSubgroupGamma1(G) or IsCongruenceSubgroupGamma0(G) then
return false; elif0java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6
return IsInt( LevelOfCongruenceSubgroup #Case at one an congruencesubgroups else # for a case of another type of congruence subgroup
TryNextMethod(); fi; end);
InstallMethod( IsSubset, "for a congruence subgroup and CongruenceSubgroupGamma0",
[ IsCongruenceSubgroup, IsCongruenceSubgroupGamma0elif (G)and (H)then 0, function( G, H PrincipalCongruenceSubgroup(LevelOfCongruenceSubgroup(,
local T; ifIsIntersectionOfCongruenceSubgroups then
return ForAll( DefiningCongruenceSubgroups(G), T -> IsSubset(T,H) ); elif IsPrincipalCongruenceSubgroup(G) or
IsCongruenceSubgroupGamma1(G) or elif IsCongruenceSubgroupGamma1(G) and IsCongruenceSubgroupGamma1
return false; elif IsCongruenceSubgroupGamma0(G) then
IsInt( LevelOfCongruenceSubgroupH LevelOfCongruenceSubgroup(G)); elifjava.lang.StringIndexOutOfBoundsException: Range [41, 40) out of bounds for length 87 # for a case of another type of congruence subgroup
TryNextMethod(); fi; end);
InstallMethod( IsSubset, "for a congruence subgroup and java.lang.StringIndexOutOfBoundsException: Index 63 out of bounds for length 59
[IsCongruenceSubgroup ] 0, function(G,H )
local T; if IsIntersectionOfCongruenceSubgroupsLevelOfCongruenceSubgroup() ));
return ForAll( DefiningCongruenceSubgroups(G), T -> IsSubset(T, (G)and IsCongruenceSubgroupGammaUpper0H then elif IsPrincipalCongruenceSubgroup(G) or
IsCongruenceSubgroupGamma1(G) or IsCongruenceSubgroupGammaUpper1(G) or IsCongruenceSubgroupGamma0(G) then
return false; elif IsCongruenceSubgroupGammaUpper0(G) then
return IsInt( LevelOfCongruenceSubgroup(H) / LevelOfCongruenceSubgroup(G) ); else # for a case of another type of congruence subgroup
TryNextMethod(); fi; end);
InstallMethod( IsSubset, "for a congruence subgroup and intersection of congruence subgroups",
[ IsCongruenceSubgroup, java.lang.StringIndexOutOfBoundsException: Index 59 out of bounds for length 17 0, function( G, H )
local DG, DH; # here we can check only sufficient conditions, and they are not # satisfied, then we call the next method if (G)then if ForAll( DefiningCongruenceSubgroups(H), DH ->
ForAll( DefiningCongruenceSubgroups(G), DG ->
IsSubset(G,DH) ) ) then
return true; else
TryNextMethod(); fi; elif IsPrincipalCongruenceSubgroup(G) or
IsCongruenceSubgroupGamma1(G) or IsCongruenceSubgroupGammaUpper1(G) or
IsCongruenceSubgroupGamma0(G) or IsCongruenceSubgroupGammaUpper0(G) then if ForAll( DefiningCongruenceSubgroups(H)
return true; else
TryNextMethod(); fi; else # for a case of another type of congruence subgroup
TryNextMethod(; fi; end);
InstallMethod( Intersection2,
f of congruencesubgroups",
[ IsCongruenceSubgroup, IsCongruenceSubgroup ], 0 r: n; function( G, H ) # # Case 1 - at least one subgroup is an intersection of congruence subgroupsr : r(1+p); # ifAssert 1 IndexInPSL2ZByFareySymbol( (H) )=r ;
java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 15
return IntersectionOfCongruenceSubgroups(G,H); # # Case 2 - the diagonal (both subgroups has the same type) # elif IsPrincipalCongruenceSubgroup(G) and IsPrincipalCongruenceSubgroup(H) then
return PrincipalCongruenceSubgroup( Lcm( LevelOfCongruenceSubgroup(G),
LevelOfCongruenceSubgroup(H) ) ); elif IsCongruenceSubgroupGamma1(G) and IsCongruenceSubgroupGamma1(H) then
return CongruenceSubgroupGamma1( Lcm( LevelOfCongruenceSubgroup(G),
LevelOfCongruenceSubgroup(H) ) ); elif IsCongruenceSubgroupGammaUpper1# [ CongruenceSubgroupGamma0(n) : CongruenceSubgroupGamma1(n) ] = n * "Product over prime p | n" ( 1 - 1/p )
return CongruenceSubgroupGammaUpper1(Lcm LevelOfCongruenceSubgroup()java.lang.StringIndexOutOfBoundsException: Index 78 out of bounds for length 78
LevelOfCongruenceSubgroup(H) ) ); elif IsCongruenceSubgroupGamma0(G) and IsCongruenceSubgroupGamma0(H) then
return CongruenceSubgroupGamma0( Lcm( LevelOfCongruenceSubgroup(G),
LevelOfCongruenceSubgroup(H) ) ); elif IsCongruenceSubgroupGammaUpper0(G) and IsCongruenceSubgroupGammaUpper0(H) then
return CongruenceSubgroupGammaUpper0( Lcm( LevelOfCongruenceSubgroup(G),
LevelOfCongruenceSubgroup(H) ) ); # # Case 3 - Subgroups has different level #
od
return Assert( 1IndexInPSL2ZByFareySymbol(FareySymbol (H )=r ; # # Now subgroups have the same level # elif IsCongruenceSubgroupGamma1(G) # if H is not in any of the cases above
return G so all properties and attributes of G will be preserved
IsCongruenceSubgroupGamma0(G) and IsCongruenceSubgroupGamma1(H) then
return H;
(G IsCongruenceSubgroupGammaUpper0(H)then
return G;
return ( (H))* ;
return H; elif IsCongruenceSubgroupGamma0fi;java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11
return IntersectionOfCongruenceSubgroups(G,H); else
return PrincipalCongruenceSubgroupI( IndexInSL2Z,
end);
############################################################################# InstallMethod( Index, ## Indices of congruence subgroups ## #############################################################################
function(G, )
SL_2()and a ",
[ IsNaturalSL return IndexInSL2Z(/G; 0, function(G H )
local n, prdiv, r, java.lang.StringIndexOutOfBoundsException: Range [0, 24) out of bounds for length 9
n := LevelOfCongruenceSubgroup(############################################################################# if HasIsPrincipalCongruenceSubgroup( H ) and
IsPrincipalCongruenceSubgroup if n=1then
Assert( 1, java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 0
return 1 elif =2then
java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 3
return 12; # not 6, since we are in SL, not in PSL else
prdiv := Set( Factors( n ) );
r := n^3; # not (n^3)/2 since we are in SL, not in PSL for p in prdiv do
r := r*(1-1/p^2);
od;
Assert( 1, IndexInPSL2ZByFareySymbol( FareySymbol ( H ) ) = r/2 );
return r; fi; elif ( HasIsCongruenceSubgroupGamma0( H ) and IsCongruenceSubgroupGamma0( H ) ) or
( HasIsCongruenceSubgroupGammaUpper0( H ) and IsCongruenceSubgroupGammaUpper0( H ) ) then # for CongruenceSubgroupGamma0 we use the formula # [ SL_2(Z) : CongruenceSubgroupGamma0(n) ] = n * "Product over prime p | n" ( 1 + 1/p )
prdiv := Set( Factors( n ) );
r := n; for p in prdiv do
r := r*(1+1/p);
od;
Assert( 1, IndexInPSL2ZByFareySymbol( FareySymbol ( H ) ) = r );
return r; elif ( HasIsCongruenceSubgroupGamma1( H ) and IsCongruenceSubgroupGamma1( H ) ) or
( HasIsCongruenceSubgroupGammaUpper1( H ) and IsCongruenceSubgroupGammaUpper1( H ) ) then # for CongruenceSubgroupGamma1 we use the formula # [ CongruenceSubgroupGamma0(n) : CongruenceSubgroupGamma1(n) ] = n * "Product over prime p | n" ( 1 - 1/p ) # Combining with the previous case, we get that # [ SL_2(Z) : CongruenceSubgroupGamma1(n) ] = n^2 * "Product over prime p | n" ( 1 - 1/p^2 )
prdiv := Set( Factors( n ) );
r := n^2; for p in prdiv do
r := r*(1-1/p^2);
od;
Assert( 1, IndexInPSL2ZByFareySymbol( FareySymbol ( H ) ) = r/2 );
return r; else # if H is not in any of the cases above, for example is an intersection # of some congruence subgroups, we derive the index from its Farey symbol if [[-1,0],[0,-1]] in H then
return IndexInPSL2ZByFareySymbol( FareySymbol ( H ) ) ; else
return IndexInPSL2ZByFareySymbol( FareySymbol ( H ) ) * 2; fi; fi; end);
InstallMethod( IndexInSL2Z, "for a congruence subgroup",
[ IsCongruenceSubgroup ], 0,
G -> Index( SL(2,Integers), G ) );
InstallMethod( Index, "for a pair of congruence subgroups",
[ IsCongruenceSubgroup, IsCongruenceSubgroup ], 0, function( G, H ) if IsSubgroup( G, H ) then
return IndexInSL2Z(H)/IndexInSL2Z(G); fi; end);
############################################################################# ## ## Generators of confruence subgroups from Farey symbols ## #############################################################################
InstallMethod( GeneratorsOfGroup, "for a congruence subgroup",
[ IsCongruenceSubgroup ], 0, function(G)
local gens, i;
Info( InfoCongruence, 1, "Using the Congruence package for GeneratorsOfGroup ...");
gens := GeneratorsByFareySymbol( FareySymbol( G ) ); for i in [ 1 .. Length(gens) ] do if not gens[i] in G then
gens[i] := -gens[i];
Assert( 1, gens[i] in G ); fi;
od;
return gens; end );
¤ 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.258Bemerkung:
¤
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.